From 1cb130ac5394724952e5b51c2d820bd4be1d501b Mon Sep 17 00:00:00 2001 From: Jeehut Date: Thu, 6 Jun 2024 04:02:17 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20FlineDev?= =?UTF-8?q?/FreemiumKit-Docs@bfdf11aae1b96bda5a1863dda3f039d6e2cc2747=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/documentation/freemiumkit.json | 2 +- data/documentation/freemiumkit/faq-howitworks.json | 2 +- data/documentation/freemiumkit/faq-privacy.json | 2 +- data/documentation/freemiumkit/faq-validation.json | 2 +- data/documentation/freemiumkit/faqs.json | 2 +- data/documentation/freemiumkit/setupguide.json | 2 +- data/documentation/index.json | 2 +- index/index.json | 2 +- metadata.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/data/documentation/freemiumkit.json b/data/documentation/freemiumkit.json index c6cc6d4..0bcbab2 100644 --- a/data/documentation/freemiumkit.json +++ b/data/documentation/freemiumkit.json @@ -1 +1 @@ -{"metadata":{"role":"collection","modules":[{"name":"FreemiumKit"}],"externalID":"FreemiumKit","title":"FreemiumKit","roleHeading":"Framework","symbolKind":"module"},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit","interfaceLanguage":"swift"},"variants":[{"paths":["\/documentation\/freemiumkit"],"traits":[{"interfaceLanguage":"swift"}]}],"kind":"symbol","schemaVersion":{"minor":3,"patch":0,"major":0},"hierarchy":{"paths":[[]]},"sections":[],"references":{"doc://FreemiumKit/documentation/FreemiumKit":{"type":"topic","abstract":[],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit","title":"FreemiumKit","kind":"symbol","role":"collection","url":"\/documentation\/freemiumkit"}}} \ No newline at end of file +{"schemaVersion":{"patch":0,"major":0,"minor":3},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit","interfaceLanguage":"swift"},"metadata":{"role":"collection","modules":[{"name":"FreemiumKit"}],"title":"FreemiumKit","roleHeading":"Framework","symbolKind":"module","externalID":"FreemiumKit"},"variants":[{"paths":["\/documentation\/freemiumkit"],"traits":[{"interfaceLanguage":"swift"}]}],"hierarchy":{"paths":[[]]},"sections":[],"kind":"symbol","references":{"doc://FreemiumKit/documentation/FreemiumKit":{"title":"FreemiumKit","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit","type":"topic","abstract":[],"url":"\/documentation\/freemiumkit","role":"collection","kind":"symbol"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-howitworks.json b/data/documentation/freemiumkit/faq-howitworks.json index 2586433..e4a0d5b 100644 --- a/data/documentation/freemiumkit/faq-howitworks.json +++ b/data/documentation/freemiumkit/faq-howitworks.json @@ -1 +1 @@ -{"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","interfaceLanguage":"swift"},"metadata":{"roleHeading":"FAQs","role":"sampleCode","title":"How does FreemiumKit work? Can I trust it?"},"sections":[],"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."}],"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"]}],"primaryContentSections":[{"content":[{"level":2,"text":"Short Answer","anchor":"Short-Answer","type":"heading"},{"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 (CN) for fast global distribution – but there’s also a local fallback in your project, in case of downtimes.","type":"text"}],"type":"paragraph"},{"level":2,"text":"Full Answer","anchor":"Full-Answer","type":"heading"},{"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":[{"type":"text","text":"This lead to the following current tech stack:"}],"type":"paragraph"},{"items":[{"content":[{"inlineContent":[{"text":"Native apps for iOS, macOS, and visionOS (tvOS has no biometric authentication)","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"App connects to official ","type":"text"},{"type":"reference","identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","isActive":true},{"text":" endpoints to handle purchases","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/","isActive":true,"type":"reference"},{"type":"text","text":" SDK targeting iOS, macOS, visionOS, and tvOS (watchOS is not a destination)"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"SDK is built on top of ","type":"text"},{"isActive":true,"type":"reference","identifier":"https:\/\/developer.apple.com\/storekit\/"},{"text":" and SwiftUI 3 (supporting iOS\/tvOS 15+, macOS 12+)","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"isActive":true,"identifier":"https:\/\/vapor.codes","type":"reference"},{"text":"-based server for push notifications when purchases are made (reported by SDK)","type":"text"}]}]},{"content":[{"inlineContent":[{"type":"reference","isActive":true,"identifier":"https:\/\/supabase.com"},{"type":"text","text":"-based Content Delivery Network (CDN) for remote configuration of paywalls"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"isActive":true,"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","type":"reference"},{"text":"-based persistence of purchase history in your Apple Account for backup & sync","type":"text"}]}]}],"type":"unorderedList"},{"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 both are down, then:"}],"type":"paragraph"},{"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"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"❌ You would no longer be able to "},{"type":"strong","inlineContent":[{"type":"text","text":"remotely configure"}]},{"type":"text","text":" your paywall or A\/B test"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"✅ The Paywall UI would continue to work, using the local “fallback” configuration","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"✅ Users can continue to make purchases, as the SDK only needs StoreKit 2 for that","type":"text"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"✅ Even paying users will continue to have access to paid features (via StoreKit 2)"}],"type":"paragraph"}]}],"type":"unorderedList"},{"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"},{"level":2,"text":"Contact","anchor":"Contact","type":"heading"},{"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"},{"level":2,"text":"Legal","anchor":"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","isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/"}],"type":"small"}],"kind":"content"}],"schemaVersion":{"patch":0,"major":0,"minor":3},"kind":"article","references":{"https://developer.apple.com/storekit/":{"identifier":"https:\/\/developer.apple.com\/storekit\/","type":"link","title":"StoreKit 2","titleInlineContent":[{"text":"StoreKit 2","type":"text"}],"url":"https:\/\/developer.apple.com\/storekit\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"type":"topic","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","title":"How does FreemiumKit handle User Privacy?","kind":"article","role":"sampleCode","url":"\/documentation\/freemiumkit\/faq-privacy"},"https://developer.apple.com/icloud/cloudkit/":{"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","type":"link","title":"CloudKit","titleInlineContent":[{"text":"CloudKit","type":"text"}],"url":"https:\/\/developer.apple.com\/icloud\/cloudkit\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"kind":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","title":"Does FreemiumKit validate purchases?","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","role":"sampleCode","type":"topic"},"https://supabase.com":{"identifier":"https:\/\/supabase.com","type":"link","title":"Supabase","titleInlineContent":[{"text":"Supabase","type":"text"}],"url":"https:\/\/supabase.com"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"kind":"article","type":"topic","url":"\/documentation\/freemiumkit\/faqs","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"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","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"}],"kind":"article","type":"topic","url":"\/documentation\/index","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"https://developer.apple.com/xcode/swiftui/":{"identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/","type":"link","title":"SwiftUI","titleInlineContent":[{"text":"SwiftUI","type":"text"}],"url":"https:\/\/developer.apple.com\/xcode\/swiftui\/"},"https://developer.apple.com/documentation/appstoreconnectapi/":{"identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","type":"link","title":"App Store Connect API","titleInlineContent":[{"text":"App Store Connect API","type":"text"}],"url":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/"},"https://vapor.codes":{"identifier":"https:\/\/vapor.codes","type":"link","title":"Vapor","titleInlineContent":[{"text":"Vapor","type":"text"}],"url":"https:\/\/vapor.codes"},"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\/"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"alt":null}}} \ No newline at end of file +{"sections":[],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"kind":"article","seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"],"generated":true}],"metadata":{"title":"How does FreemiumKit work? Can I trust it?","role":"sampleCode","roleHeading":"FAQs"},"primaryContentSections":[{"kind":"content","content":[{"type":"heading","anchor":"Short-Answer","text":"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 (CN) for fast global distribution – but there’s also a local fallback in your project, in case of downtimes.","type":"text"}]},{"type":"heading","anchor":"Full-Answer","text":"Full Answer","level":2},{"type":"paragraph","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":[{"type":"text","text":"This lead to the following current tech stack:"}]},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Native apps for iOS, macOS, and visionOS (tvOS has no biometric authentication)"}]}]},{"content":[{"inlineContent":[{"text":"App connects to official ","type":"text"},{"isActive":true,"identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","type":"reference"},{"text":" endpoints to handle purchases","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/"},{"type":"text","text":" SDK targeting iOS, macOS, visionOS, and tvOS (watchOS is not a destination)"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"SDK is built on top of "},{"isActive":true,"type":"reference","identifier":"https:\/\/developer.apple.com\/storekit\/"},{"type":"text","text":" and SwiftUI 3 (supporting iOS\/tvOS 15+, macOS 12+)"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"isActive":true,"identifier":"https:\/\/vapor.codes","type":"reference"},{"text":"-based server for push notifications when purchases are made (reported by SDK)","type":"text"}]}]},{"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":[{"type":"reference","isActive":true,"identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/"},{"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 both are down, then:"}]},{"type":"unorderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"text":"❌ You would no longer receive ","type":"text"},{"inlineContent":[{"type":"text","text":"live push notifications"}],"type":"strong"},{"text":" when users make purchases","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ You would no longer be able to "},{"type":"strong","inlineContent":[{"type":"text","text":"remotely configure"}]},{"type":"text","text":" your paywall or A\/B test"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ The Paywall UI would continue to work, using the local “fallback” configuration"}]}]},{"content":[{"inlineContent":[{"text":"✅ Users can continue to make purchases, as the SDK only needs StoreKit 2 for that","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ Even paying users will continue to have access to paid features (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"}]},{"level":2,"type":"heading","anchor":"Contact","text":"Contact"},{"type":"paragraph","inlineContent":[{"text":"Have questions or need support? Reach out to me at ","type":"text"},{"type":"reference","identifier":"mailto:freemiumkit@fline.dev","isActive":true},{"text":".","type":"text"}]},{"level":2,"type":"heading","anchor":"Legal","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}]}]}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"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."}],"schemaVersion":{"patch":0,"major":0,"minor":3},"references":{"https://developer.apple.com/icloud/cloudkit/":{"titleInlineContent":[{"text":"CloudKit","type":"text"}],"url":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","identifier":"https:\/\/developer.apple.com\/icloud\/cloudkit\/","type":"link","title":"CloudKit"},"doc://FreemiumKit/documentation/Index":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"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."}],"type":"topic","role":"collection","title":"FreemiumKit","url":"\/documentation\/index","kind":"article"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-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."}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit handle User Privacy?"},"https://www.fline.dev/imprint/":{"titleInlineContent":[{"text":"Imprint","type":"text"}],"url":"https:\/\/www.fline.dev\/imprint\/","identifier":"https:\/\/www.fline.dev\/imprint\/","type":"link","title":"Imprint"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"type":"image","alt":null},"https://developer.apple.com/xcode/swiftui/":{"titleInlineContent":[{"text":"SwiftUI","type":"text"}],"url":"https:\/\/developer.apple.com\/xcode\/swiftui\/","identifier":"https:\/\/developer.apple.com\/xcode\/swiftui\/","type":"link","title":"SwiftUI"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"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!"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","role":"sampleCode","type":"topic","kind":"article","title":"Does FreemiumKit validate purchases?"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"type":"topic","title":"FAQs","kind":"article","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","url":"\/documentation\/freemiumkit\/faqs","role":"article","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"https://vapor.codes":{"titleInlineContent":[{"text":"Vapor","type":"text"}],"url":"https:\/\/vapor.codes","identifier":"https:\/\/vapor.codes","type":"link","title":"Vapor"},"mailto:freemiumkit@fline.dev":{"titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"url":"mailto:freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","type":"link","title":"freemiumkit@fline.dev"},"https://supabase.com":{"titleInlineContent":[{"text":"Supabase","type":"text"}],"url":"https:\/\/supabase.com","identifier":"https:\/\/supabase.com","type":"link","title":"Supabase"},"https://developer.apple.com/storekit/":{"titleInlineContent":[{"type":"text","text":"StoreKit 2"}],"url":"https:\/\/developer.apple.com\/storekit\/","identifier":"https:\/\/developer.apple.com\/storekit\/","type":"link","title":"StoreKit 2"},"https://developer.apple.com/documentation/appstoreconnectapi/":{"titleInlineContent":[{"text":"App Store Connect API","type":"text"}],"url":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","identifier":"https:\/\/developer.apple.com\/documentation\/appstoreconnectapi\/","type":"link","title":"App Store Connect API"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-privacy.json b/data/documentation/freemiumkit/faq-privacy.json index e527989..22bc4ec 100644 --- a/data/documentation/freemiumkit/faq-privacy.json +++ b/data/documentation/freemiumkit/faq-privacy.json @@ -1 +1 @@ -{"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"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"}],"schemaVersion":{"minor":3,"patch":0,"major":0},"metadata":{"title":"How does FreemiumKit handle User Privacy?","role":"sampleCode","roleHeading":"FAQs"},"primaryContentSections":[{"kind":"content","content":[{"type":"heading","anchor":"Short-Answer","level":2,"text":"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"},{"type":"heading","anchor":"Full-Answer","level":2,"text":"Full Answer"},{"inlineContent":[{"type":"text","text":"Firstly, we follow the principle of "},{"type":"strong","inlineContent":[{"text":"data minimization","type":"text"}]},{"type":"text","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":"paragraph"},{"inlineContent":[{"text":"Secondly, we ","type":"text"},{"inlineContent":[{"text":"don’t keep the data for long","type":"text"}],"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"},{"type":"aside","style":"tip","name":"Tip","content":[{"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."}],"type":"paragraph"}]},{"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":[{"type":"text","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":"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"},{"type":"heading","anchor":"Contact","level":2,"text":"Contact"},{"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"},{"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":" "},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}],"type":"small"}]}],"kind":"article","seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"]}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"sections":[],"references":{"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","type":"link","url":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"identifier":"mailto:freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","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"}],"kind":"article","type":"topic","url":"\/documentation\/index","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"kind":"article","type":"topic","url":"\/documentation\/freemiumkit\/faqs","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"FreemiumKit.png":{"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"type":"image","identifier":"FreemiumKit.png","alt":null},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"kind":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","title":"Does FreemiumKit validate purchases?","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","role":"sampleCode","type":"topic"},"https://www.fline.dev/imprint/":{"titleInlineContent":[{"type":"text","text":"Imprint"}],"identifier":"https:\/\/www.fline.dev\/imprint\/","url":"https:\/\/www.fline.dev\/imprint\/","type":"link","title":"Imprint"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","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","type":"topic","url":"\/documentation\/freemiumkit\/faq-howitworks","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"}}} \ No newline at end of file +{"kind":"article","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"},"sections":[],"schemaVersion":{"patch":0,"major":0,"minor":3},"metadata":{"title":"How does FreemiumKit handle User Privacy?","role":"sampleCode","roleHeading":"FAQs"},"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-Validation"]}],"primaryContentSections":[{"content":[{"anchor":"Short-Answer","type":"heading","level":2,"text":"Short Answer"},{"type":"paragraph","inlineContent":[{"type":"text","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":"heading","text":"Full Answer","anchor":"Full-Answer","level":2},{"type":"paragraph","inlineContent":[{"type":"text","text":"Firstly, we follow the principle of "},{"inlineContent":[{"text":"data minimization","type":"text"}],"type":"strong"},{"type":"text","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":"paragraph","inlineContent":[{"text":"Secondly, we ","type":"text"},{"inlineContent":[{"text":"don’t keep the data for long","type":"text"}],"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"}]},{"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."}]}],"type":"aside","name":"Tip","style":"tip"},{"type":"paragraph","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":[{"type":"text","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":"paragraph","inlineContent":[{"type":"text","text":"That’s why we strongly recommend to "},{"type":"strong","inlineContent":[{"text":"keep push notifications enabled","type":"text"}]},{"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":"heading","text":"Contact","anchor":"Contact","level":2},{"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","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":" "},{"type":"reference","isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/"}]}],"kind":"content"}],"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"}],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"url":"\/documentation\/freemiumkit\/faq-howitworks","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit work? Can I trust it?"},"FreemiumKit.png":{"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"identifier":"FreemiumKit.png","alt":null,"type":"image"},"https://www.fline.dev/imprint/":{"url":"https:\/\/www.fline.dev\/imprint\/","identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","type":"link","titleInlineContent":[{"text":"Imprint","type":"text"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"type":"topic","title":"FAQs","kind":"article","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","url":"\/documentation\/freemiumkit\/faqs","role":"article","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"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!"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","role":"sampleCode","type":"topic","kind":"article","title":"Does FreemiumKit validate purchases?"},"mailto:freemiumkit@fline.dev":{"url":"mailto:freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","title":"freemiumkit@fline.dev","type":"link","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}]},"doc://FreemiumKit/documentation/Index":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"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."}],"type":"topic","role":"collection","title":"FreemiumKit","url":"\/documentation\/index","kind":"article"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faq-validation.json b/data/documentation/freemiumkit/faq-validation.json index bdfa14a..93c499f 100644 --- a/data/documentation/freemiumkit/faq-validation.json +++ b/data/documentation/freemiumkit/faq-validation.json @@ -1 +1 @@ -{"kind":"article","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"metadata":{"roleHeading":"FAQs","title":"Does FreemiumKit validate purchases?","role":"sampleCode"},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]]},"sections":[],"schemaVersion":{"patch":0,"major":0,"minor":3},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy"],"generated":true}],"abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"primaryContentSections":[{"content":[{"level":2,"text":"Short Answer","type":"heading","anchor":"Short-Answer"},{"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","type":"heading","anchor":"Full-Answer"},{"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"},{"type":"emphasis","inlineContent":[{"text":"my","type":"text"}]},{"text":" app for ","type":"text"},{"inlineContent":[{"text":"this","type":"text"}],"type":"emphasis"},{"text":" device” (quote from WWDC22 session ","type":"text"},{"type":"reference","identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","isActive":true},{"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":[{"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":"text"}],"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 validation 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","type":"heading","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"},{"level":2,"text":"Legal","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"}],"references":{"https://developer.apple.com/videos/play/wwdc2021/10114/?time=694":{"url":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","type":"link","identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","titleInlineContent":[{"type":"text","text":"Meet StoreKit 2"}],"title":"Meet StoreKit 2"},"mailto:freemiumkit@fline.dev":{"url":"mailto:freemiumkit@fline.dev","type":"link","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"title":"freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"type":"topic","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","title":"How does FreemiumKit handle User Privacy?","kind":"article","role":"sampleCode","url":"\/documentation\/freemiumkit\/faq-privacy"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","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"}],"kind":"article","type":"topic","url":"\/documentation\/index","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"FreemiumKit.png":{"type":"image","identifier":"FreemiumKit.png","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"kind":"article","type":"topic","url":"\/documentation\/freemiumkit\/faqs","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"https://www.fline.dev/imprint/":{"url":"https:\/\/www.fline.dev\/imprint\/","type":"link","identifier":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}],"title":"Imprint"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","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","type":"topic","url":"\/documentation\/freemiumkit\/faq-howitworks","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"}}} \ No newline at end of file +{"abstract":[{"type":"text","text":"Learn how FreemiumKit deals with validation and how it helps you focus on what’s important – your app’s features!"}],"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"],"generated":true}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"},"metadata":{"roleHeading":"FAQs","role":"sampleCode","title":"Does FreemiumKit validate purchases?"},"schemaVersion":{"patch":0,"major":0,"minor":3},"sections":[],"kind":"article","primaryContentSections":[{"content":[{"level":2,"type":"heading","anchor":"Short-Answer","text":"Short Answer"},{"inlineContent":[{"type":"text","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":"paragraph"},{"level":2,"type":"heading","anchor":"Full-Answer","text":"Full Answer"},{"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"},{"type":"emphasis","inlineContent":[{"type":"text","text":"my"}]},{"text":" app for ","type":"text"},{"type":"emphasis","inlineContent":[{"text":"this","type":"text"}]},{"text":" device” (quote from WWDC22 session ","type":"text"},{"isActive":true,"type":"reference","identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694"},{"text":"). StoreKit 2 leaves developers the choice to accept even unverified purchases. But FreemiumKit doesn’t do that, it simply ","type":"text"},{"type":"strong","inlineContent":[{"type":"text","text":"always"}]},{"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 validation 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,"type":"heading","anchor":"Contact","text":"Contact"},{"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"},{"level":2,"type":"heading","anchor":"Legal","text":"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"}],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"url":"\/documentation\/freemiumkit\/faq-howitworks","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit work? Can I trust it?"},"FreemiumKit.png":{"identifier":"FreemiumKit.png","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"type":"image","alt":null},"https://www.fline.dev/imprint/":{"titleInlineContent":[{"text":"Imprint","type":"text"}],"url":"https:\/\/www.fline.dev\/imprint\/","identifier":"https:\/\/www.fline.dev\/imprint\/","type":"link","title":"Imprint"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"type":"topic","title":"FAQs","kind":"article","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","url":"\/documentation\/freemiumkit\/faqs","role":"article","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"https://developer.apple.com/videos/play/wwdc2021/10114/?time=694":{"titleInlineContent":[{"text":"Meet StoreKit 2","type":"text"}],"url":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","identifier":"https:\/\/developer.apple.com\/videos\/play\/wwdc2021\/10114\/?time=694","type":"link","title":"Meet StoreKit 2"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-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."}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit handle User Privacy?"},"mailto:freemiumkit@fline.dev":{"titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}],"url":"mailto:freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","type":"link","title":"freemiumkit@fline.dev"},"doc://FreemiumKit/documentation/Index":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"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."}],"type":"topic","role":"collection","title":"FreemiumKit","url":"\/documentation\/index","kind":"article"}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/faqs.json b/data/documentation/freemiumkit/faqs.json index b3138d8..c9ee75b 100644 --- a/data/documentation/freemiumkit/faqs.json +++ b/data/documentation/freemiumkit/faqs.json @@ -1 +1 @@ -{"metadata":{"title":"FAQs","roleHeading":"FreemiumKit","images":[{"identifier":"FreemiumKit.png","type":"icon"}],"role":"article"},"abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"kind":"article","topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"sections":[],"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"]}],"references":{"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","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"}],"kind":"article","type":"topic","url":"\/documentation\/index","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"type":"topic","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","title":"How does FreemiumKit handle User Privacy?","kind":"article","role":"sampleCode","url":"\/documentation\/freemiumkit\/faq-privacy"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","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","type":"topic","url":"\/documentation\/freemiumkit\/faq-howitworks","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"kind":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","title":"Does FreemiumKit validate purchases?","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","role":"sampleCode","type":"topic"},"FreemiumKit.png":{"type":"image","identifier":"FreemiumKit.png","variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"alt":null},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"type":"topic","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","title":"SDK Setup Guide","kind":"article","role":"article","url":"\/documentation\/freemiumkit\/setupguide","images":[{"identifier":"FreemiumKit.png","type":"icon"}]}}} \ No newline at end of file +{"abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"},"metadata":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"title":"FAQs","role":"article","roleHeading":"FreemiumKit"},"schemaVersion":{"major":0,"minor":3,"patch":0},"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"]}],"sections":[],"kind":"article","references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-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."}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit handle User Privacy?"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"url":"\/documentation\/freemiumkit\/faq-howitworks","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit work? Can I trust it?"},"doc://FreemiumKit/documentation/Index":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"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."}],"type":"topic","role":"collection","title":"FreemiumKit","url":"\/documentation\/index","kind":"article"},"FreemiumKit.png":{"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"identifier":"FreemiumKit.png","alt":null,"type":"image"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"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!"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","role":"sampleCode","type":"topic","kind":"article","title":"Does FreemiumKit validate purchases?"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"url":"\/documentation\/freemiumkit\/setupguide","kind":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","title":"SDK Setup Guide","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"type":"topic","role":"article","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}]}}} \ No newline at end of file diff --git a/data/documentation/freemiumkit/setupguide.json b/data/documentation/freemiumkit/setupguide.json index 8a27b3e..818ce85 100644 --- a/data/documentation/freemiumkit/setupguide.json +++ b/data/documentation/freemiumkit/setupguide.json @@ -1 +1 @@ -{"kind":"article","hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide"},"seeAlsoSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"],"generated":true}],"primaryContentSections":[{"content":[{"type":"heading","text":"Adding the SDK","anchor":"Adding-the-SDK","level":2},{"type":"orderedList","items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Open your app project in Xcode."}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"In the “File” menu select “Add Package Dependencies…”"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"\/\/ TODO: add screenshot"}]}]},{"content":[{"inlineContent":[{"type":"text","text":"Paste this to the top right text field and press “Add Package”:"}],"type":"paragraph"},{"code":["https:\/\/github.com\/FlineDev\/FreemiumKit.git"],"type":"codeListing","syntax":null},{"content":[{"type":"paragraph","inlineContent":[{"text":"During the current Beta phase, you need to specify the ","type":"text"},{"type":"codeVoice","code":"main"},{"text":" branch for it to work.","type":"text"}]}],"type":"aside","name":"Warning","style":"warning"},{"inlineContent":[{"text":"\/\/ TODO: add screenshot","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Select your app target (if not already selected) and confirm by pressing “Add Package”"}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"\/\/ TODO: add screenshot"}]}]}]},{"type":"heading","text":"Configuring the SDK","anchor":"Configuring-the-SDK","level":2},{"type":"aside","name":"Tip","style":"tip","content":[{"type":"paragraph","inlineContent":[{"text":"Don’t forget to ","type":"text"},{"type":"codeVoice","code":"import FreemiumKit"},{"text":" for any of the below calls to build.","type":"text"}]}]},{"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 for your app in FreemiumKit. If it doesn’t, drag & drop it from the Setup tab now.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Add a call to ","type":"text"},{"type":"codeVoice","code":".environmentObject(FreemiumKit.shared)"},{"text":" to every scene in the app entry point. For example:","type":"text"}],"type":"paragraph"},{"code":["@main","struct MyApp: App {"," var body: some Scene {"," WindowGroup {"," MainView()"," }"," .environmentObject(FreemiumKit.shared)"," }","}"],"syntax":"swift","type":"codeListing"}]}]},{"type":"heading","text":"Showing the Paywalls","anchor":"Showing-the-Paywalls","level":2},{"type":"video","identifier":"PaidViews"},{"type":"orderedList","items":[{"content":[{"type":"paragraph","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":". For example:"}]},{"type":"codeListing","syntax":"swift","code":["\/\/ opens paywall if user has not purchased, else works like a normal (stylable) button","PaidFeatureButton(\"Export\", systemImage: \"square.and.arrow.up\") {"," \/\/ your export logic – no check for a paid tier needed, only called if already purchased ","}","","\/\/ this one behaves exactly the same as the one above, but gives you more flexibility to change the unlocked\/locked views","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":"paragraph","inlineContent":[{"text":"Note that 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":"). This leads to a default behavior of unlocking the feature only if tier 1 is purchased and showing 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"}]}]},{"content":[{"inlineContent":[{"text":"Alternatively, if you want to control the presentation of the paywall manually, you can add the ","type":"text"},{"code":".paywall(isPresented:)","type":"codeVoice"},{"text":" modifier to your custom views where needed. For example:","type":"text"}],"type":"paragraph"},{"syntax":"swift","type":"codeListing","code":["struct MyView: View {"," @State var showPaywall: Bool = false",""," var body: some View {"," Button(\"Unlock Pro\") {"," self.showPaywall = true"," }"," .paywall(isPresent: self.$showPaywall)"," }","}"]},{"inlineContent":[{"type":"text","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":"codeVoice","code":"FreemiumKit"},{"type":"text","text":" object as an "},{"type":"codeVoice","code":"@EnvironmentObject"},{"type":"text","text":" and call "},{"type":"codeVoice","code":".purchasedTier"},{"type":"text","text":" on it like so:"}],"type":"paragraph"},{"syntax":"swift","type":"codeListing","code":["struct MyView: View {"," @EnvironmentObject var freemiumKit: FreemiumKit"," @State var showPaywall: Bool = false",""," var body: some View {"," if self.freemiumKit.purchasedTier == nil {"," Button(\"Unlock Pro\") {"," self.showPaywall = true"," }"," .paywall(isPresent: self.$showPaywall)"," }"," }","}"]}]},{"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:"}]},{"type":"codeListing","code":["PaidStatusView(style: .plain)","PaidStatusView(style: .decorative(icon: .laurel))"],"syntax":"swift"},{"type":"paragraph","inlineContent":[{"type":"text","text":"\/\/ TODO: add screenshot of both styles"}]},{"type":"paragraph","inlineContent":[{"text":"The ","type":"text"},{"type":"codeVoice","code":".decorative"},{"text":" style has multiple ","type":"text"},{"type":"codeVoice","code":"icon"},{"text":" parameter options and also accepts optional ","type":"text"},{"type":"codeVoice","code":"foregroundColor"},{"text":" and ","type":"text"},{"type":"codeVoice","code":"backgroundColor"},{"text":" parameters if you need to adjust the defaults. Note that the ","type":"text"},{"type":"codeVoice","code":"PaidStatusView"},{"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":"heading","text":"SwiftUI Previews","anchor":"SwiftUI-Previews","level":2},{"type":"paragraph","inlineContent":[{"text":"For SwiftUI previews to work where you make use of the built-in views or modifier, add a call to ","type":"text"},{"code":".environmentObject(FreemiumKit.preview)","type":"codeVoice"},{"text":" in your preview code like so:","type":"text"}]},{"type":"codeListing","code":["#Preview {"," YourView()"," .environmentObject(FreemiumKit.preview)","}"],"syntax":"swift"},{"type":"paragraph","inlineContent":[{"text":"If you want to simulate a specific paid state in your previews, you can call the ","type":"text"},{"type":"codeVoice","code":"withDebugOverrides(purchasedTier:)"},{"text":" function on ","type":"text"},{"type":"codeVoice","code":"FreemiumKit.preview"},{"text":" and set your desired tier (set ","type":"text"},{"type":"codeVoice","code":"1"},{"text":" for full access). The default ","type":"text"},{"type":"codeVoice","code":"FreemiumKit.preview"},{"text":" shows in the “nothing purchased” state, showcasing how things will look from a Free users perspective. For example:","type":"text"}]},{"type":"codeListing","code":["#Preview(\"Full Access\") {"," YourView()"," .environmentObject(FreemiumKit.preview.withDebugOverrides(purchasedTier: 1))","}"],"syntax":"swift"},{"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,"identifier":"mailto:freemiumkit@fline.dev","type":"reference"},{"type":"text","text":"."}]},{"type":"heading","text":"Legal","anchor":"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"}],"sections":[],"schemaVersion":{"minor":3,"major":0,"patch":0},"metadata":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"roleHeading":"FreemiumKit","title":"SDK Setup Guide","role":"article"},"references":{"mailto:freemiumkit@fline.dev":{"title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"type":"link","url":"mailto:freemiumkit@fline.dev"},"PaidViews-Poster":{"type":"image","identifier":"PaidViews-Poster","variants":[{"traits":["1x","light"],"url":"\/images\/PaidViews-Poster.jpeg"}],"alt":null},"PaidViews":{"type":"video","identifier":"PaidViews","variants":[{"url":"\/videos\/PaidViews.mp4","traits":["1x","light"]}],"alt":null,"poster":"PaidViews-Poster"},"doc://FreemiumKit/documentation/Index":{"title":"FreemiumKit","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"}],"kind":"article","type":"topic","url":"\/documentation\/index","role":"collection","identifier":"doc:\/\/FreemiumKit\/documentation\/Index","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"kind":"article","type":"topic","url":"\/documentation\/freemiumkit\/faqs","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"FreemiumKit.png":{"type":"image","identifier":"FreemiumKit.png","alt":null,"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}]},"https://www.fline.dev/imprint/":{"type":"link","identifier":"https:\/\/www.fline.dev\/imprint\/","title":"Imprint","url":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}]}}} \ No newline at end of file +{"schemaVersion":{"patch":0,"major":0,"minor":3},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","interfaceLanguage":"swift"},"primaryContentSections":[{"content":[{"text":"Adding the SDK","anchor":"Adding-the-SDK","type":"heading","level":2},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"text":"Open your app project in Xcode.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"In the “File” menu select “Add Package Dependencies…”"}]},{"type":"paragraph","inlineContent":[{"text":"\/\/ TODO: add screenshot","type":"text"}]}]},{"content":[{"inlineContent":[{"text":"Paste this to the top right text field and press “Add Package”:","type":"text"}],"type":"paragraph"},{"code":["https:\/\/github.com\/FlineDev\/FreemiumKit.git"],"syntax":null,"type":"codeListing"},{"type":"aside","style":"warning","name":"Warning","content":[{"inlineContent":[{"type":"text","text":"During the current Beta phase, you need to specify the "},{"type":"codeVoice","code":"main"},{"type":"text","text":" branch for it to work."}],"type":"paragraph"}]},{"inlineContent":[{"text":"\/\/ TODO: add screenshot","type":"text"}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Select your app target (if not already selected) and confirm by pressing “Add Package”"}]},{"type":"paragraph","inlineContent":[{"text":"\/\/ TODO: add screenshot","type":"text"}]}]}],"type":"orderedList"},{"text":"Configuring the SDK","anchor":"Configuring-the-SDK","type":"heading","level":2},{"name":"Tip","content":[{"inlineContent":[{"text":"Don’t forget to ","type":"text"},{"code":"import FreemiumKit","type":"codeVoice"},{"text":" for any of the below calls to build.","type":"text"}],"type":"paragraph"}],"type":"aside","style":"tip"},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Make sure your app’s Asset Catalog contains the "},{"type":"codeVoice","code":"FreemiumKit"},{"type":"text","text":" data set from the “Setup” tab for your app in FreemiumKit. If it doesn’t, drag & drop it from the Setup tab now."}]}]},{"content":[{"inlineContent":[{"type":"text","text":"Add a call to "},{"type":"codeVoice","code":".environmentObject(FreemiumKit.shared)"},{"type":"text","text":" to every scene in the app entry point. For example:"}],"type":"paragraph"},{"syntax":"swift","code":["@main","struct MyApp: App {"," var body: some Scene {"," WindowGroup {"," MainView()"," }"," .environmentObject(FreemiumKit.shared)"," }","}"],"type":"codeListing"}]}],"type":"orderedList"},{"text":"Showing the Paywalls","anchor":"Showing-the-Paywalls","type":"heading","level":2},{"identifier":"PaidViews","type":"video"},{"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 "},{"type":"codeVoice","code":"PaidFeatureButton"},{"type":"text","text":" or "},{"type":"codeVoice","code":"PaidFeatureView"},{"type":"text","text":". For example:"}],"type":"paragraph"},{"syntax":"swift","code":["\/\/ opens paywall if user has not purchased, else works like a normal (stylable) button","PaidFeatureButton(\"Export\", systemImage: \"square.and.arrow.up\") {"," \/\/ your export logic – no check for a paid tier needed, only called if already purchased ","}","","\/\/ this one behaves exactly the same as the one above, but gives you more flexibility to change the unlocked\/locked views","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":[{"type":"text","text":"Note that both "},{"code":"PaidFeatureButton","type":"codeVoice"},{"type":"text","text":" and "},{"code":"PaidFeatureView","type":"codeVoice"},{"type":"text","text":" accept an "},{"code":"unlocksAtTier","type":"codeVoice"},{"type":"text","text":" parameter of type "},{"code":"Int","type":"codeVoice"},{"type":"text","text":" (default: "},{"code":"1","type":"codeVoice"},{"type":"text","text":") and a "},{"code":"showPaywallOnPressIfLocked","type":"codeVoice"},{"type":"text","text":" parameter of type "},{"code":"Bool","type":"codeVoice"},{"type":"text","text":" (default: "},{"code":"true","type":"codeVoice"},{"type":"text","text":"). This leads to a default behavior of unlocking the feature only if tier 1 is purchased and showing a paywall on press if tier 1 is not yet purchased. If "},{"code":"showPaywallOnPressIfLocked","type":"codeVoice"},{"type":"text","text":" is set to "},{"code":"false","type":"codeVoice"},{"type":"text","text":", the locked view will not have any automatic interaction, just rendering locked view state as-is without any added behavior."}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"text":"Alternatively, if you want to control the presentation of the paywall manually, you can add the ","type":"text"},{"code":".paywall(isPresented:)","type":"codeVoice"},{"text":" modifier to your custom views where needed. For example:","type":"text"}]},{"code":["struct MyView: View {"," @State var showPaywall: Bool = false",""," var body: some View {"," Button(\"Unlock Pro\") {"," self.showPaywall = true"," }"," .paywall(isPresent: self.$showPaywall)"," }","}"],"syntax":"swift","type":"codeListing"},{"type":"paragraph","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":" on it like so:","type":"text"}]},{"code":["struct MyView: View {"," @EnvironmentObject var freemiumKit: FreemiumKit"," @State var showPaywall: Bool = false",""," var body: some View {"," if self.freemiumKit.purchasedTier == nil {"," Button(\"Unlock Pro\") {"," self.showPaywall = true"," }"," .paywall(isPresent: self.$showPaywall)"," }"," }","}"],"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":"paragraph","inlineContent":[{"text":"\/\/ TODO: add screenshot of both styles","type":"text"}]},{"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":"orderedList"},{"text":"SwiftUI Previews","anchor":"SwiftUI-Previews","type":"heading","level":2},{"inlineContent":[{"text":"For SwiftUI previews to work where you make use of the built-in views or modifier, add a call to ","type":"text"},{"type":"codeVoice","code":".environmentObject(FreemiumKit.preview)"},{"text":" in your preview code like so:","type":"text"}],"type":"paragraph"},{"syntax":"swift","type":"codeListing","code":["#Preview {"," YourView()"," .environmentObject(FreemiumKit.preview)","}"]},{"inlineContent":[{"type":"text","text":"If you want to simulate a specific paid state in your previews, you can call the "},{"type":"codeVoice","code":"withDebugOverrides(purchasedTier:)"},{"type":"text","text":" function on "},{"type":"codeVoice","code":"FreemiumKit.preview"},{"type":"text","text":" and set your desired tier (set "},{"type":"codeVoice","code":"1"},{"type":"text","text":" for full access). The default "},{"type":"codeVoice","code":"FreemiumKit.preview"},{"type":"text","text":" shows in the “nothing purchased” state, showcasing how things will look from a Free users perspective. For example:"}],"type":"paragraph"},{"syntax":"swift","type":"codeListing","code":["#Preview(\"Full Access\") {"," YourView()"," .environmentObject(FreemiumKit.preview.withDebugOverrides(purchasedTier: 1))","}"]},{"text":"Contact","anchor":"Contact","type":"heading","level":2},{"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","anchor":"Legal","type":"heading","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":" "},{"isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference"}],"type":"small"}],"kind":"content"}],"metadata":{"title":"SDK Setup Guide","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"role":"article","roleHeading":"FreemiumKit"},"abstract":[{"type":"text","text":"Learn how to set up your app for our paywalls and live push notifications."}],"hierarchy":{"paths":[["doc:\/\/FreemiumKit\/documentation\/Index"]]},"seeAlsoSections":[{"generated":true,"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]}],"sections":[],"kind":"article","references":{"FreemiumKit.png":{"type":"image","variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}],"alt":null,"identifier":"FreemiumKit.png"},"PaidViews":{"type":"video","variants":[{"traits":["1x","light"],"url":"\/videos\/PaidViews.mp4"}],"alt":null,"identifier":"PaidViews","poster":"PaidViews-Poster"},"https://www.fline.dev/imprint/":{"type":"link","title":"Imprint","titleInlineContent":[{"text":"Imprint","type":"text"}],"identifier":"https:\/\/www.fline.dev\/imprint\/","url":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"type":"topic","title":"FAQs","kind":"article","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","url":"\/documentation\/freemiumkit\/faqs","role":"article","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"PaidViews-Poster":{"type":"image","variants":[{"url":"\/images\/PaidViews-Poster.jpeg","traits":["1x","light"]}],"alt":null,"identifier":"PaidViews-Poster"},"mailto:freemiumkit@fline.dev":{"identifier":"mailto:freemiumkit@fline.dev","type":"link","title":"freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"text":"freemiumkit@fline.dev","type":"text"}]},"doc://FreemiumKit/documentation/Index":{"images":[{"type":"icon","identifier":"FreemiumKit.png"}],"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."}],"type":"topic","role":"collection","title":"FreemiumKit","url":"\/documentation\/index","kind":"article"}}} \ No newline at end of file diff --git a/data/documentation/index.json b/data/documentation/index.json index afd05c5..9c51bcc 100644 --- a/data/documentation/index.json +++ b/data/documentation/index.json @@ -1 +1 @@ -{"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."}],"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]}],"sampleCodeDownload":{"action":{"type":"reference","identifier":"mailto:beta@fline.dev?subject=FreemiumKit","overridingTitle":"📧 Register for Beta","isActive":true},"kind":"sampleDownload"},"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/Index","interfaceLanguage":"swift"},"metadata":{"title":"FreemiumKit","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"roleHeading":"Welcome to","role":"collection"},"hierarchy":{"paths":[[]]},"sections":[],"kind":"article","primaryContentSections":[{"content":[{"type":"heading","anchor":"Overview","level":2,"text":"Overview"},{"type":"paragraph","inlineContent":[{"identifier":"FreemiumKit-Lettering","type":"image"}]},{"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":"heading","anchor":"Key-Features","level":2,"text":"Key Features"},{"type":"heading","anchor":"One-Click-Creation-of-MonthlyYearlyLifetime","level":3,"text":"One-Click Creation of Monthly\/Yearly\/Lifetime"},{"items":[{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Connect API Integration"}]},{"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."}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Automatic Pricing","type":"text"}]},{"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":[{"type":"text","text":"Combined Review Note"}]},{"type":"text","text":": The review note updates for all of Monthly\/Yearly\/Lifetime at once."}],"type":"paragraph"}]}],"type":"unorderedList"},{"type":"video","identifier":"QuickSetup"},{"type":"heading","anchor":"Configurable-Paywalls","level":3,"text":"Configurable Paywalls"},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Paywalls","type":"text"}],"type":"strong"},{"text":": Our SDK contains beautiful & localized paywall designs for all Apple platforms.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Remote Config"}],"type":"strong"},{"text":": Paywalls update immediately so you don’t need to wait a new app version.","type":"text"}]}]},{"content":[{"inlineContent":[{"inlineContent":[{"text":"A\/B Testing","type":"text"}],"type":"strong"},{"type":"text","text":": Improve your conversion by comparing up to 4 designs in parallel."}],"type":"paragraph"}]}],"type":"unorderedList"},{"type":"video","identifier":"Paywalls"},{"type":"heading","anchor":"Flexible-Pricing-Adjustments","level":3,"text":"Flexible Pricing Adjustments"},{"items":[{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Purchase Power Parity:","type":"text"}]},{"type":"text","text":" Adjust prices based on country to maximize revenue & accessibility."}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"A\/B Testing:","type":"text"}]},{"text":" Automatically creates subscription groups so you can test different prices!","type":"text"}]}]}],"type":"unorderedList"},{"numberOfColumns":3,"type":"row","columns":[{"size":2,"content":[{"text":"Native Experience","anchor":"Native-Experience","type":"heading","level":3},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Full Apple Platforms Support:"}]},{"type":"text","text":" Seamlessly integrate the SDK with iOS, macOS, visionOS, and tvOS."}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Live Purchase Push Notifications:","type":"text"}]},{"type":"text","text":" Receive real-time notifications for user purchases to stay on top of your app’s performance."}]}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Privacy by Design:"}],"type":"strong"},{"text":" The SDK avoids sending personal user data to any servers. And we don’t keep your purchase data on our servers.","type":"text"}]}]}]}]},{"size":1,"content":[{"type":"paragraph","inlineContent":[{"type":"image","identifier":"PushNotifications"}]}]}]},{"type":"heading","anchor":"FreemiumKit-vs-RevenueCat","level":2,"text":"FreemiumKit vs. RevenueCat"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Many people in our community love 😻 RevenueCat, so you might wonder how FreemiumKit compares. The following table should explain why I’ve built FreemiumKit in the first place:"}]},{"rows":[[[{"type":"paragraph","inlineContent":[{"type":"text","text":"Feature"}]}],[{"type":"paragraph","inlineContent":[{"text":"FreemiumKit","type":"text"}]}],[{"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":[{"inlineContent":[{"type":"text","text":"Paywalls"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (on all Apple Platforms, even visionOS!)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"🚧 (only iOS)"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Built-In Localization"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (paywalls localized to ~40 languages)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Real-Time Notifications"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (push notifications sent to native iPhone app)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ (only webhooks)"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Skip Renewal Notifications","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (reports purchases & ","type":"text"},{"type":"strong","inlineContent":[{"type":"text","text":"new"}]},{"text":" subscriptions)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Verified Transactions","type":"text"}]}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (using StoreKit 2)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"type":"text","text":"A\/B Testing"}],"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":[{"text":"Native App","type":"text"}]}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (on all Apple Platforms)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"❌"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Purchases Dashboard","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (in native app)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (only Web)","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Purchase Power Parity"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (adjustable slider to mix with Apple prices)"}]}],[{"type":"paragraph","inlineContent":[{"text":"❌","type":"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":[{"text":"✅ (higher price)","type":"text"}]}]],[[{"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":[{"type":"text","text":"✅ (including visionOS)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (including visionOS)"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Supports Android & Web","type":"text"}]}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Pricing","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"Freemium, paid tier "},{"type":"strong","inlineContent":[{"type":"text","text":"below 1%"}]},{"type":"text","text":" of Revenue"}]}],[{"type":"paragraph","inlineContent":[{"text":"Freemium, paid tier exactly 1% of Revenue","type":"text"}]}]]],"type":"table","header":"row"},{"type":"aside","name":"Tip","content":[{"inlineContent":[{"text":"If you need RevenueCat for combined stats (with Android) or for their 3rd-party integrations, you can set RevenueCat to Observer mode and still use FreemiumKit for paywalls, live notifications etc.","type":"text"}],"type":"paragraph"}],"style":"tip"},{"type":"heading","anchor":"Pricing","level":2,"text":"Pricing"},{"type":"paragraph","inlineContent":[{"text":"FreemiumKit is ","type":"text"},{"type":"strong","inlineContent":[{"type":"text","text":"completely free to use"}]},{"text":" at the moment for ","type":"text"},{"type":"emphasis","inlineContent":[{"type":"text","text":"everyone"}]},{"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 proceeds. The full planned pricing table:"}]},{"numberOfColumns":2,"type":"row","columns":[{"content":[{"type":"table","rows":[[[{"inlineContent":[{"text":"Monthly Income","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"text":"Cost","type":"text"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"text":"$0 - $500","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"Free","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$500 - $1k"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$5\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"text":"$1k - $2k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$10\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"text":"$2k - $4.5k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"$20\/mo","type":"text"}]}]],[[{"inlineContent":[{"text":"$4.5k - $7.5k","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$45\/mo"}],"type":"paragraph"}]]],"header":"row"}],"size":1},{"content":[{"type":"table","header":"row","rows":[[[{"inlineContent":[{"text":"Monthly Income","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"Cost"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"text","text":"$7.5k - $15k"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$75\/mo"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$15k - $30k"}]}],[{"type":"paragraph","inlineContent":[{"text":"$150\/mo","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"text":"$30k - $50k","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$300\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$50k - $100k"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$500\/mo"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$100k+"}]}],[{"type":"paragraph","inlineContent":[{"text":"$1,000\/mo","type":"text"}]}]]]}],"size":1}]},{"type":"heading","anchor":"Get-Started","level":2,"text":"Get Started"},{"type":"paragraph","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","isActive":true,"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&mt=8&ct=freemiumkit.app"},{"type":"text","text":" (Coming Soon)"}]},{"type":"heading","anchor":"SDK-Setup-Guide","level":2,"text":"SDK Setup Guide"},{"type":"paragraph","inlineContent":[{"text":"For a detailed walkthrough on how to integrate the FreemiumKit SDK into your app, check out our ","type":"text"},{"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","isActive":true,"overridingTitle":"SDK Setup Guide","overridingTitleInlineContent":[{"type":"text","text":"SDK Setup Guide"}],"type":"reference"},{"text":".","type":"text"}]},{"type":"heading","anchor":"Testimonials","level":2,"text":"Testimonials"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Here’s what customers are saying about FreemiumKit:"}]},{"numberOfColumns":2,"type":"row","columns":[{"size":1,"content":[{"inlineContent":[],"type":"paragraph"},{"name":"Jane Doe, Developer","type":"aside","content":[{"inlineContent":[{"text":"FreemiumKit has transformed the way we handle in-app purchases. The setup was incredibly easy, and the features are exactly what we needed!","type":"text"}],"type":"paragraph"}],"style":"note"}]},{"size":1,"content":[{"type":"paragraph","inlineContent":[]},{"type":"aside","name":"Jane Doe, Developer","style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"FreemiumKit has transformed the way we handle in-app purchases. The setup was incredibly easy, and the features are exactly what we needed!"}]}]}]}]},{"type":"heading","anchor":"FAQ","level":2,"text":"FAQ"},{"type":"paragraph","inlineContent":[{"text":"The top 5 most frequently asked questions:","type":"text"}]},{"items":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"],"type":"links","style":"list"},{"type":"paragraph","inlineContent":[{"text":"Visit the ","type":"text"},{"overridingTitleInlineContent":[{"type":"text","text":"Frequently Asked Questions"}],"overridingTitle":"Frequently Asked Questions","isActive":true,"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","type":"reference"},{"text":" page for the full list of questions & answers.","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"},{"isActive":true,"identifier":"mailto:freemiumkit@fline.dev","type":"reference"},{"text":".","type":"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":" "},{"identifier":"https:\/\/www.fline.dev\/imprint\/","type":"reference","isActive":true}]}],"kind":"content"}],"references":{"mailto:beta@fline.dev?subject=FreemiumKit":{"url":"mailto:beta@fline.dev?subject=FreemiumKit","type":"download","checksum":null,"identifier":"mailto:beta@fline.dev?subject=FreemiumKit"},"FreemiumKit-Lettering":{"type":"image","alt":"FreemiumKit Logo","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit-Lettering.png"}],"identifier":"FreemiumKit-Lettering"},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"type":"topic","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","title":"SDK Setup Guide","kind":"article","role":"article","url":"\/documentation\/freemiumkit\/setupguide","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"FreemiumKit.png":{"type":"image","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}],"identifier":"FreemiumKit.png"},"PushNotifications":{"type":"image","alt":"Push Notifications","variants":[{"traits":["1x","light"],"url":"\/images\/PushNotifications.jpeg"}],"identifier":"PushNotifications"},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Privacy":{"type":"topic","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","title":"How does FreemiumKit handle User Privacy?","kind":"article","role":"sampleCode","url":"\/documentation\/freemiumkit\/faq-privacy"},"QuickSetup":{"type":"video","alt":null,"poster":"QuickSetup-Poster","variants":[{"traits":["1x","light"],"url":"\/videos\/QuickSetup.mp4"}],"identifier":"QuickSetup"},"QuickSetup-Poster":{"type":"image","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/QuickSetup-Poster.jpeg"}],"identifier":"QuickSetup-Poster"},"https://www.fline.dev/imprint/":{"url":"https:\/\/www.fline.dev\/imprint\/","type":"link","title":"Imprint","titleInlineContent":[{"type":"text","text":"Imprint"}],"identifier":"https:\/\/www.fline.dev\/imprint\/"},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"title":"FAQs","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"kind":"article","type":"topic","url":"\/documentation\/freemiumkit\/faqs","role":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"title":"How does FreemiumKit work? Can I trust it?","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","type":"topic","url":"\/documentation\/freemiumkit\/faq-howitworks","role":"sampleCode","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks"},"Paywalls-Poster":{"type":"image","alt":null,"variants":[{"traits":["1x","light"],"url":"\/images\/Paywalls-Poster.jpeg"}],"identifier":"Paywalls-Poster"},"https://apps.apple.com/app/apple-store/id6502914189?pt=549314&mt=8&ct=freemiumkit.app":{"url":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&mt=8&ct=freemiumkit.app","type":"link","title":"Download Now","titleInlineContent":[{"type":"text","text":"Download Now"}],"identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&mt=8&ct=freemiumkit.app"},"mailto:freemiumkit@fline.dev":{"url":"mailto:freemiumkit@fline.dev","type":"link","title":"freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}],"identifier":"mailto:freemiumkit@fline.dev"},"Paywalls":{"type":"video","identifier":"Paywalls","alt":null,"poster":"Paywalls-Poster","variants":[{"traits":["1x","light"],"url":"\/videos\/Paywalls.mp4"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"kind":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","title":"Does FreemiumKit validate purchases?","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","role":"sampleCode","type":"topic"}}} \ No newline at end of file +{"topicSections":[{"identifiers":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs"]}],"identifier":{"url":"doc:\/\/FreemiumKit\/documentation\/Index","interfaceLanguage":"swift"},"schemaVersion":{"minor":3,"major":0,"patch":0},"kind":"article","hierarchy":{"paths":[[]]},"sections":[],"metadata":{"role":"collection","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"roleHeading":"Welcome to","title":"FreemiumKit"},"sampleCodeDownload":{"action":{"type":"reference","isActive":true,"identifier":"mailto:beta@fline.dev?subject=FreemiumKit&body=Register","overridingTitle":"📧 Register for Beta"},"kind":"sampleDownload"},"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"}],"primaryContentSections":[{"content":[{"text":"Overview","anchor":"Overview","level":2,"type":"heading"},{"type":"paragraph","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"}]},{"text":"Key Features","anchor":"Key-Features","level":2,"type":"heading"},{"text":"One-Click Creation of Monthly\/Yearly\/Lifetime","anchor":"One-Click-Creation-of-MonthlyYearlyLifetime","level":3,"type":"heading"},{"type":"unorderedList","items":[{"content":[{"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."}],"type":"paragraph"}]},{"content":[{"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"}],"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"},{"text":"Configurable Paywalls","anchor":"Configurable-Paywalls","level":3,"type":"heading"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Paywalls"}]},{"type":"text","text":": Our SDK contains beautiful & localized paywall designs for all Apple platforms."}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Remote Config","type":"text"}],"type":"strong"},{"text":": Paywalls update immediately so you don’t need to wait a new app version.","type":"text"}]}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"A\/B Testing","type":"text"}]},{"text":": Improve your conversion by comparing up to 4 designs in parallel.","type":"text"}]}]}]},{"identifier":"Paywalls","type":"video"},{"text":"Flexible Pricing Adjustments","anchor":"Flexible-Pricing-Adjustments","level":3,"type":"heading"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"type":"strong","inlineContent":[{"text":"Purchase Power Parity:","type":"text"}]},{"type":"text","text":" Adjust prices based on country to maximize revenue & accessibility."}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"A\/B Testing:"}]},{"type":"text","text":" Automatically creates subscription groups so you can test different prices!"}]}]}]},{"numberOfColumns":3,"type":"row","columns":[{"content":[{"type":"heading","anchor":"Native-Experience","level":3,"text":"Native Experience"},{"type":"unorderedList","items":[{"content":[{"inlineContent":[{"inlineContent":[{"type":"text","text":"Full Apple Platforms Support:"}],"type":"strong"},{"type":"text","text":" Seamlessly integrate the SDK with iOS, macOS, visionOS, and tvOS."}],"type":"paragraph"}]},{"content":[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Live Purchase Push Notifications:"}]},{"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":[{"text":"Privacy by Design:","type":"text"}]},{"type":"text","text":" The SDK avoids sending personal user data to any servers. And we don’t keep your purchase data on our servers."}]}]}]}],"size":2},{"content":[{"type":"paragraph","inlineContent":[{"identifier":"PushNotifications","type":"image"}]}],"size":1}]},{"text":"FreemiumKit vs. RevenueCat","anchor":"FreemiumKit-vs-RevenueCat","level":2,"type":"heading"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Many people in our community love 😻 RevenueCat, so you might wonder how FreemiumKit compares. The following table should explain why I’ve built FreemiumKit in the first place:"}]},{"header":"row","type":"table","rows":[[[{"inlineContent":[{"text":"Feature","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"FreemiumKit"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"RevenueCat"}],"type":"paragraph"}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Quick Setup"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (automated creation of products on Connect)"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}]],[[{"inlineContent":[{"inlineContent":[{"text":"Paywalls","type":"text"}],"type":"strong"}],"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":[{"inlineContent":[{"text":"Built-In Localization","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (paywalls localized to ~40 languages)"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Real-Time Notifications"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (push notifications sent to native iPhone app)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"❌ (only webhooks)","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"text":"Skip Renewal Notifications","type":"text"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (reports purchases & "},{"inlineContent":[{"type":"text","text":"new"}],"type":"strong"},{"type":"text","text":" subscriptions)"}]}],[{"type":"paragraph","inlineContent":[{"text":"❌","type":"text"}]}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Verified Transactions"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"✅ (using StoreKit 2)"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","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":[{"text":"Native App","type":"text"}]}],"type":"paragraph"}],[{"inlineContent":[{"text":"✅ (on all Apple Platforms)","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"text":"❌","type":"text"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Purchases Dashboard"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (in native app)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (only Web)","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Purchase Power Parity"}]}]}],[{"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":"User Privacy"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (no personal data sent, server temporary storage)","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"❌ (lots of data)"}]}]],[[{"type":"paragraph","inlineContent":[{"inlineContent":[{"type":"text","text":"Supports Apple Platforms"}],"type":"strong"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅ (including visionOS)"}]}],[{"type":"paragraph","inlineContent":[{"text":"✅ (including visionOS)","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"strong","inlineContent":[{"text":"Supports Android & Web","type":"text"}]}]}],[{"type":"paragraph","inlineContent":[{"text":"❌","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"✅"}]}]],[[{"inlineContent":[{"type":"strong","inlineContent":[{"type":"text","text":"Pricing"}]}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"Freemium, paid tier "},{"type":"strong","inlineContent":[{"text":"below 1%","type":"text"}]},{"type":"text","text":" of Revenue"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"Freemium, paid tier exactly 1% of Revenue"}],"type":"paragraph"}]]]},{"content":[{"type":"paragraph","inlineContent":[{"text":"If you need RevenueCat for combined stats (with Android) or for their 3rd-party integrations, you can set RevenueCat to Observer mode and still use FreemiumKit for paywalls, live notifications etc.","type":"text"}]}],"type":"aside","name":"Tip","style":"tip"},{"text":"Pricing","anchor":"Pricing","level":2,"type":"heading"},{"type":"paragraph","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":[{"type":"text","text":"everyone"}]},{"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 proceeds. The full planned pricing table:","type":"text"}]},{"numberOfColumns":2,"type":"row","columns":[{"content":[{"type":"table","header":"row","rows":[[[{"inlineContent":[{"text":"Monthly Income","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"Cost"}],"type":"paragraph"}]],[[{"type":"paragraph","inlineContent":[{"text":"$0 - $500","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"Free","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$500 - $1k"}]}],[{"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":[{"text":"$20\/mo","type":"text"}]}]],[[{"inlineContent":[{"text":"$4.5k - $7.5k","type":"text"}],"type":"paragraph"}],[{"inlineContent":[{"type":"text","text":"$45\/mo"}],"type":"paragraph"}]]]}],"size":1},{"content":[{"header":"row","rows":[[[{"type":"paragraph","inlineContent":[{"text":"Monthly Income","type":"text"}]}],[{"type":"paragraph","inlineContent":[{"text":"Cost","type":"text"}]}]],[[{"type":"paragraph","inlineContent":[{"type":"text","text":"$7.5k - $15k"}]}],[{"type":"paragraph","inlineContent":[{"type":"text","text":"$75\/mo"}]}]],[[{"inlineContent":[{"type":"text","text":"$15k - $30k"}],"type":"paragraph"}],[{"inlineContent":[{"text":"$150\/mo","type":"text"}],"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":[{"type":"text","text":"$1,000\/mo"}],"type":"paragraph"}]]],"type":"table"}],"size":1}]},{"text":"Get Started","anchor":"Get-Started","level":2,"type":"heading"},{"type":"paragraph","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&mt=8&ct=freemiumkit.app","type":"reference","isActive":true},{"text":" (Coming Soon)","type":"text"}]},{"text":"SDK Setup Guide","anchor":"SDK-Setup-Guide","level":2,"type":"heading"},{"type":"paragraph","inlineContent":[{"type":"text","text":"For a detailed walkthrough on how to integrate the FreemiumKit SDK into your app, check out our "},{"type":"reference","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","overridingTitleInlineContent":[{"text":"SDK Setup Guide","type":"text"}],"isActive":true,"overridingTitle":"SDK Setup Guide"},{"type":"text","text":"."}]},{"text":"Testimonials","anchor":"Testimonials","level":2,"type":"heading"},{"type":"paragraph","inlineContent":[{"text":"Here’s what customers are saying about FreemiumKit:","type":"text"}]},{"numberOfColumns":2,"type":"row","columns":[{"size":1,"content":[{"inlineContent":[],"type":"paragraph"},{"name":"Jane Doe, Developer","style":"note","type":"aside","content":[{"inlineContent":[{"type":"text","text":"FreemiumKit has transformed the way we handle in-app purchases. The setup was incredibly easy, and the features are exactly what we needed!"}],"type":"paragraph"}]}]},{"size":1,"content":[{"type":"paragraph","inlineContent":[]},{"type":"aside","style":"note","name":"Jane Doe, Developer","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"FreemiumKit has transformed the way we handle in-app purchases. The setup was incredibly easy, and the features are exactly what we needed!"}]}]}]}]},{"text":"FAQ","anchor":"FAQ","level":2,"type":"heading"},{"type":"paragraph","inlineContent":[{"type":"text","text":"The top 5 most frequently asked questions:"}]},{"type":"links","items":["doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation"],"style":"list"},{"type":"paragraph","inlineContent":[{"text":"Visit the ","type":"text"},{"overridingTitle":"Frequently Asked Questions","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","type":"reference","isActive":true,"overridingTitleInlineContent":[{"type":"text","text":"Frequently Asked Questions"}]},{"text":" page for the full list of questions & answers.","type":"text"}]},{"text":"Contact","anchor":"Contact","level":2,"type":"heading"},{"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":"."}]},{"text":"Legal","anchor":"Legal","level":2,"type":"heading"},{"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","isActive":true,"identifier":"https:\/\/www.fline.dev\/imprint\/"}]}],"kind":"content"}],"references":{"doc://FreemiumKit/documentation/FreemiumKit/FAQ-HowItWorks":{"url":"\/documentation\/freemiumkit\/faq-howitworks","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"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-HowItWorks","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit work? Can I trust it?"},"mailto:beta@fline.dev?subject=FreemiumKit&body=Register":{"type":"download","checksum":null,"identifier":"mailto:beta@fline.dev?subject=FreemiumKit&body=Register","url":"mailto:beta@fline.dev?subject=FreemiumKit&body=Register"},"https://apps.apple.com/app/apple-store/id6502914189?pt=549314&mt=8&ct=freemiumkit.app":{"type":"link","title":"Download Now","identifier":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&mt=8&ct=freemiumkit.app","url":"https:\/\/apps.apple.com\/app\/apple-store\/id6502914189?pt=549314&mt=8&ct=freemiumkit.app","titleInlineContent":[{"type":"text","text":"Download Now"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQs":{"type":"topic","title":"FAQs","kind":"article","abstract":[{"text":"The most frequently asked questions about FreemiumKit.","type":"text"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQs","url":"\/documentation\/freemiumkit\/faqs","role":"article","images":[{"identifier":"FreemiumKit.png","type":"icon"}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-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."}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Privacy","role":"sampleCode","type":"topic","kind":"article","title":"How does FreemiumKit handle User Privacy?"},"PushNotifications":{"type":"image","identifier":"PushNotifications","alt":"Push Notifications","variants":[{"url":"\/images\/PushNotifications.jpeg","traits":["1x","light"]}]},"QuickSetup-Poster":{"type":"image","identifier":"QuickSetup-Poster","alt":null,"variants":[{"url":"\/images\/QuickSetup-Poster.jpeg","traits":["1x","light"]}]},"doc://FreemiumKit/documentation/FreemiumKit/FAQ-Validation":{"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!"}],"identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/FAQ-Validation","role":"sampleCode","type":"topic","kind":"article","title":"Does FreemiumKit validate purchases?"},"FreemiumKit.png":{"type":"image","identifier":"FreemiumKit.png","alt":null,"variants":[{"url":"\/images\/FreemiumKit.png","traits":["1x","light"]}]},"Paywalls":{"type":"video","poster":"Paywalls-Poster","identifier":"Paywalls","alt":null,"variants":[{"url":"\/videos\/Paywalls.mp4","traits":["1x","light"]}]},"mailto:freemiumkit@fline.dev":{"type":"link","title":"freemiumkit@fline.dev","identifier":"mailto:freemiumkit@fline.dev","url":"mailto:freemiumkit@fline.dev","titleInlineContent":[{"type":"text","text":"freemiumkit@fline.dev"}]},"FreemiumKit-Lettering":{"type":"image","identifier":"FreemiumKit-Lettering","alt":"FreemiumKit Logo","variants":[{"url":"\/images\/FreemiumKit-Lettering.png","traits":["1x","light"]}]},"Paywalls-Poster":{"type":"image","identifier":"Paywalls-Poster","alt":null,"variants":[{"url":"\/images\/Paywalls-Poster.jpeg","traits":["1x","light"]}]},"doc://FreemiumKit/documentation/FreemiumKit/SetupGuide":{"url":"\/documentation\/freemiumkit\/setupguide","kind":"article","identifier":"doc:\/\/FreemiumKit\/documentation\/FreemiumKit\/SetupGuide","title":"SDK Setup Guide","images":[{"type":"icon","identifier":"FreemiumKit.png"}],"type":"topic","role":"article","abstract":[{"text":"Learn how to set up your app for our paywalls and live push notifications.","type":"text"}]},"https://www.fline.dev/imprint/":{"type":"link","title":"Imprint","identifier":"https:\/\/www.fline.dev\/imprint\/","url":"https:\/\/www.fline.dev\/imprint\/","titleInlineContent":[{"type":"text","text":"Imprint"}]},"QuickSetup":{"type":"video","poster":"QuickSetup-Poster","identifier":"QuickSetup","alt":null,"variants":[{"url":"\/videos\/QuickSetup.mp4","traits":["1x","light"]}]}}} \ No newline at end of file diff --git a/index/index.json b/index/index.json index 185edbe..5fd9d54 100644 --- a/index/index.json +++ b/index/index.json @@ -1 +1 @@ -{"interfaceLanguages":{"swift":[{"path":"\/documentation\/freemiumkit","title":"FreemiumKit","type":"module"},{"children":[{"icon":"FreemiumKit.png","path":"\/documentation\/freemiumkit\/setupguide","title":"SDK Setup Guide","type":"article"},{"children":[{"path":"\/documentation\/freemiumkit\/faq-howitworks","title":"How does FreemiumKit work? Can I trust it?","type":"sampleCode"},{"path":"\/documentation\/freemiumkit\/faq-privacy","title":"How does FreemiumKit handle User Privacy?","type":"sampleCode"},{"path":"\/documentation\/freemiumkit\/faq-validation","title":"Does FreemiumKit validate purchases?","type":"sampleCode"}],"icon":"FreemiumKit.png","path":"\/documentation\/freemiumkit\/faqs","title":"FAQs","type":"article"}],"icon":"FreemiumKit.png","path":"\/documentation\/index","title":"FreemiumKit","type":"module"}]},"references":{"FreemiumKit.png":{"alt":null,"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]}},"schemaVersion":{"major":0,"minor":1,"patch":1}} \ No newline at end of file +{"interfaceLanguages":{"swift":[{"children":[{"icon":"FreemiumKit.png","path":"\/documentation\/freemiumkit\/setupguide","title":"SDK Setup Guide","type":"article"},{"children":[{"path":"\/documentation\/freemiumkit\/faq-howitworks","title":"How does FreemiumKit work? Can I trust it?","type":"sampleCode"},{"path":"\/documentation\/freemiumkit\/faq-privacy","title":"How does FreemiumKit handle User Privacy?","type":"sampleCode"},{"path":"\/documentation\/freemiumkit\/faq-validation","title":"Does FreemiumKit validate purchases?","type":"sampleCode"}],"icon":"FreemiumKit.png","path":"\/documentation\/freemiumkit\/faqs","title":"FAQs","type":"article"}],"icon":"FreemiumKit.png","path":"\/documentation\/index","title":"FreemiumKit","type":"module"},{"path":"\/documentation\/freemiumkit","title":"FreemiumKit","type":"module"}]},"references":{"FreemiumKit.png":{"alt":null,"identifier":"FreemiumKit.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/FreemiumKit.png"}]}},"schemaVersion":{"major":0,"minor":1,"patch":1}} \ No newline at end of file diff --git a/metadata.json b/metadata.json index abca03e..a0a00af 100644 --- a/metadata.json +++ b/metadata.json @@ -1 +1 @@ -{"bundleDisplayName":"FreemiumKit","schemaVersion":{"patch":0,"minor":1,"major":0},"bundleIdentifier":"FreemiumKit"} \ No newline at end of file +{"bundleIdentifier":"FreemiumKit","schemaVersion":{"major":0,"minor":1,"patch":0},"bundleDisplayName":"FreemiumKit"} \ No newline at end of file