diff --git a/data/documentation/freemiumkit.json b/data/documentation/freemiumkit.json index fbe7088..02cf988 100644 --- a/data/documentation/freemiumkit.json +++ b/data/documentation/freemiumkit.json @@ -1 +1 @@ -{"schemaVersion":{"minor":3,"major":0,"patch":0},"kind":"symbol","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit"},"sections":[],"hierarchy":{"paths":[[]]},"variants":[{"paths":["\/documentation\/freemiumkit"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"modules":[{"name":"FreemiumKit"}],"symbolKind":"module","externalID":"FreemiumKit","title":"FreemiumKit","role":"collection","roleHeading":"Framework"},"references":{"doc://FreemiumKit/documentation/FreemiumKit":{"type":"topic","role":"collection","url":"\/documentation\/freemiumkit","abstract":[],"kind":"symbol","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit","title":"FreemiumKit"}}} \ No newline at end of file +{"kind":"symbol","variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/freemiumkit"]}],"metadata":{"symbolKind":"module","modules":[{"name":"FreemiumKit"}],"roleHeading":"Framework","title":"FreemiumKit","role":"collection","externalID":"FreemiumKit"},"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit"},"sections":[],"hierarchy":{"paths":[[]]},"references":{"doc://FreemiumKit/documentation/FreemiumKit":{"kind":"symbol","title":"FreemiumKit","role":"collection","url":"\/documentation\/freemiumkit","abstract":[],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit","type":"topic"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-howitworks.json b/data/documentation/freemiumkit/faq-howitworks.json index f4de9e3..fa4c0c1 100644 --- a/data/documentation/freemiumkit/faq-howitworks.json +++ b/data/documentation/freemiumkit/faq-howitworks.json @@ -1 +1 @@ -{"schemaVersion":{"minor":3,"major":0,"patch":0},"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"abstract":[{"text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app.","type":"text"}],"kind":"article","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"sections":[],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"primaryContentSections":[{"content":[{"text":"Short Answer","type":"heading","anchor":"Short-Answer","level":2},{"inlineContent":[{"text":"FreemiumKit is built on top of StoreKit 2 and official App Store Connect APIs. Therefore, most of what FreemiumKit does is following modern Apple best practices, without being dependent on our servers. For the paywall remote configuration, we use a Content Delivery Network (CDN) for fast global distribution – but there’s also a local fallback in your project, in case of downtimes.","type":"text"}],"type":"paragraph"},{"text":"Full Answer","type":"heading","anchor":"Full-Answer","level":2},{"inlineContent":[{"type":"text","text":"FreemiumKit is here to automate the cumbersome and fiddly steps in setting up and maintaining purchases for your app. Our goal is not to cover every possible pricing model, neither is it to support all technological stacks. For example, we will probably never support Android. Instead, we keep the scope focused on the most modern Apple technologies and pricing concepts."}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"We will always try to support all Apple platforms you can choose as a destination for your target in Xcode and keep up with the latest OS releases. We will always prefer official APIs over private APIs and keep every dependency out that is not absolutely needed. This means, we stick to official Apple APIs wherever possible."}],"type":"paragraph"},{"inlineContent":[{"text":"This is the resulting current tech stack:","type":"text"}],"type":"paragraph"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"text":"Native apps for iOS, macOS, and visionOS (tvOS has no biometric authentication)","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"App connects to official "},{"type":"reference","identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","isActive":true},{"type":"text","text":" endpoints to handle purchases"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"isActive":true,"type":"reference","identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/"},{"type":"text","text":" SDK targeting iOS, macOS, visionOS, and tvOS (coming soon)"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"SDK is built on top of "},{"identifier":"https:\/\/developer.apple.com\/storekit\/","type":"reference","isActive":true},{"type":"text","text":" and SwiftUI 3 (supporting iOS\/tvOS 15+, macOS 12+, visionOS 1+)"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"identifier":"https:\/\/vapor.codes","type":"reference","isActive":true},{"text":"-based server for push notifications when purchases are made (reported by SDK)","type":"text"}]}]},{"content":[{"inlineContent":[{"identifier":"https:\/\/supabase.com","type":"reference","isActive":true},{"type":"text","text":"-based Content Delivery Network (CDN) for remote configuration of paywalls"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","isActive":true,"type":"reference"},{"text":"-based persistence of purchase history in your Apple Account for backup & sync","type":"text"}]}]}]},{"inlineContent":[{"type":"text","text":"The only non-Apple technologies here are our server and CDN. We included these dependencies in a thoughtful manner – let’s suppose the worst case happens and both are offline, then:"}],"type":"paragraph"},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ You would no longer receive "},{"type":"strong","inlineContent":[{"type":"text","text":"live push notifications"}]},{"type":"text","text":" when users make purchases (not mission-critical)"}]}]},{"content":[{"inlineContent":[{"text":"❌ You would no longer be able to ","type":"text"},{"inlineContent":[{"type":"text","text":"remotely configure"}],"type":"strong"},{"text":" your paywall or A\/B test (not mission-critical)","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ The "},{"inlineContent":[{"type":"text","text":"Paywall"}],"type":"strong"},{"type":"text","text":" UI would continue to work, using the local “fallback” configuration"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"✅ Users can continue to "},{"inlineContent":[{"text":"make purchases","type":"text"}],"type":"strong"},{"type":"text","text":", as the SDK only needs StoreKit 2 for that"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"✅ Even paying users will continue to ","type":"text"},{"inlineContent":[{"text":"have access to paid features","type":"text"}],"type":"strong"},{"text":" (via StoreKit 2)","type":"text"}]}]}]},{"inlineContent":[{"type":"text","text":"Of course, we don’t expect our servers to be down any significant amount of time. This was just to show you that we have considered all cases when designing FreemiumKit conceptually. And because all the purchases are directly configured on App Store Connect, you could even decide to move away from FreemiumKit entirely if you find our feature set does not fulfill your needs. There are no lock-in features. But beware, you will miss all our built-in conveniences! 😉"}],"type":"paragraph"},{"text":"Contact","type":"heading","anchor":"Contact","level":2},{"inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"identifier":"mailto:freemiumkit@fline.dev","isActive":true,"type":"reference"},{"text":".","type":"text"}],"type":"paragraph"},{"text":"Legal","type":"heading","anchor":"Legal","level":2},{"inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"type":"reference","isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/"}],"type":"small"}],"kind":"content"}],"metadata":{"title":"How does FreemiumKit work? Can I trust it?","roleHeading":"FAQs","role":"sampleCode"},"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"https://supabase.com":{"identifier":"https:\/\/supabase.com","titleInlineContent":[{"text":"Supabase","type":"text"}],"title":"Supabase","url":"https:\/\/supabase.com","type":"link"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"},"https://developer.apple.com/storekit/":{"identifier":"https:\/\/developer.apple.com\/storekit\/","titleInlineContent":[{"type":"text","text":"StoreKit 2"}],"title":"StoreKit 2","url":"https:\/\/developer.apple.com\/storekit\/","type":"link"},"https://vapor.codes":{"identifier":"https:\/\/vapor.codes","titleInlineContent":[{"text":"Vapor","type":"text"}],"title":"Vapor","url":"https:\/\/vapor.codes","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"},"https://developer.apple.com/icloud/cloudkit/":{"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","titleInlineContent":[{"type":"text","text":"CloudKit"}],"title":"CloudKit","url":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","type":"link"},"mailto:freemiumkit@fline.dev":{"identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"title":"freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"https://www.fline.dev/imprint/":{"identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}],"title":"Imprint","url":"https:\/\/www.fline.dev\/imprint\/","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"https://developer.apple.com/documentation/appstoreconnectapi/":{"identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","titleInlineContent":[{"type":"text","text":"App Store Connect API"}],"title":"App Store Connect API","url":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","type":"link"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","alt":null,"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"type":"image"},"https://developer.apple.com/xcode/swiftui/":{"type":"link","titleInlineContent":[{"text":"SwiftUI","type":"text"}],"url":"https:\/\/developer.apple.com\/xcode\/swiftui\/","identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/","title":"SwiftUI"}}} \ No newline at end of file +{"schemaVersion":{"major":0,"minor":3,"patch":0},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"metadata":{"roleHeading":"FAQs","role":"sampleCode","title":"How does FreemiumKit work? Can I trust it?"},"sections":[],"kind":"article","primaryContentSections":[{"kind":"content","content":[{"type":"heading","text":"Short Answer","anchor":"Short-Answer","level":2},{"type":"paragraph","inlineContent":[{"text":"FreemiumKit is built on top of StoreKit 2 and official App Store Connect APIs. Therefore, most of what FreemiumKit does is following modern Apple best practices, without being dependent on our servers. For the paywall remote configuration, we use a Content Delivery Network (CDN) for fast global distribution – but there’s also a local fallback in your project, in case of downtimes.","type":"text"}]},{"type":"heading","text":"Full Answer","anchor":"Full-Answer","level":2},{"type":"paragraph","inlineContent":[{"text":"FreemiumKit is here to automate the cumbersome and fiddly steps in setting up and maintaining purchases for your app. Our goal is not to cover every possible pricing model, neither is it to support all technological stacks. For example, we will probably never support Android. Instead, we keep the scope focused on the most modern Apple technologies and pricing concepts.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"We will always try to support all Apple platforms you can choose as a destination for your target in Xcode and keep up with the latest OS releases. We will always prefer official APIs over private APIs and keep every dependency out that is not absolutely needed. This means, we stick to official Apple APIs wherever possible.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"This is the resulting current tech stack:","type":"text"}]},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"text":"Native apps for iOS, macOS, and visionOS (tvOS has no biometric authentication)","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"App connects to official ","type":"text"},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/"},{"text":" endpoints to handle purchases","type":"text"}]}]},{"content":[{"inlineContent":[{"isActive":true,"type":"reference","identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/"},{"text":" SDK targeting iOS, macOS, visionOS, and tvOS (coming soon)","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"SDK is built on top of "},{"isActive":true,"identifier":"https:\/\/developer.apple.com\/storekit\/","type":"reference"},{"text":" and SwiftUI 3 (supporting iOS\/tvOS 15+, macOS 12+, visionOS 1+)","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"reference","isActive":true,"identifier":"https:\/\/vapor.codes"},{"type":"text","text":"-based server for push notifications when purchases are made (reported by SDK)"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"reference","isActive":true,"identifier":"https:\/\/supabase.com"},{"type":"text","text":"-based Content Delivery Network (CDN) for remote configuration of paywalls"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","isActive":true,"type":"reference"},{"text":"-based persistence of purchase history in your Apple Account for backup & sync","type":"text"}]}]}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"The only non-Apple technologies here are our server and CDN. We included these dependencies in a thoughtful manner – let’s suppose the worst case happens and both are offline, then:"}]},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ You would no longer receive "},{"type":"strong","inlineContent":[{"text":"live push notifications","type":"text"}]},{"type":"text","text":" when users make purchases (not mission-critical)"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ You would no longer be able to "},{"inlineContent":[{"type":"text","text":"remotely configure"}],"type":"strong"},{"type":"text","text":" your paywall or A\/B test (not mission-critical)"}]}]},{"content":[{"inlineContent":[{"text":"✅ The ","type":"text"},{"inlineContent":[{"type":"text","text":"Paywall"}],"type":"strong"},{"text":" UI would continue to work, using the local “fallback” configuration","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"✅ Users can continue to "},{"type":"strong","inlineContent":[{"type":"text","text":"make purchases"}]},{"type":"text","text":", as the SDK only needs StoreKit 2 for that"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ Even paying users will continue to "},{"inlineContent":[{"type":"text","text":"have access to paid features"}],"type":"strong"},{"type":"text","text":" (via StoreKit 2)"}]}]}]},{"type":"paragraph","inlineContent":[{"text":"Of course, we don’t expect our servers to be down any significant amount of time. This was just to show you that we have considered all cases when designing FreemiumKit conceptually. And because all the purchases are directly configured on App Store Connect, you could even decide to move away from FreemiumKit entirely if you find our feature set does not fulfill your needs. There are no lock-in features. But beware, you will miss all our built-in conveniences! 😉","type":"text"}]},{"type":"heading","text":"Contact","anchor":"Contact","level":2},{"type":"paragraph","inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"isActive":true,"type":"reference","identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}]},{"type":"heading","text":"Legal","anchor":"Legal","level":2},{"type":"small","inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true,"type":"reference"}]}]}],"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"references":{"https://developer.apple.com/documentation/appstoreconnectapi/":{"identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","title":"App Store Connect API","titleInlineContent":[{"type":"text","text":"App Store Connect API"}],"url":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"https://developer.apple.com/icloud/cloudkit/":{"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","title":"CloudKit","titleInlineContent":[{"type":"text","text":"CloudKit"}],"url":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"mailto:freemiumkit@fline.dev":{"identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"url":"mailto:freemiumkit@fline.dev","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"https://supabase.com":{"identifier":"https:\/\/supabase.com","title":"Supabase","titleInlineContent":[{"type":"text","text":"Supabase"}],"url":"https:\/\/supabase.com","type":"link"},"https://developer.apple.com/xcode/swiftui/":{"identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/","title":"SwiftUI","titleInlineContent":[{"type":"text","text":"SwiftUI"}],"url":"https:\/\/developer.apple.com\/xcode\/swiftui\/","type":"link"},"https://developer.apple.com/storekit/":{"identifier":"https:\/\/developer.apple.com\/storekit\/","title":"StoreKit 2","titleInlineContent":[{"type":"text","text":"StoreKit 2"}],"url":"https:\/\/developer.apple.com\/storekit\/","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"https://www.fline.dev/imprint/":{"identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","titleInlineContent":[{"type":"text","text":"Imprint"}],"url":"https:\/\/www.fline.dev\/imprint\/","type":"link"},"FreemiumKit.png":{"alt":null,"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"identifier":"FreemiumKit.png","type":"image"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"https://vapor.codes":{"identifier":"https:\/\/vapor.codes","title":"Vapor","titleInlineContent":[{"type":"text","text":"Vapor"}],"url":"https:\/\/vapor.codes","type":"link"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-migratefrompaidupfront.json b/data/documentation/freemiumkit/faq-migratefrompaidupfront.json index 4c05ee4..2ba2f18 100644 --- a/data/documentation/freemiumkit/faq-migratefrompaidupfront.json +++ b/data/documentation/freemiumkit/faq-migratefrompaidupfront.json @@ -1 +1 @@ -{"kind":"article","metadata":{"title":"My app is paid-up-front. How can I make it Freemium?","role":"sampleCode","roleHeading":"FAQs"},"schemaVersion":{"minor":3,"patch":0,"major":0},"sections":[],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"primaryContentSections":[{"kind":"content","content":[{"type":"heading","level":2,"text":"Short Answer","anchor":"Short-Answer"},{"type":"paragraph","inlineContent":[{"text":"Our SDK uses Apples ","type":"text"},{"isActive":true,"type":"reference","identifier":"https:\/\/developer.apple.com\/documentation\/storekit\/supporting_business_model_changes_by_using_the_app_transaction"},{"text":" in StoreKit to determine users who purchased your paid app before you migrated it to the Freemium model. And for new users, it works normally. You just need to tell our SDK which was the last paid version and build number like this:","type":"text"}]},{"type":"codeListing","syntax":"swift","code":["FreemiumKit.shared.lastPaidRelease(version: \"1.5.1\", build: 25)"]},{"type":"heading","level":2,"text":"Full Answer","anchor":"Full-Answer"},{"type":"paragraph","inlineContent":[{"text":"Read our full guide here:","type":"text"}]},{"type":"heading","level":2,"text":"Contact","anchor":"Contact"},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"identifier":"mailto:freemiumkit@fline.dev","type":"reference","isActive":true},{"text":".","type":"text"}]},{"type":"heading","level":2,"text":"Legal","anchor":"Legal"},{"type":"small","inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"type":"reference","identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true}]}]}],"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"abstract":[{"text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased.","type":"text"}],"references":{"https://www.fline.dev/imprint/":{"type":"link","identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","titleInlineContent":[{"text":"Imprint","type":"text"}],"url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"FreemiumKit.png":{"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"type":"image","identifier":"FreemiumKit.png","alt":null},"https://developer.apple.com/documentation/storekit/supporting_business_model_changes_by_using_the_app_transaction":{"type":"link","identifier":"https:\/\/developer.apple.com\/documentation\/storekit\/supporting_business_model_changes_by_using_the_app_transaction","title":"built-in solution","titleInlineContent":[{"text":"built-in solution","type":"text"}],"url":"https:\/\/developer.apple.com\/documentation\/storekit\/supporting_business_model_changes_by_using_the_app_transaction"},"mailto:freemiumkit@fline.dev":{"type":"link","identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"url":"mailto:freemiumkit@fline.dev"}}} \ No newline at end of file +{"schemaVersion":{"minor":3,"patch":0,"major":0},"metadata":{"title":"My app is paid-up-front. How can I make it Freemium?","roleHeading":"FAQs","role":"sampleCode"},"abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","interfaceLanguage":"swift"},"primaryContentSections":[{"content":[{"type":"heading","anchor":"Short-Answer","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"text":"Our SDK uses Apples ","type":"text"},{"identifier":"https:\/\/developer.apple.com\/documentation\/storekit\/supporting_business_model_changes_by_using_the_app_transaction","type":"reference","isActive":true},{"text":" in StoreKit to determine users who purchased your paid app before you migrated it to the Freemium model. And for new users, it works normally. You just need to tell our SDK which was the last paid version and build number like this:","type":"text"}]},{"type":"codeListing","syntax":"swift","code":["FreemiumKit.shared.lastPaidRelease(version: \"1.5.1\", build: 25)"]},{"type":"heading","anchor":"Full-Answer","level":2,"text":"Full Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Read our full guide here:"}]},{"type":"heading","anchor":"Contact","level":2,"text":"Contact"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"type":"reference","isActive":true,"identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}]},{"type":"heading","anchor":"Legal","level":2,"text":"Legal"},{"type":"small","inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"type":"reference","identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true}]}],"kind":"content"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"sections":[],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"FreemiumKit.png":{"alt":null,"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"https://www.fline.dev/imprint/":{"title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"text":"Imprint","type":"text"}],"type":"link","url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"https://developer.apple.com/documentation/storekit/supporting_business_model_changes_by_using_the_app_transaction":{"title":"built-in solution","identifier":"https:\/\/developer.apple.com\/documentation\/storekit\/supporting_business_model_changes_by_using_the_app_transaction","titleInlineContent":[{"text":"built-in solution","type":"text"}],"type":"link","url":"https:\/\/developer.apple.com\/documentation\/storekit\/supporting_business_model_changes_by_using_the_app_transaction"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"type":"link","url":"mailto:freemiumkit@fline.dev"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-migratefromrevenuecat.json b/data/documentation/freemiumkit/faq-migratefromrevenuecat.json index 6816c49..1871692 100644 --- a/data/documentation/freemiumkit/faq-migratefromrevenuecat.json +++ b/data/documentation/freemiumkit/faq-migratefromrevenuecat.json @@ -1 +1 @@ -{"kind":"article","metadata":{"title":"I use RevenueCat, how can I migrate?","role":"sampleCode","roleHeading":"FAQs"},"schemaVersion":{"minor":3,"patch":0,"major":0},"sections":[],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"primaryContentSections":[{"content":[{"type":"heading","anchor":"Short-Answer","text":"Short Answer","level":2},{"type":"paragraph","inlineContent":[{"text":"Migrating from RevenueCat involves the following steps (outlined in detail below):","type":"text"}]},{"items":[{"content":[{"inlineContent":[{"type":"text","text":"Set up your app & existing purchases in the FreemiumKit app (5 min)"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Integrate the FreemiumKit SDK into your app & configure it (5 min)"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"Replace RevenueCat SDK calls with FreemiumKit calls (10-15 min)","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Remove the RevenueCat SDK integration from your app (5 min)"}]}]},{"content":[{"inlineContent":[{"text":"Adjust the Paywall UI in FreemiumKit to your liking (5 min)","type":"text"}],"type":"paragraph"}]}],"type":"orderedList"},{"type":"paragraph","inlineContent":[{"text":"Current limits: You can’t select products for the paywall at this moment – all of them are automatically shown. (This limitation will be fixed in a future version.)","type":"text"}]},{"type":"heading","anchor":"Full-Answer","text":"Full Answer","level":2},{"type":"heading","anchor":"Step-1-Set-up-your-app--purchases-in-FreemiumKit-5-min","text":"Step 1: Set up your app & purchases in FreemiumKit (5 min)","level":3},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"text":"Download FreemiumKit and follow the simple instructions to connect to your App Store account if you’re starting it for the first time. This should take less than a minute.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"Now, press the + button at the top of the left sidebar and select the app you want to migrate and press “Add Project”.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Navigate to your apps “Products” tab and make sure that all purchases are listed there and have the correct tier set. Subscription tiers are detected automatically, but if you have a Lifetime Purchase, FreemiumKit can’t auto-detect the tier, so you need to press “Mark as Lifetime for Tier…” and select the right tier (most likely ‘Tier 1’)."}]}]},{"content":[{"inlineContent":[{"type":"text","text":"Open the ‘Setup’ tab and drag & drop the config icon on the right to your apps’ Asset Catalog."}],"type":"paragraph"}]}],"type":"orderedList"},{"type":"heading","anchor":"Step-2-Integrate-FreemiumKit-SDK--configure-it-5-min","text":"Step 2: Integrate FreemiumKit SDK & configure it (5 min)","level":3},{"type":"paragraph","inlineContent":[{"type":"text","text":"For this step, simply follow the ‘Adding the SDK’ and ‘Configuring the SDK’ sections of the "},{"type":"reference","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","isActive":true},{"type":"text","text":" – feel free to also read the rest of the guide to get a better understanding of the next step!"}]},{"type":"heading","anchor":"Step-3-Replace-RevenueCat-SDK-with-our-SDK-calls-10-15-min","text":"Step 3: Replace RevenueCat SDK with our SDK calls (10-15 min)","level":3},{"type":"paragraph","inlineContent":[{"type":"text","text":"If you’ve been using RevenueCat with your own paywall UIs, we have good news because you no longer need to maintain your paywall code that loads ‘offerings’ and displays them – we all handle this for you!"}]},{"type":"paragraph","inlineContent":[{"text":"If this is the case, then somewhere in your project you’re checking if the current user has access to your paid features with either the async\/await call or the completion call below:","type":"text"}]},{"type":"codeListing","syntax":"swift","code":["\/\/ async\/await call","let customerInfo = try await Purchases.shared.customerInfo()","","\/\/ ","Purchases.shared.getCustomerInfo { (customerInfo, error) in"," \/\/ access latest customerInfo","}"]},{"type":"paragraph","inlineContent":[{"text":"A quick search for ","type":"text"},{"type":"codeVoice","code":"Purchases.shared.customerInfo()"},{"text":" and ","type":"text"},{"type":"codeVoice","code":"Purchases.shared.getCustomerInfo"},{"text":" should reveal these places. You’ll have some logic based on ","type":"text"},{"type":"codeVoice","code":"customerInfo"},{"text":" instance details that either gives the user access to your paid features or shows your paywall.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"This logic can be completely replaced by one of our 3 APIs explained in the ‘Showing the Paywalls’ section in our ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"},{"text":":","type":"text"}]},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"text":"Use ","type":"text"},{"code":"PaidFeatureButton","type":"codeVoice"},{"text":" or ","type":"text"},{"code":"PaidFeatureView","type":"codeVoice"},{"text":" for buttons or custom views that should only work for paying customers. Both of these views will automatically show our built-in paywall if the user didn’t purchase the required paid tier yet. These are the easiest and therefore recommended APIs for most cases – and thanks to ","type":"text"},{"code":"PaidFeatureView","type":"codeVoice"},{"text":" they’re quite flexible.","type":"text"}]}]},{"content":[{"inlineContent":[{"text":"You can also use the ","type":"text"},{"type":"codeVoice","code":".paywall(isPresented:)"},{"text":" SwiftUI modifier with a custom check for the ","type":"text"},{"type":"codeVoice","code":"purchasedTier"},{"text":" property of ","type":"text"},{"type":"codeVoice","code":"@EnvironmentObject var freemiumKit: FreemiumKit"},{"text":" added to your SwiftUI view(s). This is more similar to how the RevenueCat SDK works with either the manual paywall or their bult-in iOS paywalls, but we still provide the paywall UI for you. This requires more code on your end, but also gives you more control if needed.","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"Our ","type":"text"},{"type":"codeVoice","code":"PaidStatusView"},{"text":" is a special view that we pepared for use in places where you want to simply indicate the current paid status of the user. This is a common need in the settings screen of an app and usually inside a ","type":"text"},{"type":"codeVoice","code":"Form"},{"text":" or ","type":"text"},{"type":"codeVoice","code":"List"},{"text":" view. We recommend adding it if you don’t have such a place yet as this serves also as a reminder for Free users that you have paid features they might be interested in.","type":"text"}]}]}],"type":"orderedList"},{"type":"paragraph","inlineContent":[{"text":"If you need global access to the current user’s purchase status, you can call ","type":"text"},{"type":"codeVoice","code":"FreemiumKit.shared.purchasedTier"},{"text":" from anywhwere in your app (e.g. in your models).","type":"text"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"Make sure your project builds before moving on to the next step."}]},{"type":"heading","anchor":"Step-4-Remove-the-RevenueCat-SDK-integration-5-min","text":"Step 4: Remove the RevenueCat SDK integration (5 min)","level":3},{"type":"paragraph","inlineContent":[{"text":"Once you migrated all your code over to FreemiumKit, you can remove the RevenueCat SDK from your project. Once the dependency is removed, build your project to find places where you still are importing the RevenueCat SDKs and where you configuried it (probably in your app entry point). Remove the configuration code and all import statements. Your project should build now and the technical part of the migration process is completed! Feel free to commit. 🎉","type":"text"}]},{"type":"heading","anchor":"Step-5-Adjust-the-Paywall-UI-in-FremiumKit-5-min","text":"Step 5: Adjust the Paywall UI in FremiumKit (5 min)","level":3},{"type":"paragraph","inlineContent":[{"text":"While at this point your app is already fully migrated to FreemiumKit, you might want to open the FreemiumKit app, select your project and open the ‘Paywalls’ tab.","type":"text"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"Here you can see a preview of your paywall and adjust it with many configuration options. Feel free to play around with the options until you’re happy with the results and don’t forget to press ‘Save Changes to Remote’ at the end."}]},{"type":"paragraph","inlineContent":[{"text":"You might also want to optionally delete the ‘FreemiumKit’ config file from your Asset Catalog and drag & drop the now adjusted config file from the ‘Setup’ tab. This will make sure your adjustments are also available in case the remote config file can’t be loaded on the users devices, where FreemiumKit will fall back to the local file included in the Asset Catalog.","type":"text"}]},{"type":"heading","anchor":"Current-Limitations","text":"Current Limitations","level":3},{"type":"paragraph","inlineContent":[{"text":"If you have created more products on App Store Connect than you want to show in your paywall, you might want to wait until we have implemented a product selection for paywalls in a future version.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"For example, if you have a Weekly, a Monthly, a Yearly, and a Lifetime purchase on Connect (and all of them are approved), then they all will be shown in our paywalls. If you want to exclude e.g. the Weekly purchase from your paywall, that’s currently not supported.","type":"text"}]},{"type":"heading","anchor":"Contact","text":"Contact","level":2},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"identifier":"mailto:freemiumkit@fline.dev","isActive":true,"type":"reference"},{"text":".","type":"text"}]},{"type":"heading","anchor":"Legal","text":"Legal","level":2},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true,"type":"reference"}]}],"kind":"content"}],"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"references":{"https://www.fline.dev/imprint/":{"type":"link","identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","titleInlineContent":[{"text":"Imprint","type":"text"}],"url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"FreemiumKit.png":{"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"type":"image","identifier":"FreemiumKit.png","alt":null},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"mailto:freemiumkit@fline.dev":{"type":"link","identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"url":"mailto:freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"title":"SDK Setup Guide","abstract":[{"type":"text","text":"Learn how to set up your app for our paywalls and live push notifications."}],"role":"article","url":"\/documentation\/freemiumkit\/setupguide","kind":"article","type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","images":[{"type":"icon","identifier":"FreemiumKit.png"}]}}} \ No newline at end of file +{"metadata":{"roleHeading":"FAQs","role":"sampleCode","title":"I use RevenueCat, how can I migrate?"},"kind":"article","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","interfaceLanguage":"swift"},"schemaVersion":{"patch":0,"major":0,"minor":3},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"primaryContentSections":[{"kind":"content","content":[{"text":"Short Answer","type":"heading","level":2,"anchor":"Short-Answer"},{"inlineContent":[{"type":"text","text":"Migrating from RevenueCat involves the following steps (outlined in detail below):"}],"type":"paragraph"},{"type":"orderedList","items":[{"content":[{"inlineContent":[{"text":"Set up your app & existing purchases in the FreemiumKit app (5 min)","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Integrate the FreemiumKit SDK into your app & configure it (5 min)","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"Replace RevenueCat SDK calls with FreemiumKit calls (10-15 min)"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Remove the RevenueCat SDK integration from your app (5 min)"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"Adjust the Paywall UI in FreemiumKit to your liking (5 min)"}],"type":"paragraph"}]}]},{"inlineContent":[{"text":"Current limits: You can’t select products for the paywall at this moment – all of them are automatically shown. (This limitation will be fixed in a future version.)","type":"text"}],"type":"paragraph"},{"text":"Full Answer","type":"heading","level":2,"anchor":"Full-Answer"},{"text":"Step 1: Set up your app & purchases in FreemiumKit (5 min)","type":"heading","level":3,"anchor":"Step-1-Set-up-your-app--purchases-in-FreemiumKit-5-min"},{"type":"orderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Download FreemiumKit and follow the simple instructions to connect to your App Store account if you’re starting it for the first time. This should take less than a minute."}]}]},{"content":[{"inlineContent":[{"text":"Now, press the + button at the top of the left sidebar and select the app you want to migrate and press “Add Project”.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"Navigate to your apps “Products” tab and make sure that all purchases are listed there and have the correct tier set. Subscription tiers are detected automatically, but if you have a Lifetime Purchase, FreemiumKit can’t auto-detect the tier, so you need to press “Mark as Lifetime for Tier…” and select the right tier (most likely ‘Tier 1’)."}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Open the ‘Setup’ tab and drag & drop the config icon on the right to your apps’ Asset Catalog.","type":"text"}],"type":"paragraph"}]}]},{"text":"Step 2: Integrate FreemiumKit SDK & configure it (5 min)","type":"heading","level":3,"anchor":"Step-2-Integrate-FreemiumKit-SDK--configure-it-5-min"},{"inlineContent":[{"type":"text","text":"For this step, simply follow the ‘Adding the SDK’ and ‘Configuring the SDK’ sections of the "},{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","type":"reference","isActive":true},{"type":"text","text":" – feel free to also read the rest of the guide to get a better understanding of the next step!"}],"type":"paragraph"},{"text":"Step 3: Replace RevenueCat SDK with our SDK calls (10-15 min)","type":"heading","level":3,"anchor":"Step-3-Replace-RevenueCat-SDK-with-our-SDK-calls-10-15-min"},{"inlineContent":[{"type":"text","text":"If you’ve been using RevenueCat with your own paywall UIs, we have good news because you no longer need to maintain your paywall code that loads ‘offerings’ and displays them – we all handle this for you!"}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"If this is the case, then somewhere in your project you’re checking if the current user has access to your paid features with either the async\/await call or the completion call below:"}],"type":"paragraph"},{"syntax":"swift","type":"codeListing","code":["\/\/ async\/await call","let customerInfo = try await Purchases.shared.customerInfo()","","\/\/ ","Purchases.shared.getCustomerInfo { (customerInfo, error) in"," \/\/ access latest customerInfo","}"]},{"inlineContent":[{"type":"text","text":"A quick search for "},{"code":"Purchases.shared.customerInfo()","type":"codeVoice"},{"type":"text","text":" and "},{"code":"Purchases.shared.getCustomerInfo","type":"codeVoice"},{"type":"text","text":" should reveal these places. You’ll have some logic based on "},{"code":"customerInfo","type":"codeVoice"},{"type":"text","text":" instance details that either gives the user access to your paid features or shows your paywall."}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"This logic can be completely replaced by one of our 3 APIs explained in the ‘Showing the Paywalls’ section in our "},{"type":"reference","isActive":true,"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"},{"type":"text","text":":"}],"type":"paragraph"},{"type":"orderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Use "},{"code":"PaidFeatureButton","type":"codeVoice"},{"type":"text","text":" or "},{"code":"PaidFeatureView","type":"codeVoice"},{"type":"text","text":" for buttons or custom views that should only work for paying customers. Both of these views will automatically show our built-in paywall if the user didn’t purchase the required paid tier yet. These are the easiest and therefore recommended APIs for most cases – and thanks to "},{"code":"PaidFeatureView","type":"codeVoice"},{"type":"text","text":" they’re quite flexible."}]}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"You can also use the ","type":"text"},{"code":".paywall(isPresented:)","type":"codeVoice"},{"text":" SwiftUI modifier with a custom check for the ","type":"text"},{"code":"purchasedTier","type":"codeVoice"},{"text":" property of ","type":"text"},{"code":"@EnvironmentObject var freemiumKit: FreemiumKit","type":"codeVoice"},{"text":" added to your SwiftUI view(s). This is more similar to how the RevenueCat SDK works with either the manual paywall or their bult-in iOS paywalls, but we still provide the paywall UI for you. This requires more code on your end, but also gives you more control if needed.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Our "},{"type":"codeVoice","code":"PaidStatusView"},{"type":"text","text":" is a special view that we pepared for use in places where you want to simply indicate the current paid status of the user. This is a common need in the settings screen of an app and usually inside a "},{"type":"codeVoice","code":"Form"},{"type":"text","text":" or "},{"type":"codeVoice","code":"List"},{"type":"text","text":" view. We recommend adding it if you don’t have such a place yet as this serves also as a reminder for Free users that you have paid features they might be interested in."}]}]}]},{"inlineContent":[{"type":"text","text":"If you need global access to the current user’s purchase status, you can call "},{"type":"codeVoice","code":"FreemiumKit.shared.purchasedTier"},{"type":"text","text":" from anywhwere in your app (e.g. in your models)."}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"Make sure your project builds before moving on to the next step."}],"type":"paragraph"},{"text":"Step 4: Remove the RevenueCat SDK integration (5 min)","type":"heading","level":3,"anchor":"Step-4-Remove-the-RevenueCat-SDK-integration-5-min"},{"inlineContent":[{"type":"text","text":"Once you migrated all your code over to FreemiumKit, you can remove the RevenueCat SDK from your project. Once the dependency is removed, build your project to find places where you still are importing the RevenueCat SDKs and where you configuried it (probably in your app entry point). Remove the configuration code and all import statements. Your project should build now and the technical part of the migration process is completed! Feel free to commit. 🎉"}],"type":"paragraph"},{"text":"Step 5: Adjust the Paywall UI in FremiumKit (5 min)","type":"heading","level":3,"anchor":"Step-5-Adjust-the-Paywall-UI-in-FremiumKit-5-min"},{"inlineContent":[{"type":"text","text":"While at this point your app is already fully migrated to FreemiumKit, you might want to open the FreemiumKit app, select your project and open the ‘Paywalls’ tab."}],"type":"paragraph"},{"inlineContent":[{"text":"Here you can see a preview of your paywall and adjust it with many configuration options. Feel free to play around with the options until you’re happy with the results and don’t forget to press ‘Save Changes to Remote’ at the end.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"You might also want to optionally delete the ‘FreemiumKit’ config file from your Asset Catalog and drag & drop the now adjusted config file from the ‘Setup’ tab. This will make sure your adjustments are also available in case the remote config file can’t be loaded on the users devices, where FreemiumKit will fall back to the local file included in the Asset Catalog.","type":"text"}],"type":"paragraph"},{"text":"Current Limitations","type":"heading","level":3,"anchor":"Current-Limitations"},{"inlineContent":[{"type":"text","text":"If you have created more products on App Store Connect than you want to show in your paywall, you might want to wait until we have implemented a product selection for paywalls in a future version."}],"type":"paragraph"},{"inlineContent":[{"text":"For example, if you have a Weekly, a Monthly, a Yearly, and a Lifetime purchase on Connect (and all of them are approved), then they all will be shown in our paywalls. If you want to exclude e.g. the Weekly purchase from your paywall, that’s currently not supported.","type":"text"}],"type":"paragraph"},{"text":"Contact","type":"heading","level":2,"anchor":"Contact"},{"inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"type":"reference","identifier":"mailto:freemiumkit@fline.dev","isActive":true},{"type":"text","text":"."}],"type":"paragraph"},{"text":"Legal","type":"heading","level":2,"anchor":"Legal"},{"inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}],"type":"small"}]}],"sections":[],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"role":"article","type":"topic","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"kind":"article","url":"\/documentation\/freemiumkit\/setupguide","title":"SDK Setup Guide"},"https://www.fline.dev/imprint/":{"title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}],"url":"https:\/\/www.fline.dev\/imprint\/","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"url":"mailto:freemiumkit@fline.dev","type":"link"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"FreemiumKit.png":{"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"identifier":"FreemiumKit.png","alt":null,"type":"image"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-parentalgate.json b/data/documentation/freemiumkit/faq-parentalgate.json new file mode 100644 index 0000000..0409672 --- /dev/null +++ b/data/documentation/freemiumkit/faq-parentalgate.json @@ -0,0 +1 @@ +{"sections":[],"kind":"article","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"schemaVersion":{"minor":3,"patch":0,"major":0},"primaryContentSections":[{"content":[{"type":"heading","anchor":"Short-Answer","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"text":"Yes, the FreemiumKit SDK ships with a built-in parental gate. Just call ","type":"text"},{"code":"FreemiumKit.shared.enableParentalGate(options:)","type":"codeVoice"},{"text":" upon app start.","type":"text"}]},{"type":"heading","anchor":"Full-Answer","level":2,"text":"Full Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"We’ve built a simple math-based parental gate that will ask a random multiplication question with numbers from 2 to 10. This should be easy enough for any parent to solve, but tricky enough to avoid small children (6 or younger) accidentally getting into the paywall, as required by the "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/app-store\/review\/guidelines\/#kids-category"},{"type":"text","text":" for apps in the Kids category."}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"Just tell our SDK that it should use a parental gate before showing the paywall upon app start, like this:"}]},{"type":"codeListing","syntax":"swift","code":["import FreemiumKit","","@main","struct AwesomeApp: App {"," init() {"," FreemiumKit.shared.enableParentalGate(options: ParentalGateOptions())"," }","}"]},{"type":"paragraph","inlineContent":[{"text":"This single line will already work! But it will use the default Settings app-like colors (black\/white\/accent) which can look boring.","type":"text"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"You probably want to customize the parental gate to look nicer to fit your apps playful color scheme, like this:"}]},{"type":"codeListing","syntax":"swift","code":["import FreemiumKit","","@main","struct AwesomeApp: App {"," init() {"," FreemiumKit.shared.enableParentalGate("," options: ParentalGateOptions("," background: .linearGradient("," LinearGradient("," gradient: Gradient(colors: [.blue, .purple]),"," startPoint: .topLeading, "," endPoint: .bottomTrailing"," )"," ),"," textColor: .white, "," submitButtonBackgroundColor: .green,"," submitButtonTitleColor: .white"," )"," )"," }","}"]},{"type":"paragraph","inlineContent":[{"text":"The result will look like this on iOS (and similar on other platforms):","type":"text"}]},{"type":"paragraph","inlineContent":[{"type":"image","identifier":"ParentalGate-Customized"}]},{"type":"heading","anchor":"Contact","level":2,"text":"Contact"},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"identifier":"mailto:freemiumkit@fline.dev","type":"reference","isActive":true},{"text":".","type":"text"}]},{"type":"heading","anchor":"Legal","level":2,"text":"Legal"},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}]}],"kind":"content"}],"metadata":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","role":"sampleCode","roleHeading":"FAQs"},"abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"FreemiumKit.png":{"alt":null,"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"ParentalGate-Customized":{"variants":[{"traits":["1x","light"],"url":"\/images\/ParentalGate-Customized.png"}],"identifier":"ParentalGate-Customized","type":"image","alt":null},"https://www.fline.dev/imprint/":{"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"link","title":"Imprint","titleInlineContent":[{"text":"Imprint","type":"text"}],"url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"mailto:freemiumkit@fline.dev":{"identifier":"mailto:freemiumkit@fline.dev","type":"link","title":"freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"url":"mailto:freemiumkit@fline.dev"},"https://developer.apple.com/app-store/review/guidelines/#kids-category":{"identifier":"https:\/\/developer.apple.com\/app-store\/review\/guidelines\/#kids-category","type":"link","title":"App Store guidelines","titleInlineContent":[{"text":"App Store guidelines","type":"text"}],"url":"https:\/\/developer.apple.com\/app-store\/review\/guidelines\/#kids-category"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-pricing.json b/data/documentation/freemiumkit/faq-pricing.json index dbb751e..5481cd1 100644 --- a/data/documentation/freemiumkit/faq-pricing.json +++ b/data/documentation/freemiumkit/faq-pricing.json @@ -1 +1 @@ -{"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"primaryContentSections":[{"content":[{"anchor":"Short-Answer","text":"Short Answer","level":2,"type":"heading"},{"inlineContent":[{"type":"text","text":"We build the average of your last 2 months total revenue reported to App Store Connect across all apps. If you exceed your current plan, you no longer will be able to update the paywall remote configuration, you won’t see the purchase stats, nor will you receive purchase notifications. But your app will continue to show your last paywall and purchases will continue to work in your apps."}],"type":"paragraph"},{"anchor":"Full-Answer","text":"Full Answer","level":2,"type":"heading"},{"inlineContent":[{"type":"text","text":"Income on App Store Connect can vary significantly, that’s why we’ve build a flexible and fair system for you:"}],"type":"paragraph"},{"inlineContent":[{"text":"Your monthly income is calculated by building the ","type":"text"},{"inlineContent":[{"text":"average of your last 2 months’ total revenue","type":"text"}],"type":"strong"},{"text":". This ensures that (1) you don’t have to upgrade if you exceeded just for one month and (2) you can downgrade quickly again when your business takes an unexpected dip.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"If you exceed your current plan, you don’t need to worry, nothing bad will happen. Everything in your app will continue to work as expected, including the paywalls and your last remote configuration and purchases. But you won’t be able to edit anything or see any data in FreemiumKit. So you will lose access to the paywall editor to adjust your paywall remotely or change A\/B testing settings. You also won’t be able to change your pricing through FreemiumKit or receive push notifications for live purchase stats. And you won’t see your purchase history stats.","type":"text"}],"type":"paragraph"},{"name":"Note","content":[{"inlineContent":[{"type":"text","text":"This is all how it’s "},{"type":"emphasis","inlineContent":[{"type":"text","text":"planned"}]},{"type":"text","text":" to work. Currently, there’s no payment at all and FreemiumKit is free to use for everyone. If you have any doubts about this system, don’t hesitate to contact me, I might adjust things as needed."}],"type":"paragraph"}],"style":"note","type":"aside"},{"anchor":"Contact","text":"Contact","level":2,"type":"heading"},{"inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"identifier":"mailto:freemiumkit@fline.dev","isActive":true,"type":"reference"},{"type":"text","text":"."}],"type":"paragraph"},{"anchor":"Legal","text":"Legal","level":2,"type":"heading"},{"inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"type":"reference","isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/"}],"type":"small"}],"kind":"content"}],"sections":[],"metadata":{"role":"sampleCode","roleHeading":"FAQs","title":"How does the Pricing work in detail?"},"kind":"article","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing"},"schemaVersion":{"minor":3,"patch":0,"major":0},"references":{"https://www.fline.dev/imprint/":{"type":"link","titleInlineContent":[{"type":"text","text":"Imprint"}],"identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"FreemiumKit.png":{"alt":null,"type":"image","variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"identifier":"FreemiumKit.png"},"mailto:freemiumkit@fline.dev":{"type":"link","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"}}} \ No newline at end of file +{"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","interfaceLanguage":"swift"},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"metadata":{"role":"sampleCode","title":"How does the Pricing work in detail?","roleHeading":"FAQs"},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"schemaVersion":{"major":0,"patch":0,"minor":3},"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"primaryContentSections":[{"kind":"content","content":[{"anchor":"Short-Answer","type":"heading","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"We build the average of your last 2 months total revenue reported to App Store Connect across all apps. If you exceed your current plan, you no longer will be able to update the paywall remote configuration, you won’t see the purchase stats, nor will you receive purchase notifications. But your app will continue to show your last paywall and purchases will continue to work in your apps."}]},{"anchor":"Full-Answer","type":"heading","level":2,"text":"Full Answer"},{"type":"paragraph","inlineContent":[{"text":"Income on App Store Connect can vary significantly, that’s why we’ve build a flexible and fair system for you:","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"Your monthly income is calculated by building the ","type":"text"},{"type":"strong","inlineContent":[{"text":"average of your last 2 months’ total revenue","type":"text"}]},{"type":"text","text":". This ensures that (1) you don’t have to upgrade if you exceeded just for one month and (2) you can downgrade quickly again when your business takes an unexpected dip."}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"If you exceed your current plan, you don’t need to worry, nothing bad will happen. Everything in your app will continue to work as expected, including the paywalls and your last remote configuration and purchases. But you won’t be able to edit anything or see any data in FreemiumKit. So you will lose access to the paywall editor to adjust your paywall remotely or change A\/B testing settings. You also won’t be able to change your pricing through FreemiumKit or receive push notifications for live purchase stats. And you won’t see your purchase history stats."}]},{"type":"aside","name":"Note","style":"note","content":[{"type":"paragraph","inlineContent":[{"text":"This is all how it’s ","type":"text"},{"type":"emphasis","inlineContent":[{"text":"planned","type":"text"}]},{"text":" to work. Currently, there’s no payment at all and FreemiumKit is free to use for everyone. If you have any doubts about this system, don’t hesitate to contact me, I might adjust things as needed.","type":"text"}]}]},{"anchor":"Contact","type":"heading","level":2,"text":"Contact"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"type":"reference","isActive":true,"identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}]},{"anchor":"Legal","type":"heading","level":2,"text":"Legal"},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"type":"reference","isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/"}]}]}],"sections":[],"kind":"article","references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"mailto:freemiumkit@fline.dev":{"identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"title":"freemiumkit@fline.dev","type":"link","url":"mailto:freemiumkit@fline.dev"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"alt":null,"type":"image"},"https://www.fline.dev/imprint/":{"identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}],"title":"Imprint","type":"link","url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-privacy.json b/data/documentation/freemiumkit/faq-privacy.json index d089625..bd05a46 100644 --- a/data/documentation/freemiumkit/faq-privacy.json +++ b/data/documentation/freemiumkit/faq-privacy.json @@ -1 +1 @@ -{"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"primaryContentSections":[{"content":[{"text":"Short Answer","level":2,"type":"heading","anchor":"Short-Answer"},{"inlineContent":[{"text":"We don’t send any personal user data to our servers, respecting user privacy. And we delete purchase data from our servers as soon as they are fetched to your devices. Your purchase data is persisted via CloudKit. This ensures we can’t access your purchase history.","type":"text"}],"type":"paragraph"},{"text":"Full Answer","level":2,"type":"heading","anchor":"Full-Answer"},{"inlineContent":[{"text":"Firstly, we follow the principle of ","type":"text"},{"inlineContent":[{"text":"data minimization","type":"text"}],"type":"strong"},{"text":" and don’t send any personal data to our servers. The only data we send are the date and country of the purchase and the purchased product with its price. This way even if our servers were breached, there’s nothing useful to be obtained for attackers.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Secondly, we ","type":"text"},{"inlineContent":[{"type":"text","text":"don’t keep the data for long"}],"type":"strong"},{"text":": The moment the FreemiumKit app on your devices successfully fetch the purchase data, they are deleted from our servers. If you install FreemiumKit on your iPhone and have push notifications turned on, this happens just seconds after a purchase was made, keeping the amount of data we store on our servers close to zero basically all the time.","type":"text"}],"type":"paragraph"},{"style":"tip","type":"aside","name":"Tip","content":[{"type":"paragraph","inlineContent":[{"text":"All our servers are hosted within the European Union (EU), ensuring your data complies with strict EU privacy laws, including GDPR, for enhanced protection and security.","type":"text"}]}]},{"inlineContent":[{"type":"text","text":"To ensure your data is backed up and syncs across devices, we use CloudKit. This way, even if you delete the FreemiumKit app or lose your device, you can just reinstall FreemiumKit on another device and your full purchase history statistics will stay available within the same Apple Account."}],"type":"paragraph"},{"inlineContent":[{"text":"If you happen to stop using the FreemiumKit app for some reason, new purchases are kept up to 90 days on our servers. So you’ll always be able to fetch tha last 90 days if you decide to return. If you have push notifications disabled, you need to open the app at least once every 90 days to not lose any purchase history data. If you returned after 100 days, you would lose 10 days of data, for example.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"That’s why we strongly recommend to "},{"type":"strong","inlineContent":[{"type":"text","text":"keep push notifications enabled"}]},{"type":"text","text":" on FreemiumKit for iPhone, even if you don’t wish to actually receive push notifications. You can turn off push notifications within the FreemiumKit app, which will disable the local push notification sent by the app while woken up in the background by a silent push notification. This way, the app will continue fetching purchase data without bothering you with push notifications."}],"type":"paragraph"},{"text":"Contact","level":2,"type":"heading","anchor":"Contact"},{"inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"type":"reference","isActive":true,"identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}],"type":"paragraph"},{"text":"Legal","level":2,"type":"heading","anchor":"Legal"},{"inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference","isActive":true}],"type":"small"}],"kind":"content"}],"sections":[],"metadata":{"role":"sampleCode","roleHeading":"FAQs","title":"How does FreemiumKit handle User Privacy?"},"kind":"article","abstract":[{"text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","interfaceLanguage":"swift"},"schemaVersion":{"major":0,"minor":3,"patch":0},"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"mailto:freemiumkit@fline.dev":{"type":"link","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"https://www.fline.dev/imprint/":{"type":"link","titleInlineContent":[{"type":"text","text":"Imprint"}],"identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","url":"https:\/\/www.fline.dev\/imprint\/"},"FreemiumKit.png":{"alt":null,"type":"image","variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"identifier":"FreemiumKit.png"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"}}} \ No newline at end of file +{"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","metadata":{"roleHeading":"FAQs","role":"sampleCode","title":"How does FreemiumKit handle User Privacy?"},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"primaryContentSections":[{"content":[{"type":"heading","anchor":"Short-Answer","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"text":"We don’t send any personal user data to our servers, respecting user privacy. And we delete purchase data from our servers as soon as they are fetched to your devices. Your purchase data is persisted via CloudKit. This ensures we can’t access your purchase history.","type":"text"}]},{"type":"heading","anchor":"Full-Answer","level":2,"text":"Full Answer"},{"type":"paragraph","inlineContent":[{"text":"Firstly, we follow the principle of ","type":"text"},{"inlineContent":[{"type":"text","text":"data minimization"}],"type":"strong"},{"text":" and don’t send any personal data to our servers. The only data we send are the date and country of the purchase and the purchased product with its price. This way even if our servers were breached, there’s nothing useful to be obtained for attackers.","type":"text"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"Secondly, we "},{"type":"strong","inlineContent":[{"type":"text","text":"don’t keep the data for long"}]},{"type":"text","text":": The moment the FreemiumKit app on your devices successfully fetch the purchase data, they are deleted from our servers. If you install FreemiumKit on your iPhone and have push notifications turned on, this happens just seconds after a purchase was made, keeping the amount of data we store on our servers close to zero basically all the time."}]},{"type":"aside","style":"tip","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"All our servers are hosted within the European Union (EU), ensuring your data complies with strict EU privacy laws, including GDPR, for enhanced protection and security."}]}],"name":"Tip"},{"type":"paragraph","inlineContent":[{"text":"To ensure your data is backed up and syncs across devices, we use CloudKit. This way, even if you delete the FreemiumKit app or lose your device, you can just reinstall FreemiumKit on another device and your full purchase history statistics will stay available within the same Apple Account.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"If you happen to stop using the FreemiumKit app for some reason, new purchases are kept up to 90 days on our servers. So you’ll always be able to fetch tha last 90 days if you decide to return. If you have push notifications disabled, you need to open the app at least once every 90 days to not lose any purchase history data. If you returned after 100 days, you would lose 10 days of data, for example.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"That’s why we strongly recommend to ","type":"text"},{"type":"strong","inlineContent":[{"text":"keep push notifications enabled","type":"text"}]},{"text":" on FreemiumKit for iPhone, even if you don’t wish to actually receive push notifications. You can turn off push notifications within the FreemiumKit app, which will disable the local push notification sent by the app while woken up in the background by a silent push notification. This way, the app will continue fetching purchase data without bothering you with push notifications.","type":"text"}]},{"type":"heading","anchor":"Contact","level":2,"text":"Contact"},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"identifier":"mailto:freemiumkit@fline.dev","isActive":true,"type":"reference"},{"text":".","type":"text"}]},{"type":"heading","anchor":"Legal","level":2,"text":"Legal"},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}]}],"kind":"content"}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"https://www.fline.dev/imprint/":{"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"link","title":"Imprint","titleInlineContent":[{"text":"Imprint","type":"text"}],"url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"mailto:freemiumkit@fline.dev":{"identifier":"mailto:freemiumkit@fline.dev","type":"link","title":"freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"url":"mailto:freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"FreemiumKit.png":{"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"identifier":"FreemiumKit.png","type":"image","alt":null}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-serverlimits.json b/data/documentation/freemiumkit/faq-serverlimits.json index 7937d6a..393b35a 100644 --- a/data/documentation/freemiumkit/faq-serverlimits.json +++ b/data/documentation/freemiumkit/faq-serverlimits.json @@ -1 +1 @@ -{"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","interfaceLanguage":"swift"},"sections":[],"kind":"article","metadata":{"title":"How can I apply my custom server-side limits?","roleHeading":"FAQs","role":"sampleCode"},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"],"generated":true}],"schemaVersion":{"patch":0,"major":0,"minor":3},"abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"primaryContentSections":[{"kind":"content","content":[{"level":2,"type":"heading","text":"Short Answer","anchor":"Short-Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"FreemiumKit uses the built-in "},{"type":"codeVoice","code":"appDeviceToken"},{"type":"text","text":" in StoreKit 2 to recognize the same user across app installs and devices. You can access it from the "},{"type":"codeVoice","code":"FreemiumKit"},{"type":"text","text":" instance either using the "},{"type":"codeVoice","code":"@EnvironmentObject"},{"type":"text","text":" method or globally via "},{"type":"codeVoice","code":"FreemiumKit.shared.appDeviceToken"},{"type":"text","text":"."}]},{"level":2,"type":"heading","text":"Full Answer","anchor":"Full-Answer"},{"type":"paragraph","inlineContent":[{"text":"If you have your own server-side logic for locking\/unlocking functionality based on usage (such as ‘100 posts per month’), you will want to identify the same user across app installs or devices. To do this, you can access ","type":"text"},{"code":"appAccountToken","type":"codeVoice"},{"text":" on the ","type":"text"},{"code":"FreemiumKit","type":"codeVoice"},{"text":" environment object which will return a ","type":"text"},{"code":"UUID","type":"codeVoice"},{"text":" stored right within StoreKit (so Apple makes sure you recognize the same user across devices – we don’t that data on our servers).","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"Access the field only after purchases are loaded like so:","type":"text"}]},{"syntax":"swift","type":"codeListing","code":["import FreemiumKit","","struct MyView: View {"," @EnvironmentObject private var freemiumKit: FreemiumKit",""," var body: some View {"," VStack {"," \/\/ your main view ..."," }"," .onAppear {"," if freemiumkit.purchasesLoaded {"," let appAccountToken: UUID = freemiumKit.appAccountToken"," \/\/ do something with the app account token"," }"," }"," .onChange(of: freemiumKit.purchasesLoaded) {"," if freemiumkit.purchasesLoaded {"," let appAccountToken: UUID = freemiumKit.appAccountToken"," \/\/ do something with the app account token"," }"," }"," }","}"]},{"type":"paragraph","inlineContent":[{"type":"text","text":"You can also access it globally via "},{"type":"codeVoice","code":"FreemiumKit.shared.appAccountToken"},{"type":"text","text":" but make sure that "},{"type":"codeVoice","code":"FreemiumKit.shared.purchasesLoad"},{"type":"text","text":" is "},{"type":"codeVoice","code":"true"},{"type":"text","text":", else you won’t get the correct "},{"type":"codeVoice","code":"UUID"},{"type":"text","text":". Note that FreemiumKit loads this data upon app start and caches it, so most of the time it should be available."}]},{"level":2,"type":"heading","text":"Contact","anchor":"Contact"},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"isActive":true,"identifier":"mailto:freemiumkit@fline.dev","type":"reference"},{"text":".","type":"text"}]},{"level":2,"type":"heading","text":"Legal","anchor":"Legal"},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}]}]}],"references":{"https://www.fline.dev/imprint/":{"title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}],"url":"https:\/\/www.fline.dev\/imprint\/","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","alt":null,"type":"image","variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"url":"mailto:freemiumkit@fline.dev","type":"link"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"}}} \ No newline at end of file +{"metadata":{"title":"How can I apply my custom server-side limits?","roleHeading":"FAQs","role":"sampleCode"},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"},"kind":"article","schemaVersion":{"minor":3,"major":0,"patch":0},"sections":[],"abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"]}],"primaryContentSections":[{"kind":"content","content":[{"anchor":"Short-Answer","type":"heading","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"FreemiumKit uses the built-in "},{"code":"appDeviceToken","type":"codeVoice"},{"type":"text","text":" in StoreKit 2 to recognize the same user across app installs and devices. You can access it from the "},{"code":"FreemiumKit","type":"codeVoice"},{"type":"text","text":" instance either using the "},{"code":"@EnvironmentObject","type":"codeVoice"},{"type":"text","text":" method or globally via "},{"code":"FreemiumKit.shared.appDeviceToken","type":"codeVoice"},{"type":"text","text":"."}]},{"anchor":"Full-Answer","type":"heading","level":2,"text":"Full Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"If you have your own server-side logic for locking\/unlocking functionality based on usage (such as ‘100 posts per month’), you will want to identify the same user across app installs or devices. To do this, you can access "},{"type":"codeVoice","code":"appAccountToken"},{"type":"text","text":" on the "},{"type":"codeVoice","code":"FreemiumKit"},{"type":"text","text":" environment object which will return a "},{"type":"codeVoice","code":"UUID"},{"type":"text","text":" stored right within StoreKit (so Apple makes sure you recognize the same user across devices – we don’t that data on our servers)."}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"Access the field only after purchases are loaded like so:"}]},{"type":"codeListing","code":["import FreemiumKit","","struct MyView: View {"," @EnvironmentObject private var freemiumKit: FreemiumKit",""," var body: some View {"," VStack {"," \/\/ your main view ..."," }"," .onAppear {"," if freemiumkit.purchasesLoaded {"," let appAccountToken: UUID = freemiumKit.appAccountToken"," \/\/ do something with the app account token"," }"," }"," .onChange(of: freemiumKit.purchasesLoaded) {"," if freemiumkit.purchasesLoaded {"," let appAccountToken: UUID = freemiumKit.appAccountToken"," \/\/ do something with the app account token"," }"," }"," }","}"],"syntax":"swift"},{"type":"paragraph","inlineContent":[{"text":"You can also access it globally via ","type":"text"},{"code":"FreemiumKit.shared.appAccountToken","type":"codeVoice"},{"text":" but make sure that ","type":"text"},{"code":"FreemiumKit.shared.purchasesLoad","type":"codeVoice"},{"text":" is ","type":"text"},{"code":"true","type":"codeVoice"},{"text":", else you won’t get the correct ","type":"text"},{"code":"UUID","type":"codeVoice"},{"text":". Note that FreemiumKit loads this data upon app start and caches it, so most of the time it should be available.","type":"text"}]},{"anchor":"Contact","type":"heading","level":2,"text":"Contact"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"isActive":true,"type":"reference","identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}]},{"anchor":"Legal","type":"heading","level":2,"text":"Legal"},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}]}]}],"references":{"mailto:freemiumkit@fline.dev":{"type":"link","identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"url":"mailto:freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"FreemiumKit.png":{"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"alt":null,"type":"image","identifier":"FreemiumKit.png"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"https://www.fline.dev/imprint/":{"title":"Imprint","url":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}],"type":"link","identifier":"https:\/\/www.fline.dev\/imprint\/"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-validation.json b/data/documentation/freemiumkit/faq-validation.json index 7819aa3..c644436 100644 --- a/data/documentation/freemiumkit/faq-validation.json +++ b/data/documentation/freemiumkit/faq-validation.json @@ -1 +1 @@ -{"schemaVersion":{"minor":3,"major":0,"patch":0},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"abstract":[{"text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!","type":"text"}],"kind":"article","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"sections":[],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"primaryContentSections":[{"content":[{"text":"Short Answer","anchor":"Short-Answer","type":"heading","level":2},{"inlineContent":[{"text":"Yes, we handle validation automatically and only report purchases that have been verified by the App Store. No action needed on your end, it all happens within our SDK automatically.","type":"text"}],"type":"paragraph"},{"level":2,"text":"Full Answer","anchor":"Full-Answer","type":"heading"},{"inlineContent":[{"text":"The FreemiumKit SDK is built on top of StoreKit 2, which automatically verifies any transaction is “signed by the App Store for ","type":"text"},{"inlineContent":[{"type":"text","text":"my"}],"type":"emphasis"},{"text":" app for ","type":"text"},{"inlineContent":[{"text":"this","type":"text"}],"type":"emphasis"},{"text":" device” (quote from WWDC22 session ","type":"text"},{"isActive":true,"identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","type":"reference"},{"text":"). StoreKit 2 leaves developers the choice to accept even unverified purchases. But FreemiumKit doesn’t do that, it simply ","type":"text"},{"inlineContent":[{"type":"text","text":"always"}],"type":"strong"},{"text":" ignores unverified purchases. When FreemiumKit reports a purchase, it has already successfully passed transaction verification. 💯","type":"text"}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"While StoreKit 2 makes sure a transaction is coming from Apple and has not been tampered with, it’s still possible that a highly skilled attacker could tamper with the devices memory or the app logic on a jailbroken device to bypass these checks. It is possible to guard against these kinds of attacks with additional server-side validation and by moving some of the paid feature logic to your servers."}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"The complexity of such an attack is very high though and most apps are vulnerable to it even with server-side receipt validation because the attacker can simply bypass the boolean check inside the apps logic if they have this level of access to your apps code. Protecting against all potential security risks is impossible and we think that the built-in transaction verification is a good level of security for most apps."}],"type":"paragraph"},{"level":2,"text":"Contact","anchor":"Contact","type":"heading"},{"inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"isActive":true,"type":"reference","identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}],"type":"paragraph"},{"level":2,"text":"Legal","anchor":"Legal","type":"heading"},{"inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true,"type":"reference"}],"type":"small"}],"kind":"content"}],"metadata":{"title":"Does FreemiumKit validate purchases?","role":"sampleCode","roleHeading":"FAQs"},"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"mailto:freemiumkit@fline.dev":{"type":"link","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"url":"mailto:freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"},"https://developer.apple.com/videos/play/wwdc2021/10114/?time=694":{"type":"link","titleInlineContent":[{"type":"text","text":"Meet StoreKit 2"}],"url":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","title":"Meet StoreKit 2"},"https://www.fline.dev/imprint/":{"type":"link","titleInlineContent":[{"type":"text","text":"Imprint"}],"url":"https:\/\/www.fline.dev\/imprint\/","identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint"},"FreemiumKit.png":{"type":"image","alt":null,"identifier":"FreemiumKit.png","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"}}} \ No newline at end of file +{"schemaVersion":{"minor":3,"patch":0,"major":0},"metadata":{"title":"Does FreemiumKit validate purchases?","roleHeading":"FAQs","role":"sampleCode"},"abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","interfaceLanguage":"swift"},"primaryContentSections":[{"content":[{"type":"heading","anchor":"Short-Answer","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"text":"Yes, we handle validation automatically and only report purchases that have been verified by the App Store. No action needed on your end, it all happens within our SDK automatically.","type":"text"}]},{"type":"heading","anchor":"Full-Answer","level":2,"text":"Full Answer"},{"type":"paragraph","inlineContent":[{"type":"text","text":"The FreemiumKit SDK is built on top of StoreKit 2, which automatically verifies any transaction is “signed by the App Store for "},{"type":"emphasis","inlineContent":[{"text":"my","type":"text"}]},{"type":"text","text":" app for "},{"type":"emphasis","inlineContent":[{"type":"text","text":"this"}]},{"type":"text","text":" device” (quote from WWDC22 session "},{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694"},{"type":"text","text":"). StoreKit 2 leaves developers the choice to accept even unverified purchases. But FreemiumKit doesn’t do that, it simply "},{"type":"strong","inlineContent":[{"type":"text","text":"always"}]},{"type":"text","text":" ignores unverified purchases. When FreemiumKit reports a purchase, it has already successfully passed transaction verification. 💯"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"While StoreKit 2 makes sure a transaction is coming from Apple and has not been tampered with, it’s still possible that a highly skilled attacker could tamper with the devices memory or the app logic on a jailbroken device to bypass these checks. It is possible to guard against these kinds of attacks with additional server-side validation and by moving some of the paid feature logic to your servers."}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"The complexity of such an attack is very high though and most apps are vulnerable to it even with server-side receipt validation because the attacker can simply bypass the boolean check inside the apps logic if they have this level of access to your apps code. Protecting against all potential security risks is impossible and we think that the built-in transaction verification is a good level of security for most apps."}]},{"type":"heading","anchor":"Contact","text":"Contact","level":2},{"type":"paragraph","inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"isActive":true,"type":"reference","identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}]},{"type":"heading","anchor":"Legal","text":"Legal","level":2},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"type":"reference","identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true}]}],"kind":"content"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"],"generated":true}],"sections":[],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"https://developer.apple.com/videos/play/wwdc2021/10114/?time=694":{"title":"Meet StoreKit 2","identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","titleInlineContent":[{"text":"Meet StoreKit 2","type":"text"}],"type":"link","url":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"FreemiumKit.png":{"alt":null,"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"https://www.fline.dev/imprint/":{"title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"text":"Imprint","type":"text"}],"type":"link","url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"type":"link","url":"mailto:freemiumkit@fline.dev"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faqs.json b/data/documentation/freemiumkit/faqs.json index 71bae66..c485aed 100644 --- a/data/documentation/freemiumkit/faqs.json +++ b/data/documentation/freemiumkit/faqs.json @@ -1 +1 @@ -{"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"]}],"sections":[],"metadata":{"role":"article","roleHeading":"FreemiumKit","title":"FAQs","images":[{"type":"icon","identifier":"FreemiumKit.png"}]},"kind":"article","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"schemaVersion":{"minor":3,"patch":0,"major":0},"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","kind":"article","title":"How can I apply my custom server-side limits?","abstract":[{"text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits.","type":"text"}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","type":"topic","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"url":"\/documentation\/freemiumkit\/faq-privacy","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"FreemiumKit.png":{"alt":null,"type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"identifier":"FreemiumKit.png"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"title":"SDK Setup Guide","abstract":[{"type":"text","text":"Learn how to set up your app for our paywalls and live push notifications."}],"role":"article","url":"\/documentation\/freemiumkit\/setupguide","kind":"article","type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","images":[{"type":"icon","identifier":"FreemiumKit.png"}]}}} \ No newline at end of file +{"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","interfaceLanguage":"swift"},"schemaVersion":{"major":0,"patch":0,"minor":3},"metadata":{"title":"FAQs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"roleHeading":"FreemiumKit","role":"article"},"sections":[],"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits"]}],"abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"kind":"article","seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"],"generated":true}],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ServerLimits":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ServerLimits","title":"How can I apply my custom server-side limits?","abstract":[{"type":"text","text":"Learn how you can recognize a purchased user across app installs and devices to roll your own server-side logic for custom limits."}],"url":"\/documentation\/freemiumkit\/faq-serverlimits","role":"sampleCode","type":"topic","kind":"article"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"title":"How does FreemiumKit handle User Privacy?","url":"\/documentation\/freemiumkit\/faq-privacy","abstract":[{"type":"text","text":"Learn how FreemiumKit was designed to keep your users data private and reduce the exposure of your purchase data to a minimum."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","type":"image","alt":null,"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-ParentalGate":{"title":"Are ‘Made for Kids’ apps supported with a Parental Gate?","url":"\/documentation\/freemiumkit\/faq-parentalgate","abstract":[{"type":"text","text":"Learn how to use our built-in parental gate for apps ‘Made for Kids’ to comply with Apples guidelines and avoid accidental purchases by small children."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-ParentalGate"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"role":"article","type":"topic","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"kind":"article","url":"\/documentation\/freemiumkit\/setupguide","title":"SDK Setup Guide"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/setupguide.json b/data/documentation/freemiumkit/setupguide.json index ea7afd3..a0ac7b3 100644 --- a/data/documentation/freemiumkit/setupguide.json +++ b/data/documentation/freemiumkit/setupguide.json @@ -1 +1 @@ -{"primaryContentSections":[{"content":[{"anchor":"Adding-the-SDK","level":2,"type":"heading","text":"Adding the SDK"},{"items":[{"content":[{"inlineContent":[{"text":"Open your app project in Xcode.","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"In the “File” menu select “Add Package Dependencies…”"}]}]}],"type":"orderedList"},{"type":"paragraph","inlineContent":[{"type":"image","identifier":"Setup-Add-Dependency"}]},{"items":[{"content":[{"inlineContent":[{"text":"Paste this to the top right text field and press “Add Package”:","type":"text"}],"type":"paragraph"},{"syntax":null,"type":"codeListing","code":["https:\/\/github.com\/FlineDev\/FreemiumKit.git"]}]}],"type":"orderedList","start":3},{"type":"paragraph","inlineContent":[{"type":"image","identifier":"Setup-Add-Package"}]},{"items":[{"content":[{"inlineContent":[{"type":"text","text":"Select your app target (if not already selected) and confirm by pressing “Add Package”"}],"type":"paragraph"}]}],"type":"orderedList","start":4},{"type":"paragraph","inlineContent":[{"identifier":"Setup-Choose-Package","type":"image"}]},{"anchor":"Configuring-the-SDK","level":2,"type":"heading","text":"Configuring the SDK"},{"style":"tip","name":"Tip","type":"aside","content":[{"type":"paragraph","inlineContent":[{"text":"Don’t forget to ","type":"text"},{"code":"import FreemiumKit","type":"codeVoice"},{"text":" for any of the below calls to build.","type":"text"}]}]},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Make sure your app’s Asset Catalog contains the "},{"code":"FreemiumKit","type":"codeVoice"},{"type":"text","text":" data set from the “Setup” tab of your app in FreemiumKit for Mac. If it doesn’t, drag & drop it from the Setup tab now."}]}]},{"content":[{"inlineContent":[{"text":"Add a call to ","type":"text"},{"code":".environmentObject(FreemiumKit.shared)","type":"codeVoice"},{"text":" to the root view of every scene in the app entry point. For example:","type":"text"}],"type":"paragraph"},{"syntax":"swift","code":["import FreemiumKit","","@main","struct MyApp: App {"," var body: some Scene {"," WindowGroup {"," MainView()"," .environmentObject(FreemiumKit.shared)"," }"," }","}"],"type":"codeListing"}]}],"type":"orderedList"},{"style":"tip","name":"Tip","type":"aside","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"If you want to disable the paywall during DEBUG builds after you’ve made sure that it works as expected, you can call "},{"type":"codeVoice","code":".overrideForDebug"},{"type":"text","text":" on "},{"type":"codeVoice","code":"FreemiumKit.shared"},{"type":"text","text":" within an "},{"type":"codeVoice","code":"#if DEBUG"},{"type":"text","text":" check like this:"}]},{"type":"codeListing","code":["WindowGroup {"," MainView()"," .onAppear {"," #if DEBUG"," FreemiumKit.shared.overrideForDebug(purchasedTier: 1)"," #endif"," }"," .environmentObject(FreemiumKit.shared)","}"],"syntax":"swift"}]},{"anchor":"Understanding-Apples-Tier-System","level":2,"type":"heading","text":"Understanding Apples Tier System"},{"type":"paragraph","inlineContent":[{"type":"text","text":"If your goal is to ship your app with any combination of Monthly, Yearly, and Lifetime purchases, you most likely only need one tier: Tier 1. Just pass "},{"code":"1","type":"codeVoice"},{"type":"text","text":" for the "},{"code":"purchasedTier","type":"codeVoice"},{"type":"text","text":" parameter everywhere – easy. Continue to the next section."}]},{"type":"paragraph","inlineContent":[{"text":"But if you want to support multiple levels of access to your app, like a combination of Monthly\/Yearly\/Lifetime for the ‘Pro’ level, another combination of Monthly\/Yearly\/Lifetime for the ‘Max’ level, and maybe another combination of Monthly\/Yearly\/Lifetime for the ‘Ultra’ level, that’s when you need to think about which value to pass to the ","type":"text"},{"type":"codeVoice","code":"purchasedTier"},{"text":" parameter. Note that ","type":"text"},{"type":"codeVoice","code":"1"},{"text":" always refers to the highest level. That’s how Apple has decided their tier system to work. Read their ","type":"text"},{"identifier":"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-subscriptions\/offer-auto-renewable-subscriptions","type":"reference","isActive":true},{"text":" to learn more.","type":"text"}]},{"anchor":"Showing-the-Paywalls","level":2,"type":"heading","text":"Showing the Paywalls"},{"type":"video","identifier":"PaidViews"},{"items":[{"content":[{"inlineContent":[{"type":"text","text":"Lock your paid features for users who have not made a purchase yet by using one of the built-in views "},{"code":"PaidFeatureButton","type":"codeVoice"},{"type":"text","text":" or "},{"code":"PaidFeatureView","type":"codeVoice"},{"type":"text","text":". This is the recommended way of using the SDK (when applicable) as it handles purchase states automatically for you and saves you a lot of boilerplate code. For example:"}],"type":"paragraph"},{"syntax":"swift","code":["\/\/ opens paywall if user has not purchased, else just like `Button`","PaidFeatureButton(\"Export\", systemImage: \"square.and.arrow.up\") {"," \/\/ your export logic – no check for a paid tier needed, only called if already purchased ","}","","\/\/ exactly the same as above, but gives you full customizability","PaidFeatureView {"," Button(\"Export\", systemImage: \"square.and.arrow.up\") {"," \/\/ your export logic – no check for a paid tier needed, only called if already purchased"," }","} lockedView: {"," Label(\"Export\", systemImage: \"lock\")","}"],"type":"codeListing"},{"inlineContent":[{"text":"Both ","type":"text"},{"type":"codeVoice","code":"PaidFeatureButton"},{"text":" and ","type":"text"},{"type":"codeVoice","code":"PaidFeatureView"},{"text":" accept an ","type":"text"},{"type":"codeVoice","code":"unlocksAtTier"},{"text":" parameter of type ","type":"text"},{"type":"codeVoice","code":"Int"},{"text":" (default: ","type":"text"},{"type":"codeVoice","code":"1"},{"text":") and a ","type":"text"},{"type":"codeVoice","code":"showPaywallOnPressIfLocked"},{"text":" parameter of type ","type":"text"},{"type":"codeVoice","code":"Bool"},{"text":" (default: ","type":"text"},{"type":"codeVoice","code":"true"},{"text":").","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"If you don’t pass any of those parameters, the default behavior unlocks the feature only if tier 1 is purchased and shows a paywall on press if tier 1 is not yet purchased. If ","type":"text"},{"type":"codeVoice","code":"showPaywallOnPressIfLocked"},{"text":" is set to ","type":"text"},{"type":"codeVoice","code":"false"},{"text":", the locked view will not have any automatic interaction, just rendering locked view state as-is without any added behavior.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"Alternatively, if you want to control the presentation of the paywall manually, you can add the "},{"type":"codeVoice","code":".paywall(isPresented:)"},{"type":"text","text":" modifier to your custom views where needed. For example:"}],"type":"paragraph"},{"code":["import FreemiumKit","","struct MyView: View {"," @State var showPaywall: Bool = false",""," var body: some View {"," Button(\"Unlock Pro\") {"," showPaywall = true"," }"," .paywall(isPresented: $showPaywall)"," }","}"],"syntax":"swift","type":"codeListing"},{"inlineContent":[{"text":"If you want to conditionally hide views based on paid state (like hiding the unlock button if a user has already purchased), you can add the ","type":"text"},{"code":"FreemiumKit","type":"codeVoice"},{"text":" object as an ","type":"text"},{"code":"@EnvironmentObject","type":"codeVoice"},{"text":" and call ","type":"text"},{"code":".purchasedTier","type":"codeVoice"},{"text":" or ","type":"text"},{"code":".hasPurchased","type":"codeVoice"},{"text":" if you only have one tier like so:","type":"text"}],"type":"paragraph"},{"code":["import FreemiumKit","","struct MyView: View {"," @EnvironmentObject var freemiumKit: FreemiumKit"," @State var showPaywall: Bool = false",""," var body: some View {"," if freemiumKit.purchasedTier == nil {"," Button(\"Unlock Pro\") {"," showPaywall = true"," }"," .paywall(isPresented: $showPaywall)"," }"," }","}"],"syntax":"swift","type":"codeListing"},{"inlineContent":[{"text":"If you want to show the paywall upon appearance of a view if a user has not paid, you should first check that the ","type":"text"},{"type":"codeVoice","code":"purchasesLoaded"},{"text":" property of ","type":"text"},{"type":"codeVoice","code":"FreemiumKit"},{"text":" is ","type":"text"},{"type":"codeVoice","code":"true"},{"text":" – or else paying users might see the paywall, too. Since this is a common use case, our SDK ships with the ","type":"text"},{"type":"codeVoice","code":".onPurchasesLoaded"},{"text":" view modifier which is guaranteed to be called exactly once (like ","type":"text"},{"type":"codeVoice","code":".onAppear"},{"text":") but only when purchases are loaded:","type":"text"}],"type":"paragraph"},{"code":["import FreemiumKit","","struct MyView: View {"," @State var showPaywall: Bool = false",""," var body: some View {"," VStack {"," \/\/ your view ..."," }"," .paywall(isPresented: $showPaywall)"," .onPurchasesLoaded {"," if !FremiumKit.shared.hasPurchased {"," showPaywall = true"," }"," }"," }","}"],"syntax":"swift","type":"codeListing"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"There’s also a ","type":"text"},{"code":"PaidStatusView","type":"codeVoice"},{"text":" which you can add to your app’s settings to indicate to users what their current purchase state is. There are two styles:","type":"text"}]},{"type":"codeListing","code":["PaidStatusView(style: .plain)","PaidStatusView(style: .decorative(icon: .laurel))"],"syntax":"swift"}]}],"type":"orderedList"},{"type":"paragraph","inlineContent":[{"identifier":"Setup-PaidStatusView","type":"image"}]},{"type":"paragraph","inlineContent":[{"text":"The ","type":"text"},{"code":".decorative","type":"codeVoice"},{"text":" style has multiple ","type":"text"},{"code":"icon","type":"codeVoice"},{"text":" parameter options and also accepts optional ","type":"text"},{"code":"foregroundColor","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"backgroundColor","type":"codeVoice"},{"text":" parameters if you need to adjust the defaults. Note that the ","type":"text"},{"code":"PaidStatusView","type":"codeVoice"},{"text":" will automatically open a paywall on press if there’s no purchase yet. Else, it’s rendered as just a label without interaction.","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"If you place it inside a ","type":"text"},{"code":"Form","type":"codeVoice"},{"text":" with ","type":"text"},{"code":"Sections","type":"codeVoice"},{"text":", you might want to set the ","type":"text"},{"code":"listRowBackground","type":"codeVoice"},{"text":" for a clean look like this:","type":"text"}]},{"code":["Form {"," Section {"," PaidStatusView(style: .decorative(icon: .laurel))"," .listRowBackground(Color.accentColor)"," }"," "," \/\/ ...","}"],"type":"codeListing","syntax":"swift"},{"anchor":"SwiftUI-Previews","level":2,"type":"heading","text":"SwiftUI Previews"},{"type":"paragraph","inlineContent":[{"type":"text","text":"For SwiftUI previews to work where you make use of the built-in views or modifier, add a call to "},{"code":".environmentObject(FreemiumKit.preview)","type":"codeVoice"},{"type":"text","text":" in your preview code like so:"}]},{"code":["#Preview {"," YourView()"," .environmentObject(FreemiumKit.preview)","}"],"type":"codeListing","syntax":"swift"},{"type":"paragraph","inlineContent":[{"text":"If you want to simulate a specific paid state in your previews, you can call the ","type":"text"},{"code":"withOverridesForDebug(purchasedTier:)","type":"codeVoice"},{"text":" function on ","type":"text"},{"code":"FreemiumKit.preview","type":"codeVoice"},{"text":" and set your desired tier (set ","type":"text"},{"code":"1","type":"codeVoice"},{"text":" for full access). The default ","type":"text"},{"code":"FreemiumKit.preview","type":"codeVoice"},{"text":" shows in the “nothing purchased” state, showcasing how things will look from a Free users perspective. For example:","type":"text"}]},{"code":["#Preview(\"Full Access\") {"," YourView()"," .environmentObject(FreemiumKit.preview.withOverridesForDebug(purchasedTier: 1))","}"],"type":"codeListing","syntax":"swift"},{"anchor":"Contact","level":2,"type":"heading","text":"Contact"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"identifier":"mailto:freemiumkit@fline.dev","type":"reference","isActive":true},{"type":"text","text":"."}]},{"anchor":"Legal","level":2,"type":"heading","text":"Legal"},{"type":"small","inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true,"type":"reference"}]}],"kind":"content"}],"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"],"generated":true}],"schemaVersion":{"major":0,"minor":3,"patch":0},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"sampleCodeDownload":{"action":{"isActive":true,"identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","overridingTitle":"Detailed Setup Video (17 min)","type":"reference"},"kind":"sampleDownload"},"metadata":{"role":"article","title":"SDK Setup Guide","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"roleHeading":"FreemiumKit"},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","interfaceLanguage":"swift"},"sections":[],"kind":"article","abstract":[{"type":"text","text":"Learn how to set up your app for our paywalls and live push notifications."}],"references":{"https://www.fline.dev/imprint/":{"titleInlineContent":[{"text":"Imprint","type":"text"}],"title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","url":"https:\/\/www.fline.dev\/imprint\/","type":"link"},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev","type":"link","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}]},"FreemiumKit.png":{"alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"type":"image","identifier":"FreemiumKit.png"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"},"Setup-Choose-Package":{"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Choose-Package.jpeg"}],"type":"image","identifier":"Setup-Choose-Package","alt":null},"https://developer.apple.com/help/app-store-connect/manage-subscriptions/offer-auto-renewable-subscriptions":{"title":"official docs","url":"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-subscriptions\/offer-auto-renewable-subscriptions","type":"link","identifier":"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-subscriptions\/offer-auto-renewable-subscriptions","titleInlineContent":[{"text":"official docs","type":"text"}]},"PaidViews-Poster":{"variants":[{"traits":["1x","light"],"url":"\/images\/PaidViews-Poster.jpeg"}],"type":"image","identifier":"PaidViews-Poster","alt":null},"Setup-PaidStatusView":{"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-PaidStatusView.jpeg"}],"type":"image","identifier":"Setup-PaidStatusView","alt":null},"https://www.youtube.com/watch?v=6JxwA3WieHs":{"checksum":null,"url":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","type":"download","identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs"},"Setup-Add-Dependency":{"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Add-Dependency.jpeg"}],"type":"image","identifier":"Setup-Add-Dependency","alt":null},"PaidViews":{"variants":[{"traits":["1x","light"],"url":"\/videos\/PaidViews.mp4"}],"type":"video","identifier":"PaidViews","poster":"PaidViews-Poster","alt":null},"Setup-Add-Package":{"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Add-Package.jpeg"}],"type":"image","identifier":"Setup-Add-Package","alt":null},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/index","type":"topic","kind":"article","role":"collection"}}} \ No newline at end of file +{"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"},"kind":"article","seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sampleCodeDownload":{"action":{"overridingTitle":"Detailed Setup Video (17 min)","type":"reference","isActive":true,"identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs"},"kind":"sampleDownload"},"metadata":{"images":[{"identifier":"FreemiumKit.png","type":"icon"}],"role":"article","title":"SDK Setup Guide","roleHeading":"FreemiumKit"},"primaryContentSections":[{"content":[{"type":"heading","anchor":"Adding-the-SDK","level":2,"text":"Adding the SDK"},{"type":"orderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"text":"Open your app project in Xcode.","type":"text"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"In the “File” menu select “Add Package Dependencies…”"}],"type":"paragraph"}]}]},{"type":"paragraph","inlineContent":[{"identifier":"Setup-Add-Dependency","type":"image"}]},{"type":"orderedList","start":3,"items":[{"content":[{"inlineContent":[{"type":"text","text":"Paste this to the top right text field and press “Add Package”:"}],"type":"paragraph"},{"syntax":null,"type":"codeListing","code":["https:\/\/github.com\/FlineDev\/FreemiumKit.git"]}]}]},{"type":"paragraph","inlineContent":[{"type":"image","identifier":"Setup-Add-Package"}]},{"type":"orderedList","start":4,"items":[{"content":[{"type":"paragraph","inlineContent":[{"text":"Select your app target (if not already selected) and confirm by pressing “Add Package”","type":"text"}]}]}]},{"type":"paragraph","inlineContent":[{"type":"image","identifier":"Setup-Choose-Package"}]},{"type":"heading","anchor":"Configuring-the-SDK","level":2,"text":"Configuring the SDK"},{"type":"aside","style":"tip","content":[{"inlineContent":[{"type":"text","text":"Don’t forget to "},{"type":"codeVoice","code":"import FreemiumKit"},{"type":"text","text":" for any of the below calls to build."}],"type":"paragraph"}],"name":"Tip"},{"type":"orderedList","items":[{"content":[{"inlineContent":[{"text":"Make sure your app’s Asset Catalog contains the ","type":"text"},{"type":"codeVoice","code":"FreemiumKit"},{"text":" data set from the “Setup” tab of your app in FreemiumKit for Mac. If it doesn’t, drag & drop it from the Setup tab now.","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Add a call to "},{"code":".environmentObject(FreemiumKit.shared)","type":"codeVoice"},{"type":"text","text":" to the root view of every scene in the app entry point. For example:"}]},{"type":"codeListing","code":["import FreemiumKit","","@main","struct MyApp: App {"," var body: some Scene {"," WindowGroup {"," MainView()"," .environmentObject(FreemiumKit.shared)"," }"," }","}"],"syntax":"swift"}]}]},{"type":"aside","style":"tip","content":[{"inlineContent":[{"type":"text","text":"If you want to disable the paywall during DEBUG builds after you’ve made sure that it works as expected, you can call "},{"code":".overrideForDebug","type":"codeVoice"},{"type":"text","text":" on "},{"code":"FreemiumKit.shared","type":"codeVoice"},{"type":"text","text":" within an "},{"code":"#if DEBUG","type":"codeVoice"},{"type":"text","text":" check like this:"}],"type":"paragraph"},{"code":["WindowGroup {"," MainView()"," .onAppear {"," #if DEBUG"," FreemiumKit.shared.overrideForDebug(purchasedTier: 1)"," #endif"," }"," .environmentObject(FreemiumKit.shared)","}"],"syntax":"swift","type":"codeListing"}],"name":"Tip"},{"type":"heading","anchor":"Understanding-Apples-Tier-System","level":2,"text":"Understanding Apples Tier System"},{"type":"paragraph","inlineContent":[{"type":"text","text":"If your goal is to ship your app with any combination of Monthly, Yearly, and Lifetime purchases, you most likely only need one tier: Tier 1. Just pass "},{"type":"codeVoice","code":"1"},{"type":"text","text":" for the "},{"type":"codeVoice","code":"purchasedTier"},{"type":"text","text":" parameter everywhere – easy. Continue to the next section."}]},{"type":"paragraph","inlineContent":[{"text":"But if you want to support multiple levels of access to your app, like a combination of Monthly\/Yearly\/Lifetime for the ‘Pro’ level, another combination of Monthly\/Yearly\/Lifetime for the ‘Max’ level, and maybe another combination of Monthly\/Yearly\/Lifetime for the ‘Ultra’ level, that’s when you need to think about which value to pass to the ","type":"text"},{"code":"purchasedTier","type":"codeVoice"},{"text":" parameter. Note that ","type":"text"},{"code":"1","type":"codeVoice"},{"text":" always refers to the highest level. That’s how Apple has decided their tier system to work. Read their ","type":"text"},{"isActive":true,"identifier":"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-subscriptions\/offer-auto-renewable-subscriptions","type":"reference"},{"text":" to learn more.","type":"text"}]},{"type":"heading","anchor":"Showing-the-Paywalls","level":2,"text":"Showing the Paywalls"},{"type":"video","identifier":"PaidViews"},{"type":"orderedList","items":[{"content":[{"inlineContent":[{"text":"Lock your paid features for users who have not made a purchase yet by using one of the built-in views ","type":"text"},{"type":"codeVoice","code":"PaidFeatureButton"},{"text":" or ","type":"text"},{"type":"codeVoice","code":"PaidFeatureView"},{"text":". This is the recommended way of using the SDK (when applicable) as it handles purchase states automatically for you and saves you a lot of boilerplate code. For example:","type":"text"}],"type":"paragraph"},{"syntax":"swift","code":["\/\/ opens paywall if user has not purchased, else just like `Button`","PaidFeatureButton(\"Export\", systemImage: \"square.and.arrow.up\") {"," \/\/ your export logic – no check for a paid tier needed, only called if already purchased ","}","","\/\/ exactly the same as above, but gives you full customizability","PaidFeatureView {"," Button(\"Export\", systemImage: \"square.and.arrow.up\") {"," \/\/ your export logic – no check for a paid tier needed, only called if already purchased"," }","} lockedView: {"," Label(\"Export\", systemImage: \"lock\")","}"],"type":"codeListing"},{"inlineContent":[{"text":"Both ","type":"text"},{"code":"PaidFeatureButton","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"PaidFeatureView","type":"codeVoice"},{"text":" accept an ","type":"text"},{"code":"unlocksAtTier","type":"codeVoice"},{"text":" parameter of type ","type":"text"},{"code":"Int","type":"codeVoice"},{"text":" (default: ","type":"text"},{"code":"1","type":"codeVoice"},{"text":") and a ","type":"text"},{"code":"showPaywallOnPressIfLocked","type":"codeVoice"},{"text":" parameter of type ","type":"text"},{"code":"Bool","type":"codeVoice"},{"text":" (default: ","type":"text"},{"code":"true","type":"codeVoice"},{"text":").","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"If you don’t pass any of those parameters, the default behavior unlocks the feature only if tier 1 is purchased and shows a paywall on press if tier 1 is not yet purchased. If ","type":"text"},{"code":"showPaywallOnPressIfLocked","type":"codeVoice"},{"text":" is set to ","type":"text"},{"code":"false","type":"codeVoice"},{"text":", the locked view will not have any automatic interaction, just rendering locked view state as-is without any added behavior.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"Alternatively, if you want to control the presentation of the paywall manually, you can add the "},{"code":".paywall(isPresented:)","type":"codeVoice"},{"type":"text","text":" modifier to your custom views where needed. For example:"}],"type":"paragraph"},{"type":"codeListing","code":["import FreemiumKit","","struct MyView: View {"," @State var showPaywall: Bool = false",""," var body: some View {"," Button(\"Unlock Pro\") {"," showPaywall = true"," }"," .paywall(isPresented: $showPaywall)"," }","}"],"syntax":"swift"},{"inlineContent":[{"text":"If you want to conditionally hide views based on paid state (like hiding the unlock button if a user has already purchased), you can add the ","type":"text"},{"type":"codeVoice","code":"FreemiumKit"},{"text":" object as an ","type":"text"},{"type":"codeVoice","code":"@EnvironmentObject"},{"text":" and call ","type":"text"},{"type":"codeVoice","code":".purchasedTier"},{"text":" or ","type":"text"},{"type":"codeVoice","code":".hasPurchased"},{"text":" if you only have one tier like so:","type":"text"}],"type":"paragraph"},{"type":"codeListing","code":["import FreemiumKit","","struct MyView: View {"," @EnvironmentObject var freemiumKit: FreemiumKit"," @State var showPaywall: Bool = false",""," var body: some View {"," if freemiumKit.purchasedTier == nil {"," Button(\"Unlock Pro\") {"," showPaywall = true"," }"," .paywall(isPresented: $showPaywall)"," }"," }","}"],"syntax":"swift"},{"inlineContent":[{"type":"text","text":"If you want to show the paywall upon appearance of a view if a user has not paid, you should first check that the "},{"type":"codeVoice","code":"purchasesLoaded"},{"type":"text","text":" property of "},{"type":"codeVoice","code":"FreemiumKit"},{"type":"text","text":" is "},{"type":"codeVoice","code":"true"},{"type":"text","text":" – or else paying users might see the paywall, too. Since this is a common use case, our SDK ships with the "},{"type":"codeVoice","code":".onPurchasesLoaded"},{"type":"text","text":" view modifier which is guaranteed to be called exactly once (like "},{"type":"codeVoice","code":".onAppear"},{"type":"text","text":") but only when purchases are loaded:"}],"type":"paragraph"},{"type":"codeListing","code":["import FreemiumKit","","struct MyView: View {"," @State var showPaywall: Bool = false",""," var body: some View {"," VStack {"," \/\/ your view ..."," }"," .paywall(isPresented: $showPaywall)"," .onPurchasesLoaded {"," if !FremiumKit.shared.hasPurchased {"," showPaywall = true"," }"," }"," }","}"],"syntax":"swift"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"There’s also a "},{"type":"codeVoice","code":"PaidStatusView"},{"type":"text","text":" which you can add to your app’s settings to indicate to users what their current purchase state is. There are two styles:"}]},{"code":["PaidStatusView(style: .plain)","PaidStatusView(style: .decorative(icon: .laurel))"],"type":"codeListing","syntax":"swift"}]}]},{"type":"paragraph","inlineContent":[{"identifier":"Setup-PaidStatusView","type":"image"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"The "},{"type":"codeVoice","code":".decorative"},{"type":"text","text":" style has multiple "},{"type":"codeVoice","code":"icon"},{"type":"text","text":" parameter options and also accepts optional "},{"type":"codeVoice","code":"foregroundColor"},{"type":"text","text":" and "},{"type":"codeVoice","code":"backgroundColor"},{"type":"text","text":" parameters if you need to adjust the defaults. Note that the "},{"type":"codeVoice","code":"PaidStatusView"},{"type":"text","text":" will automatically open a paywall on press if there’s no purchase yet. Else, it’s rendered as just a label without interaction."}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"If you place it inside a "},{"code":"Form","type":"codeVoice"},{"type":"text","text":" with "},{"code":"Sections","type":"codeVoice"},{"type":"text","text":", you might want to set the "},{"code":"listRowBackground","type":"codeVoice"},{"type":"text","text":" for a clean look like this:"}]},{"type":"codeListing","syntax":"swift","code":["Form {"," Section {"," PaidStatusView(style: .decorative(icon: .laurel))"," .listRowBackground(Color.accentColor)"," }"," "," \/\/ ...","}"]},{"type":"heading","anchor":"SwiftUI-Previews","level":2,"text":"SwiftUI Previews"},{"type":"paragraph","inlineContent":[{"type":"text","text":"For SwiftUI previews to work where you make use of the built-in views or modifier, add a call to "},{"type":"codeVoice","code":".environmentObject(FreemiumKit.preview)"},{"type":"text","text":" in your preview code like so:"}]},{"type":"codeListing","syntax":"swift","code":["#Preview {"," YourView()"," .environmentObject(FreemiumKit.preview)","}"]},{"type":"paragraph","inlineContent":[{"text":"If you want to simulate a specific paid state in your previews, you can call the ","type":"text"},{"code":"withOverridesForDebug(purchasedTier:)","type":"codeVoice"},{"text":" function on ","type":"text"},{"code":"FreemiumKit.preview","type":"codeVoice"},{"text":" and set your desired tier (set ","type":"text"},{"code":"1","type":"codeVoice"},{"text":" for full access). The default ","type":"text"},{"code":"FreemiumKit.preview","type":"codeVoice"},{"text":" shows in the “nothing purchased” state, showcasing how things will look from a Free users perspective. For example:","type":"text"}]},{"type":"codeListing","syntax":"swift","code":["#Preview(\"Full Access\") {"," YourView()"," .environmentObject(FreemiumKit.preview.withOverridesForDebug(purchasedTier: 1))","}"]},{"type":"heading","anchor":"Contact","level":2,"text":"Contact"},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"identifier":"mailto:freemiumkit@fline.dev","isActive":true,"type":"reference"},{"text":".","type":"text"}]},{"type":"heading","anchor":"Legal","level":2,"text":"Legal"},{"type":"small","inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference","isActive":true}]}],"kind":"content"}],"sections":[],"abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"references":{"Setup-PaidStatusView":{"type":"image","identifier":"Setup-PaidStatusView","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-PaidStatusView.jpeg"}]},"PaidViews":{"type":"video","identifier":"PaidViews","alt":null,"variants":[{"traits":["1x","light"],"url":"\/videos\/PaidViews.mp4"}],"poster":"PaidViews-Poster"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","url":"\/documentation\/index","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"kind":"article","type":"topic","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index"},"https://developer.apple.com/help/app-store-connect/manage-subscriptions/offer-auto-renewable-subscriptions":{"title":"official docs","type":"link","identifier":"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-subscriptions\/offer-auto-renewable-subscriptions","url":"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-subscriptions\/offer-auto-renewable-subscriptions","titleInlineContent":[{"text":"official docs","type":"text"}]},"Setup-Add-Dependency":{"type":"image","identifier":"Setup-Add-Dependency","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Add-Dependency.jpeg"}]},"https://www.youtube.com/watch?v=6JxwA3WieHs":{"type":"download","identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","url":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","checksum":null},"PaidViews-Poster":{"type":"image","identifier":"PaidViews-Poster","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/PaidViews-Poster.jpeg"}]},"Setup-Choose-Package":{"type":"image","identifier":"Setup-Choose-Package","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Choose-Package.jpeg"}]},"https://www.fline.dev/imprint/":{"title":"Imprint","type":"link","identifier":"https:\/\/www.fline.dev\/imprint\/","url":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"text":"Imprint","type":"text"}]},"FreemiumKit.png":{"type":"image","identifier":"FreemiumKit.png","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"Setup-Add-Package":{"type":"image","identifier":"Setup-Add-Package","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Add-Package.jpeg"}]},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","type":"link","identifier":"mailto:freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"}}} \ No newline at end of file diff --git a/data/documentation/index.json b/data/documentation/index.json index d382122..5df6d76 100644 --- a/data/documentation/index.json +++ b/data/documentation/index.json @@ -1 +1 @@ -{"sections":[],"kind":"article","primaryContentSections":[{"content":[{"level":2,"anchor":"Overview","text":"Overview","type":"heading"},{"inlineContent":[{"identifier":"FreemiumKit-Lettering","type":"image"}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"FreemiumKit is the ultimate solution for Apple platform developers to integrate and manage in-app purchases and subscriptions effortlessly. With support for all Apple platforms, FreemiumKit provides a seamless and efficient way to handle your app’s monetization."}],"type":"paragraph"},{"style":"tip","name":"Tip","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Install the Mac app first for a smooth onboarding experience."}]}],"type":"aside"},{"level":2,"anchor":"Key-Features","text":"Key Features","type":"heading"},{"level":3,"anchor":"One-Click-Creation-of-MonthlyYearlyLifetime","text":"One-Click Creation of Monthly\/Yearly\/Lifetime","type":"heading"},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Connect API Integration","type":"text"}]},{"type":"text","text":": FreemiumKit connects to App Store Connect on your behalf to automate all the steps needed to create your products, saving you a lot of click & wait."}]}]},{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Automatic Pricing"}]},{"type":"text","text":": We even calculate the prices for longer periods by default based on your Monthly price in a sensible manner, giving you full control when needed."}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Combined Review Note","type":"text"}]},{"type":"text","text":": The review note updates for all of Monthly\/Yearly\/Lifetime at once."}],"type":"paragraph"}]}]},{"identifier":"QuickSetup","type":"video"},{"level":3,"anchor":"Configurable-Paywalls","text":"Configurable Paywalls","type":"heading"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Paywalls"}],"type":"strong"},{"type":"text","text":": Our SDK contains beautiful & localized paywall designs for all Apple platforms."}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Remote Config"}]},{"type":"text","text":": Paywalls update immediately so you don’t need to wait for a new app version."}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"inlineContent":[{"text":"A\/B Testing","type":"text"}],"type":"strong"},{"text":": Improve your conversion by comparing up to 4 designs in parallel.","type":"text"}],"type":"paragraph"}]}]},{"identifier":"Paywalls","type":"video"},{"level":3,"anchor":"Flexible-Pricing-Adjustments-Coming-Soon","text":"Flexible Pricing Adjustments (Coming Soon!)","type":"heading"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Purchase Power Parity:"}],"type":"strong"},{"text":" Adjust prices based on country to maximize revenue & accessibility.","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"A\/B Testing:"}],"type":"strong"},{"text":" Automatically creates subscription groups so you can test different prices!","type":"text"}]}]}]},{"columns":[{"size":2,"content":[{"type":"heading","text":"Native Experience","level":3,"anchor":"Native-Experience"},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Full Apple Platforms Support:"}]},{"text":" Seamlessly integrate the SDK with iOS, macOS, visionOS, and tvOS (coming soon).","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Live Purchase Push Notifications:"}],"type":"strong"},{"text":" Receive real-time notifications for user purchases to stay on top of your app’s performance.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Privacy by Design:"}],"type":"strong"},{"type":"text","text":" The SDK avoids sending personal user data to any servers. And we don’t keep your purchase data on our servers."}]}]}],"type":"unorderedList"}]},{"size":1,"content":[{"inlineContent":[{"type":"image","identifier":"PushNotifications"}],"type":"paragraph"}]}],"numberOfColumns":3,"type":"row"},{"level":2,"anchor":"Stellar-Documentation--Support","text":"Stellar Documentation & Support","type":"heading"},{"inlineContent":[{"type":"text","text":"Our customers are amazed by our – quote – “stellar” documentation and support:"}],"type":"paragraph"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"type":"text","text":"We worked hard on providing an "},{"inlineContent":[{"type":"text","text":"intuitive Onboarding"}],"type":"strong"},{"type":"text","text":" inside our app"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"We have "},{"inlineContent":[{"type":"text","text":"detailed guides"}],"type":"strong"},{"type":"text","text":" for various use cases like for "},{"isActive":true,"identifier":"https:\/\/freemiumkit.app\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"reference"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"text","text":"We even recorded a detailed "},{"type":"strong","inlineContent":[{"text":"walkthrough video","type":"text"}]},{"type":"text","text":" explaining the entire process"}],"type":"paragraph"}]}]},{"level":3,"anchor":"Explanation-Video-on-YouTube","text":"Explanation Video on YouTube:","type":"heading"},{"inlineContent":[{"type":"image","identifier":"Setup-Guide-Thumbnail"}],"type":"paragraph"},{"inlineContent":[{"type":"reference","identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","isActive":true}],"type":"paragraph"},{"level":2,"anchor":"FreemiumKit-vs-RevenueCat","text":"FreemiumKit vs. RevenueCat","type":"heading"},{"inlineContent":[{"type":"text","text":"Many people in our community love 😻 RevenueCat, so you might wonder how FreemiumKit compares. The short answer is, that RevenueCat focuses on "},{"inlineContent":[{"text":"growth","type":"text"}],"type":"strong"},{"type":"text","text":" for "},{"inlineContent":[{"text":"already successful","type":"text"}],"type":"emphasis"},{"type":"text","text":" customers, whereas FreemiumKit focuses on "},{"inlineContent":[{"type":"text","text":"convenience"}],"type":"strong"},{"type":"text","text":" for "},{"inlineContent":[{"text":"beginners and Indie developers","type":"text"}],"type":"emphasis"},{"type":"text","text":". See the following table to get a better understanding of what I mean by that:"}],"type":"paragraph"},{"rows":[[[{"type":"paragraph","inlineContent":[{"text":"Feature","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"FreemiumKit","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"RevenueCat"}]}]],[[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Quick Setup"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (automated creation of products on Connect)"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Paywalls","type":"text"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (on all Apple Platforms, even visionOS!)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"🚧 (only iOS)"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Built-In Localization","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (paywalls localized to ~40 languages)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"❌","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Real-Time Notifications","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (push notifications sent to native iPhone app)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ (only webhooks)"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Skip Renewal Notifications","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (reports purchases & "},{"type":"strong","inlineContent":[{"text":"new","type":"text"}]},{"type":"text","text":" subscriptions)"}]}],[{"type":"paragraph","inlineContent":[{"text":"❌","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Verified Transactions","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (using StoreKit 2)"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"A\/B Testing"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (fast setup, up to 4 designs in parallel)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (but a lot of work)","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Native App","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (on all Apple Platforms)"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Purchases Dashboard"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (in native app)"}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (only Web)","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"text":"Purchase Power Parity (Soon!)","type":"text"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (adjustable slider to mix with Apple prices)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Scalable","type":"text"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (CDN for remote config, purchases in iCloud)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (higher price)"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Low App Size Impact"}]}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (3MB less than RevenueCat)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"❌"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"User Privacy"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (no personal data sent, server temporary storage)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"❌ (lots of data)"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Supports Apple Platforms"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (including visionOS)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (including visionOS)"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Supports Android & Web","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Pricing","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"Freemium, paid tier ","type":"text"},{"inlineContent":[{"type":"text","text":"below 1%"}],"type":"strong"},{"text":" of Revenue","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"Freemium, paid tier exactly 1% of Revenue"}]}]]],"header":"row","type":"table"},{"level":2,"anchor":"Pricing","text":"Pricing","type":"heading"},{"inlineContent":[{"text":"FreemiumKit is ","type":"text"},{"type":"strong","inlineContent":[{"text":"completely free to use","type":"text"}]},{"text":" at the moment for ","type":"text"},{"type":"emphasis","inlineContent":[{"text":"everyone","type":"text"}]},{"text":".","type":"text"}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"In the future, only developers with more than $500 monthly income on App Store Connect will need to pay, and always less than 1% of their income. The full planned pricing table:"}],"type":"paragraph"},{"columns":[{"size":1,"content":[{"rows":[[[{"type":"paragraph","inlineContent":[{"type":"text","text":"Monthly Income"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"Cost"}]}]],[[{"inlineContent":[{"text":"$0 - $500","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"Free"}],"type":"paragraph"}]],[[{"inlineContent":[{"text":"$500 - $1k","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$5\/mo"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"text","text":"$1k - $2k"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$10\/mo"}],"type":"paragraph"}]],[[{"inlineContent":[{"text":"$2k - $4.5k","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$20\/mo"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"text":"$4.5k - $7.5k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$45\/mo"}]}]]],"type":"table","header":"row"}]},{"size":1,"content":[{"header":"row","type":"table","rows":[[[{"inlineContent":[{"type":"text","text":"Monthly Income"}],"type":"paragraph"}],[{"inlineContent":[{"text":"Cost","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"text","text":"$7.5k - $15k"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$75\/mo"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"text":"$15k - $30k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"$150\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$30k - $50k"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$300\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$50k - $100k"}]}],[{"type":"paragraph","inlineContent":[{"text":"$500\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"text":"$100k+","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"$1,000\/mo","type":"text"}]}]]]}]}],"numberOfColumns":2,"type":"row"},{"level":2,"anchor":"Get-Started","text":"Get Started","type":"heading"},{"inlineContent":[{"text":"Ready to take your app’s monetization to the next level? Download FreemiumKit today and start experiencing the benefits of simplified and powerful in-app purchases & subscriptions.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"type":"reference","identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","isActive":true},{"type":"text","text":" "},{"type":"reference","overridingTitleInlineContent":[{"type":"text","text":"Download Now"}],"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","isActive":true,"overridingTitle":"Download Now"}],"type":"paragraph"},{"level":2,"anchor":"SDK-Setup-Guide","text":"SDK Setup Guide","type":"heading"},{"inlineContent":[{"type":"text","text":"For a detailed walkthrough on how to integrate the FreemiumKit SDK into your app, check out our "},{"type":"reference","overridingTitleInlineContent":[{"type":"text","text":"SDK Setup Guide"}],"overridingTitle":"SDK Setup Guide","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","isActive":true},{"type":"text","text":"."}],"type":"paragraph"},{"level":2,"anchor":"Testimonials","text":"Testimonials","type":"heading"},{"inlineContent":[{"text":"Here’s what customers are saying about FreemiumKit:","type":"text"}],"type":"paragraph"},{"columns":[{"content":[{"inlineContent":[],"type":"paragraph"},{"type":"aside","style":"note","content":[{"inlineContent":[{"text":"Setting up in-app purchases and subscriptions is a tedious task, and FreemiumKit is a ","type":"text"},{"inlineContent":[{"type":"text","text":"huge time saver"}],"type":"strong"},{"text":" by automating it. Once you try it, you will never go back!","type":"text"}],"type":"paragraph"}],"name":"Nicolo Stanciu, NFC.cool"}],"size":1},{"content":[{"type":"paragraph","inlineContent":[]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"The setup is "},{"type":"strong","inlineContent":[{"type":"text","text":"unbelievably simple"}]},{"type":"text","text":" and way faster to get going than any other solution I’ve tried. The SDK documentation is crystal clear! It comes packed with smart automation that work flawlessly out of the box, plus the flexibility to tailor it to your needs. And the support from the developers? Stellar!"}]}],"type":"aside","style":"note","name":"Seou Hounkanrin, Glu Sight"}],"size":1}],"numberOfColumns":2,"type":"row"},{"level":2,"anchor":"FAQ","text":"FAQ","type":"heading"},{"inlineContent":[{"text":"The top 5 most frequently asked questions:","type":"text"}],"type":"paragraph"},{"style":"list","type":"links","items":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"]},{"inlineContent":[{"text":"Visit the ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","overridingTitle":"Frequently Asked Questions","overridingTitleInlineContent":[{"text":"Frequently Asked Questions","type":"text"}]},{"text":" page for the full list of questions & answers.","type":"text"}],"type":"paragraph"},{"level":2,"anchor":"Contact","text":"Contact","type":"heading"},{"inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"type":"reference","isActive":true,"identifier":"mailto:freemiumkit@fline.dev"},{"type":"text","text":"."}],"type":"paragraph"},{"level":2,"anchor":"Legal","text":"Legal","type":"heading"},{"inlineContent":[{"type":"text","text":"Cihat Gündüz © 2024. All rights reserved."},{"type":"text","text":" "},{"type":"text","text":"Privacy: No personal data is tracked on this site."},{"type":"text","text":" "},{"type":"reference","identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true}],"type":"small"}],"kind":"content"}],"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/Index","interfaceLanguage":"swift"},"sampleCodeDownload":{"action":{"overridingTitle":"Get it Now","type":"reference","identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","isActive":true},"kind":"sampleDownload"},"schemaVersion":{"patch":0,"minor":3,"major":0},"metadata":{"title":"FreemiumKit","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"roleHeading":"Welcome to","role":"collection"},"hierarchy":{"paths":[[]]},"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]}],"abstract":[{"text":"Simple In-App Purchases and Subscriptions for Apple Platforms:","type":"text"},{"text":" ","type":"text"},{"text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more.","type":"text"}],"references":{"FreemiumKit-Lettering":{"variants":[{"url":"\/images\/FreemiumKit-Lettering.png","traits":["1x","light"]}],"alt":"FreemiumKit Logo","type":"image","identifier":"FreemiumKit-Lettering"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"url":"\/documentation\/freemiumkit\/faq-howitworks","type":"topic","kind":"article","role":"sampleCode"},"PushNotifications":{"variants":[{"url":"\/images\/PushNotifications.jpeg","traits":["1x","light"]}],"alt":"Push Notifications","type":"image","identifier":"PushNotifications"},"Setup-Guide-Thumbnail":{"variants":[{"url":"\/images\/Setup-Guide-Thumbnail.jpeg","traits":["1x","light"]}],"alt":null,"type":"image","identifier":"Setup-Guide-Thumbnail"},"Paywalls":{"variants":[{"url":"\/videos\/Paywalls.mp4","traits":["1x","light"]}],"alt":null,"poster":"Paywalls-Poster","type":"video","identifier":"Paywalls"},"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev","type":"link","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"identifier":"mailto:freemiumkit@fline.dev"},"https://www.fline.dev/imprint/":{"title":"Imprint","url":"https:\/\/www.fline.dev\/imprint\/","type":"link","titleInlineContent":[{"type":"text","text":"Imprint"}],"identifier":"https:\/\/www.fline.dev\/imprint\/"},"QuickSetup":{"variants":[{"url":"\/videos\/QuickSetup.mp4","traits":["1x","light"]}],"alt":null,"poster":"QuickSetup-Poster","type":"video","identifier":"QuickSetup"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"url":"\/documentation\/freemiumkit\/faq-validation","type":"topic","kind":"article","role":"sampleCode"},"FreemiumKit.png":{"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"alt":null,"type":"image","identifier":"FreemiumKit.png"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"title":"How does the Pricing work in detail?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"url":"\/documentation\/freemiumkit\/faq-pricing","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"title":"SDK Setup Guide","abstract":[{"type":"text","text":"Learn how to set up your app for our paywalls and live push notifications."}],"role":"article","url":"\/documentation\/freemiumkit\/setupguide","kind":"article","type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","images":[{"type":"icon","identifier":"FreemiumKit.png"}]},"Paywalls-Poster":{"variants":[{"url":"\/images\/Paywalls-Poster.jpeg","traits":["1x","light"]}],"alt":null,"type":"image","identifier":"Paywalls-Poster"},"https://www.youtube.com/watch?v=6JxwA3WieHs":{"title":"See FreemiumKit in Action Now!","url":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","type":"link","titleInlineContent":[{"type":"text","text":"See FreemiumKit in Action Now!"}],"identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs"},"https://freemiumkit.app/documentation/freemiumkit/faq-migratefrompaidupfront":{"title":"migrating from a paid app","url":"https:\/\/freemiumkit.app\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"link","titleInlineContent":[{"type":"text","text":"migrating from a paid app"}],"identifier":"https:\/\/freemiumkit.app\/documentation\/freemiumkit\/faq-migratefrompaidupfront"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","type":"topic","kind":"article","role":"sampleCode"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"topic","kind":"article","role":"sampleCode"},"QuickSetup-Poster":{"variants":[{"url":"\/images\/QuickSetup-Poster.jpeg","traits":["1x","light"]}],"alt":null,"type":"image","identifier":"QuickSetup-Poster"},"https://apps.apple.com/app/apple-store/id6502914189?pt=549314&ct=freemiumkit.app&mt=8":{"checksum":null,"url":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","type":"download","identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"url":"\/documentation\/freemiumkit\/faqs","type":"topic","kind":"article","role":"article"}}} \ No newline at end of file +{"abstract":[{"type":"text","text":"Simple In-App Purchases and Subscriptions for Apple Platforms:"},{"type":"text","text":" "},{"type":"text","text":"Automation, Paywalls, A\/B Testing, Live Notifications, PPP, and more."}],"hierarchy":{"paths":[[]]},"kind":"article","sampleCodeDownload":{"action":{"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","isActive":true,"type":"reference","overridingTitle":"Get it Now"},"kind":"sampleDownload"},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/Index","interfaceLanguage":"swift"},"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]}],"sections":[],"primaryContentSections":[{"kind":"content","content":[{"text":"Overview","type":"heading","anchor":"Overview","level":2},{"inlineContent":[{"type":"image","identifier":"FreemiumKit-Lettering"}],"type":"paragraph"},{"inlineContent":[{"text":"FreemiumKit is the ultimate solution for Apple platform developers to integrate and manage in-app purchases and subscriptions effortlessly. With support for all Apple platforms, FreemiumKit provides a seamless and efficient way to handle your app’s monetization.","type":"text"}],"type":"paragraph"},{"content":[{"inlineContent":[{"type":"text","text":"Install the Mac app first for a smooth onboarding experience."}],"type":"paragraph"}],"type":"aside","name":"Tip","style":"tip"},{"text":"Key Features","type":"heading","anchor":"Key-Features","level":2},{"text":"One-Click Creation of Monthly\/Yearly\/Lifetime","type":"heading","anchor":"One-Click-Creation-of-MonthlyYearlyLifetime","level":3},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"inlineContent":[{"text":"Connect API Integration","type":"text"}],"type":"strong"},{"text":": FreemiumKit connects to App Store Connect on your behalf to automate all the steps needed to create your products, saving you a lot of click & wait.","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Automatic Pricing"}],"type":"strong"},{"text":": We even calculate the prices for longer periods by default based on your Monthly price in a sensible manner, giving you full control when needed.","type":"text"}]}]},{"content":[{"inlineContent":[{"inlineContent":[{"text":"Combined Review Note","type":"text"}],"type":"strong"},{"text":": The review note updates for all of Monthly\/Yearly\/Lifetime at once.","type":"text"}],"type":"paragraph"}]}]},{"identifier":"QuickSetup","type":"video"},{"text":"Configurable Paywalls","type":"heading","anchor":"Configurable-Paywalls","level":3},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Paywalls"}]},{"type":"text","text":": Our SDK contains beautiful & localized paywall designs for all Apple platforms."}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Remote Config"}]},{"type":"text","text":": Paywalls update immediately so you don’t need to wait for a new app version."}]}]},{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"A\/B Testing"}]},{"type":"text","text":": Improve your conversion by comparing up to 4 designs in parallel."}],"type":"paragraph"}]}]},{"identifier":"Paywalls","type":"video"},{"text":"Flexible Pricing Adjustments (Coming Soon!)","type":"heading","anchor":"Flexible-Pricing-Adjustments-Coming-Soon","level":3},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Purchase Power Parity:","type":"text"}],"type":"strong"},{"text":" Adjust prices based on country to maximize revenue & accessibility.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"A\/B Testing:","type":"text"}],"type":"strong"},{"text":" Automatically creates subscription groups so you can test different prices!","type":"text"}]}]}]},{"type":"row","numberOfColumns":3,"columns":[{"size":2,"content":[{"text":"Native Experience","type":"heading","anchor":"Native-Experience","level":3},{"items":[{"content":[{"inlineContent":[{"inlineContent":[{"text":"Full Apple Platforms Support:","type":"text"}],"type":"strong"},{"text":" Seamlessly integrate the SDK with iOS, macOS, visionOS, and tvOS (coming soon).","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Live Purchase Push Notifications:","type":"text"}]},{"text":" Receive real-time notifications for user purchases to stay on top of your app’s performance.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Privacy by Design:"}]},{"type":"text","text":" The SDK avoids sending personal user data to any servers. And we don’t keep your purchase data on our servers."}]}]}],"type":"unorderedList"}]},{"size":1,"content":[{"inlineContent":[{"identifier":"PushNotifications","type":"image"}],"type":"paragraph"}]}]},{"text":"Stellar Documentation & Support","type":"heading","anchor":"Stellar-Documentation--Support","level":2},{"inlineContent":[{"text":"Our customers are amazed by our – quote – “stellar” documentation and support:","type":"text"}],"type":"paragraph"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"type":"text","text":"We worked hard on providing an "},{"type":"strong","inlineContent":[{"type":"text","text":"intuitive Onboarding"}]},{"type":"text","text":" inside our app"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"We have ","type":"text"},{"type":"strong","inlineContent":[{"type":"text","text":"detailed guides"}]},{"text":" for various use cases like for ","type":"text"},{"isActive":true,"identifier":"https:\/\/freemiumkit.app\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"reference"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"We even recorded a detailed "},{"inlineContent":[{"type":"text","text":"walkthrough video"}],"type":"strong"},{"type":"text","text":" explaining the entire process"}],"type":"paragraph"}]}]},{"text":"Explanation Video on YouTube:","type":"heading","anchor":"Explanation-Video-on-YouTube","level":3},{"inlineContent":[{"identifier":"Setup-Guide-Thumbnail","type":"image"}],"type":"paragraph"},{"inlineContent":[{"type":"reference","isActive":true,"identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs"}],"type":"paragraph"},{"text":"FreemiumKit vs. RevenueCat","type":"heading","anchor":"FreemiumKit-vs-RevenueCat","level":2},{"inlineContent":[{"text":"Many people in our community love 😻 RevenueCat, so you might wonder how FreemiumKit compares. The short answer is, that RevenueCat focuses on ","type":"text"},{"inlineContent":[{"type":"text","text":"growth"}],"type":"strong"},{"text":" for ","type":"text"},{"inlineContent":[{"text":"already successful","type":"text"}],"type":"emphasis"},{"text":" customers, whereas FreemiumKit focuses on ","type":"text"},{"inlineContent":[{"text":"convenience","type":"text"}],"type":"strong"},{"text":" for ","type":"text"},{"inlineContent":[{"text":"beginners and Indie developers","type":"text"}],"type":"emphasis"},{"text":". See the following table to get a better understanding of what I mean by that:","type":"text"}],"type":"paragraph"},{"header":"row","type":"table","rows":[[[{"inlineContent":[{"text":"Feature","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"FreemiumKit"}],"type":"paragraph"}],[{"inlineContent":[{"text":"RevenueCat","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Quick Setup"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (automated creation of products on Connect)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"❌"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Paywalls"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (on all Apple Platforms, even visionOS!)"}],"type":"paragraph"}],[{"inlineContent":[{"text":"🚧 (only iOS)","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Built-In Localization"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (paywalls localized to ~40 languages)"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Real-Time Notifications"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (push notifications sent to native iPhone app)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌ (only webhooks)","type":"text"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Skip Renewal Notifications"}]}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (reports purchases & "},{"inlineContent":[{"text":"new","type":"text"}],"type":"strong"},{"type":"text","text":" subscriptions)"}]}],[{"type":"paragraph","inlineContent":[{"text":"❌","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Verified Transactions","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (using StoreKit 2)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"A\/B Testing","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (fast setup, up to 4 designs in parallel)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (but a lot of work)","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Native App"}]}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (on all Apple Platforms)"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Purchases Dashboard"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (in native app)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (only Web)"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Purchase Power Parity (Soon!)","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (adjustable slider to mix with Apple prices)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Scalable","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (CDN for remote config, purchases in iCloud)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (higher price)"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Low App Size Impact"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (3MB less than RevenueCat)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"User Privacy"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (no personal data sent, server temporary storage)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ (lots of data)"}]}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Supports Apple Platforms"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (including visionOS)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (including visionOS)"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Supports Android & Web"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"text":"Pricing","type":"text"}],"type":"strong"}],"type":"paragraph"}],[{"inlineContent":[{"text":"Freemium, paid tier ","type":"text"},{"type":"strong","inlineContent":[{"type":"text","text":"below 1%"}]},{"text":" of Revenue","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"Freemium, paid tier exactly 1% of Revenue"}],"type":"paragraph"}]]]},{"text":"Pricing","type":"heading","anchor":"Pricing","level":2},{"inlineContent":[{"text":"FreemiumKit is ","type":"text"},{"inlineContent":[{"text":"completely free to use","type":"text"}],"type":"strong"},{"text":" at the moment for ","type":"text"},{"inlineContent":[{"text":"everyone","type":"text"}],"type":"emphasis"},{"text":".","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"In the future, only developers with more than $500 monthly income on App Store Connect will need to pay, and always less than 1% of their income. The full planned pricing table:","type":"text"}],"type":"paragraph"},{"type":"row","numberOfColumns":2,"columns":[{"size":1,"content":[{"rows":[[[{"type":"paragraph","inlineContent":[{"type":"text","text":"Monthly Income"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"Cost"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$0 - $500"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"Free"}]}]],[[{"type":"paragraph","inlineContent":[{"text":"$500 - $1k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"$5\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$1k - $2k"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$10\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$2k - $4.5k"}]}],[{"type":"paragraph","inlineContent":[{"text":"$20\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$4.5k - $7.5k"}]}],[{"type":"paragraph","inlineContent":[{"text":"$45\/mo","type":"text"}]}]]],"type":"table","header":"row"}]},{"size":1,"content":[{"header":"row","type":"table","rows":[[[{"type":"paragraph","inlineContent":[{"type":"text","text":"Monthly Income"}]}],[{"type":"paragraph","inlineContent":[{"text":"Cost","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$7.5k - $15k"}]}],[{"type":"paragraph","inlineContent":[{"text":"$75\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$15k - $30k"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$150\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$30k - $50k"}]}],[{"type":"paragraph","inlineContent":[{"text":"$300\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"text":"$50k - $100k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"$500\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$100k+"}]}],[{"type":"paragraph","inlineContent":[{"text":"$1,000\/mo","type":"text"}]}]]]}]}]},{"text":"Get Started","type":"heading","anchor":"Get-Started","level":2},{"inlineContent":[{"text":"Ready to take your app’s monetization to the next level? Download FreemiumKit today and start experiencing the benefits of simplified and powerful in-app purchases & subscriptions.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","type":"reference","isActive":true},{"text":" ","type":"text"},{"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","type":"reference","overridingTitle":"Download Now","overridingTitleInlineContent":[{"type":"text","text":"Download Now"}],"isActive":true}],"type":"paragraph"},{"text":"SDK Setup Guide","type":"heading","anchor":"SDK-Setup-Guide","level":2},{"inlineContent":[{"text":"For a detailed walkthrough on how to integrate the FreemiumKit SDK into your app, check out our ","type":"text"},{"overridingTitleInlineContent":[{"text":"SDK Setup Guide","type":"text"}],"isActive":true,"overridingTitle":"SDK Setup Guide","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","type":"reference"},{"text":".","type":"text"}],"type":"paragraph"},{"text":"Testimonials","type":"heading","anchor":"Testimonials","level":2},{"inlineContent":[{"text":"Here’s what customers are saying about FreemiumKit:","type":"text"}],"type":"paragraph"},{"type":"row","numberOfColumns":2,"columns":[{"content":[{"type":"paragraph","inlineContent":[]},{"type":"aside","content":[{"inlineContent":[{"type":"text","text":"Setting up in-app purchases and subscriptions is a tedious task, and FreemiumKit is a "},{"type":"strong","inlineContent":[{"type":"text","text":"huge time saver"}]},{"type":"text","text":" by automating it. Once you try it, you will never go back!"}],"type":"paragraph"}],"style":"note","name":"Nicolo Stanciu, NFC.cool"}],"size":1},{"content":[{"type":"paragraph","inlineContent":[]},{"type":"aside","content":[{"type":"paragraph","inlineContent":[{"text":"The setup is ","type":"text"},{"inlineContent":[{"type":"text","text":"unbelievably simple"}],"type":"strong"},{"text":" and way faster to get going than any other solution I’ve tried. The SDK documentation is crystal clear! It comes packed with smart automation that work flawlessly out of the box, plus the flexibility to tailor it to your needs. And the support from the developers? Stellar!","type":"text"}]}],"name":"Seou Hounkanrin, Glu Sight","style":"note"}],"size":1}]},{"text":"FAQ","type":"heading","anchor":"FAQ","level":2},{"inlineContent":[{"text":"The top 5 most frequently asked questions:","type":"text"}],"type":"paragraph"},{"type":"links","items":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"],"style":"list"},{"inlineContent":[{"text":"Visit the ","type":"text"},{"overridingTitleInlineContent":[{"text":"Frequently Asked Questions","type":"text"}],"type":"reference","isActive":true,"overridingTitle":"Frequently Asked Questions","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},{"text":" page for the full list of questions & answers.","type":"text"}],"type":"paragraph"},{"text":"Contact","type":"heading","anchor":"Contact","level":2},{"inlineContent":[{"type":"text","text":"Have questions or need support? Reach out to me at "},{"identifier":"mailto:freemiumkit@fline.dev","isActive":true,"type":"reference"},{"type":"text","text":"."}],"type":"paragraph"},{"text":"Legal","type":"heading","anchor":"Legal","level":2},{"inlineContent":[{"text":"Cihat Gündüz © 2024. All rights reserved.","type":"text"},{"text":" ","type":"text"},{"text":"Privacy: No personal data is tracked on this site.","type":"text"},{"text":" ","type":"text"},{"identifier":"https:\/\/www.fline.dev\/imprint\/","isActive":true,"type":"reference"}],"type":"small"}]}],"schemaVersion":{"minor":3,"patch":0,"major":0},"metadata":{"roleHeading":"Welcome to","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"title":"FreemiumKit","role":"collection"},"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromRevenueCat":{"title":"I use RevenueCat, how can I migrate?","url":"\/documentation\/freemiumkit\/faq-migratefromrevenuecat","abstract":[{"type":"text","text":"See how easy it is to migrate from RevenueCat with our detailed migration guide – takes only ~30 minutes (including read time). And learn about some limitations we currently have."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromRevenueCat"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","url":"\/documentation\/freemiumkit\/faqs","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"abstract":[{"type":"text","text":"The most frequently asked questions about FreemiumKit."}],"kind":"article","type":"topic","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"FreemiumKit-Lettering":{"alt":"FreemiumKit Logo","identifier":"FreemiumKit-Lettering","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit-Lettering.png"}]},"Paywalls-Poster":{"alt":null,"identifier":"Paywalls-Poster","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/Paywalls-Poster.jpeg"}]},"https://apps.apple.com/app/apple-store/id6502914189?pt=549314&ct=freemiumkit.app&mt=8":{"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8","type":"download","checksum":null,"url":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&ct=freemiumkit.app&mt=8"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-MigrateFromPaidUpFront":{"title":"My app is paid-up-front. How can I make it Freemium?","url":"\/documentation\/freemiumkit\/faq-migratefrompaidupfront","abstract":[{"type":"text","text":"See how easy it is to migrate from a paid-up-front app to the Freemium model using FreemiumKit, while preserving access to your app for those who already purchased."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-MigrateFromPaidUpFront"},"https://www.fline.dev/imprint/":{"titleInlineContent":[{"text":"Imprint","type":"text"}],"title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","type":"link","url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"role":"article","type":"topic","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"kind":"article","url":"\/documentation\/freemiumkit\/setupguide","title":"SDK Setup Guide"},"Paywalls":{"alt":null,"identifier":"Paywalls","type":"video","poster":"Paywalls-Poster","variants":[{"traits":["1x","light"],"url":"\/videos\/Paywalls.mp4"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","url":"\/documentation\/freemiumkit\/faq-howitworks","abstract":[{"type":"text","text":"Learn why you can trust FreemiumKit to scale with your app and why there’s no long-term lock-in risk for your app."}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"FreemiumKit.png":{"alt":null,"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"title":"Does FreemiumKit validate purchases?","url":"\/documentation\/freemiumkit\/faq-validation","abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"kind":"article","type":"topic","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Pricing":{"abstract":[{"type":"text","text":"Learn how we calculate your monthly income and what happens if you exceed your current plan."}],"type":"topic","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Pricing","title":"How does the Pricing work in detail?","kind":"article","url":"\/documentation\/freemiumkit\/faq-pricing","role":"sampleCode"},"QuickSetup-Poster":{"alt":null,"identifier":"QuickSetup-Poster","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/QuickSetup-Poster.jpeg"}]},"https://www.youtube.com/watch?v=6JxwA3WieHs":{"titleInlineContent":[{"text":"See FreemiumKit in Action Now!","type":"text"}],"title":"See FreemiumKit in Action Now!","identifier":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs","type":"link","url":"https:\/\/www.youtube.com\/watch?v=6JxwA3WieHs"},"PushNotifications":{"alt":"Push Notifications","identifier":"PushNotifications","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/PushNotifications.jpeg"}]},"mailto:freemiumkit@fline.dev":{"titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","type":"link","url":"mailto:freemiumkit@fline.dev"},"Setup-Guide-Thumbnail":{"alt":null,"identifier":"Setup-Guide-Thumbnail","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/Setup-Guide-Thumbnail.jpeg"}]},"QuickSetup":{"alt":null,"identifier":"QuickSetup","type":"video","poster":"QuickSetup-Poster","variants":[{"traits":["1x","light"],"url":"\/videos\/QuickSetup.mp4"}]},"https://freemiumkit.app/documentation/freemiumkit/faq-migratefrompaidupfront":{"titleInlineContent":[{"text":"migrating from a paid app","type":"text"}],"title":"migrating from a paid app","identifier":"https:\/\/freemiumkit.app\/documentation\/freemiumkit\/faq-migratefrompaidupfront","type":"link","url":"https:\/\/freemiumkit.app\/documentation\/freemiumkit\/faq-migratefrompaidupfront"}}} \ No newline at end of file diff --git a/documentation/freemiumkit/faq-parentalgate/index.html b/documentation/freemiumkit/faq-parentalgate/index.html new file mode 100644 index 0000000..3d12102 --- /dev/null +++ b/documentation/freemiumkit/faq-parentalgate/index.html @@ -0,0 +1 @@ +