StoreKit

RSS for tag

Support in-app purchases and interactions with the App Store using StoreKit.

Posts under StoreKit tag

200 Posts
Sort by:

Post

Replies

Boosts

Views

Activity

Impossible to proper test subscriptions in Testflight - time for Action @Apple
I'm not sure how we reached the point where we accepted the current situation of subscription testing in Testflight as the normal. It has been drama for years now. It's also super confusing and many people don't understand why/what is happening. Let me write down first what is happening, after that all the issues and potential solution will be clear. Production app Uses live appstore backend + your apple id that is signed in on the device Testflight app Uses sandbox appstore backend + your apple id that is signed in on the device Local / Xcode Uses sandbox appstore backend + your sandbox apple id if correctly set on your device (settings / appstore / sandbox account). The problem is you can only manage the following subscriptions Live appstore backend + live apple id Sandbox appstore backend + sandbox apple id We are missing the option to manage Sandbox appstore backend + live apple id -> the situation we deal with in testflight. So there is no way to manage your testflight subscriptions. Few potential solutions that apple should implement: We need an option within the Testflight app to Manage subscriptions, that should than open the live apple id on the sandbox backend. Or give developers the option to use the sandbox account for testflight as well, not only for developing locally. To test in testflight you basically have to wait for the subscription to expire, but they also recently changed the renewal rates. It used to be 5 minutes for a month, now its 1 day for a month, so you have to wait 12 days before your monthly sub on testflight is gone. So we cant manage testflight obtained subscriptions, we cant use API's to manage them, we cant change settings like renewal rates, they are totally useless. This is really not usable at all. The situation has been like this for years, and all of us seem to accept this as normal. But this is a horrible developer experience, and we have to launch apps in production that we can't even test properly, only locally (so we can't let our testers test). How is this acceptable @Apple?
0
0
66
10h
Promotional Offers not Working-"Offer Not Available"
When attempting to use apple promotional offers for subscriptions I consistently receive the popup that says "Offer Not Available" for both production and sandbox. Without offer code purchase working fine. I have verified the App Store Connect setup and client side code and even created new offer codes also, but I have hit a dead end. Error:- (Error Domain=SKErrorDomain Code=18 "(null)" UserInfo={NSUnderlyingError=0x280dbb0f0 {Error Domain=ASDServerErrorDomain Code=3904 "Offer Not Available" UserInfo={NSLocalizedFailureReason=Offer Not Available}}})
0
0
31
9h
Disappearing External link account entitlement
I've got a Flutter app that is a “reader” app. The External Link Account Entitlement has already been requested and granted. It is already added as an Additional Capability to the App ID. The com.apple.developer.storekit.external-link.account entitlement is already present in the .entitlements file. Also SKExternalLinkAccount key is added to the Info.plist file with the correct URL. ExternalLinkAccount.open() is invoked via a MethodChannel call handler and things work perfectly in debug mode. The modal appears as expected and opens the link in the external browser. Xcode archive is also sucessful and the entitlement seems to be in place when inspecting the app with: codesign -d --entitlements :- ./path/to/app But when trying to distribute the app via Xcode the entitlement disappears. Other entitlements are not affected by this issue, eg.: com.apple.developer.associated-domains for universal links. This happens with automatically managed singing and a manually selected provisioning profile as well. When inspecting the latter in Xcode the necessary capability and entitlement is included. But when distributing to App Store Connect the entitlement disappears with both recommended and custom settings. I ran flutter clean mulitple times. What am I missing here?
1
1
88
1d
"Trouble connecting consumable In-App Purchases (IAP) to App Store Connect"
I am developing an app with support for In-App Purchases (IAP) for consumable products using StoreKit. I have defined the products in ProductList.plist and Product.storekit, but I am unable to connect them correctly to App Store Connect. Here are the details: Products defined in ProductList.plist: Bolet Evento Vip: com.cover.boleto.vip Boleto Evento Básico: com.cover.boleto.basico Configuration in Product.storekit: The products have prices and basic configurations, but they do not seem to link properly in App Store Connect. Steps I have taken: Configured IAP simulation in Xcode. Attempted to register the products in App Store Connect. Issues I am facing: The products are not appearing in App Store Connect after configuration. My app cannot seem to fetch consumable products from App Store Connect. Question: What steps should I follow to correctly register consumable products in App Store Connect and connect the app with StoreKit for production? Any advice or guidance would be greatly appreciated. Thank you!
0
0
120
3d
Can users create their own subscription plans?
I'm considering developing an app where users can create their own subscription plans by freely setting their prices, similar to YouTube's membership feature. I understand that in-app purchases must be used to unlock features within the app. With that in mind, I searched for APIs to enable this functionality but couldn't find relevant information. When I contacted Apple directly, they mentioned that they couldn't provide specific answers unless the app is under review. If anyone has knowledge about the following points, I would greatly appreciate your response: Is it possible to implement a feature similar to YouTube's membership using in-app purchase APIs? If it's not feasible with in-app purchases, is it allowed to use external payment services like Stripe?
0
0
85
4d
StoreKitSubscriptionView presents an unfriendly message when network is unavailable
I have a rather simple StoreKitSubscriptionView for my app's single subscription. Question: Am I expected to write code to handle lack of network connectivity? When I run the app on development device, not using the local StoreKit configuration but rather the real app store, if the network is not available I get a not-user-friendly error message instead of the normal SubscriptionStoreView content. I'm uncertain if end-users actually see this. Maybe they see a more appropriate "Cannot connect to App Store, try later" message? Maybe I am supposed to check for network and not present the view if it is not available. I don't recall any mention of this in the WWDC video but I guess I should check again. Ideas anyone?
1
0
97
5d
App Review - nothing is happening when tapping purchase button
I am trying to upload my app to the app store, but app review says that nothing is happening when they click my "purchase" button for my subscription paywall. I have tested my subscription button process on my local device numerous times, with a sandbox account and never a problem. For context, I am using revenuecat to process my payments here. Any advice on testing IAP's, edge cases that could cause this problem, or anything that could help me solve this? Thank you!
1
0
157
6d
Introductory offer is not seen on system bottom sheet with Subscribe button.
I have a yearly_subscription subscription in my App Store Connect. I have added an introductory offer for this product - pay up front 6 month for different price. When I fetch products with try await Product.products(for: Set(identifiers)) I receive this product and introductory offer is present there. When I test with StoreKit Configuration and launch buy flow and system bottom sheet with Subscribe button is shown, I can see 6 month for different price offer there. However on TestFlight and on production system bottom sheet with Subscribe button does not contain this introductory offer. product.subscription.isEligibleForIntroOffer returns true. Also, if I set length of Introductory offer to 1 year, everything works correctly. What can be the reason for 6 month Introductory Offer not being shown on system bottom sheet?
0
0
157
1w
StoreKit Configuration Not Syncing to Xcode
Hello! I am attempting to add Subscriptions to an App that Is already published on the App Store. I cannot get Xcode to actually sync what is in my App Store Connect. When adding the Storekit configuration file, I go through the automatic linking process and select the proper bundleID. The configuration file says 'Synced @ [CurrentTime]' however there are no subscriptions listed in there. I have attempted deleting the file several times, creating a new subscription group. With no success. Do I need to publish the subscriptions without the features first? Upon attempting to write the supporting code that will enable these features within the app, I cannot get Xcode to identify that I have these subscriptions. I have also tried pushing these to TestFlight, still with no success. Thank you.
2
2
208
2w
Gift Subscription and Split Payment
I am the Lead iOS Developer for The Incc, an upcoming social networking application. The platform offers subscriptions that grant users access to premium content, primarily digital magazines showcasing diverse cultures, alongside standard social media features and additional unique functionalities. I am exploring two specific use cases for our subscription model. Promo Codes with Split Payments: We plan to collaborate with the our influencers (referred to as Mover Shakers) by providing them with promo codes for users to purchase subscriptions. For such purchases, we aim to implement a revenue split model, allocating 10% to the influencer and the remainder to us after Apple’s fees. Gifting Subscriptions: We also wish to enable users to gift subscriptions to others within the app. I understand that the Apple Subscription Service does not natively support these features. What other options do we have to achieve this that are also not against the Apple's guidelines.
0
0
133
2w
Is original_transaction_id and transaction_id globally unique?
Hello, Apple App Store Server API Team! I have one questions about the identifiers provided by Apple App Store Server API. Could you please answer? We are running an iOS App. In our app, the transactionId we get from Apple App Store Server API is called T1. (Example) Q1. Is it correct that other iOS apps cannot get T1 for transactionId from Apple App Store Server API? (I'm wondering if the transactionId is globally unique across apps.) Thank you!
0
0
117
2w
StoreKit 2.0 keep throwing unknown error.
After the release of StoreKit 2.0, the in-app purchase failure rate increased by 63.19%, with the majority of errors being StoreKitError.unknown. When encountering this error, many users repeatedly attempt to make a purchase, but the outcome remains unchanged, resulting in the same unknown error. In some cases, users who wait approximately 2 minutes before retrying the purchase may either succeed or encounter the following error: “StoreKit.StoreKitError.systemError(Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.storekitd”)”. This issue has directly impacted our app's purchasing flow. Because our app only displays the promotional purchase offer once, these issues have significantly reduced the number of users successfully completing the offer. As a result, the conversion rate for this promotion has dropped well below expectations, negatively impacting our business metrics.
2
1
225
5d
Transaction.environment is undefined/nil in TestFlight
I'm using Transaction.environment to determine server behavior. https://developer.apple.com/documentation/storekit/apptransaction/environment https://developer.apple.com/documentation/storekit/appstore/environment I gather this information on the app using StoreKit and then send it to the server: originalTransactionId = transaction.originalID originalTransactionEnvironment = transaction.environment When testing within Xcode, on a simulator, the value sent to the server for originalTransactionEnvironment is Xcode - as expected. When testing on a device using a TestFlight build, the value sent to the server for originalTransactionEnvironment is undefined/nil. I expected it to be Sandbox - and later in production it should be Production. Most importantly, the value sent to the server for originalTransactionId in the TestFlight version is not undefined/nil - it is the value I expected it would be. The transaction was originally for a subscription purchase, if that makes a difference. So the transaction is available, and information like originalID is also available. Why is transaction.environment not available? What is the behavior in production?
0
0
134
2w
Calling finish on an unfinishedTransaction doesn't work
So, we've implemented IAP with StoreKit2 e2e for both the client and backend and it's working mostly perfectly, however we have an issue which we can't seem to understand Apple's behavior. So, imagine a purchase that occurred on the 10th of December in the sandbox environment through an install from TestFlight, and this same purchase keeps getting queued in the Transaction.unfinished list for some reason (today, the 17th of December, a whole week after the initial purchase!). Here's the flow: We iterate the list on app launch Send the unfinishedTransaction's transactionId to our servers The server says "hey, we could verify it with Apple but it's not longer active (expired). We can't really work with it so just finish it on your side and don't send it to me again" The client finishes!! the transaction On the very next app launch it keeps reappearing in the Transaction.unfinished queue Are we doing something wrong, why doesn't it get cleaned? Is this an expected behavior? Note, this is generally the server's logic for new purchases: If we weren't able to contact Apple - we tell the client to not finish the transaction so that we'll be able to re-iterate it on the next app launch or retry If the transaction is not expired and valid - we update our records and tell the client to finish the transaction If we couldn't update our records - we tell the client to not finish the transaction so that we'll be able to re-iterate it on the next app launch or retry If the transaction is not valid for some reason - we tell the user to finish the transaction The server might see it as a valid transaction if we'll send the originalTransactionId instead of the 'transactionId(using it to callgetTransactionInfoinAppStoreServerLibrary`), but is this something we want to do? This will obviously not fix the problem because the server tells the client to finish the transaction anyways, but it simply doesn't work. Please, any advice or changes to make to either Client/Server would be greatly appreciated Best Regards, Ofek
0
0
122
2w
Purchase with FaceId resulting in SKError.Code.unknown
So I've run a promo for my which offerred a free purchase for a while. Some people - and it looks like mostly in Germany - ran into an issue that the purchase would fail with SKError.Code.unknown. One user noted that if you cover FaceID and use your password when making the purchase it would succeed. That was then my guidance and it seemed to have worked for everyone. Is there a way from my side to prevent that error?
0
0
164
3w
Hundreds of StoreKit2 Errors: 4097
So I ran a promo for my app that got me 30k downloads or so. The app was free for a day and so it got lots of "purchases". There were two errors from StoreKit2 that I can't explain (I'll detail the other one in another post) This one: StoreKit.StoreKitError.systemError(Error Domain=NSCocoaErrorDomain Code=4097 "connection to service with pid 19497 named com.apple.storekitd" UserInfo={NSDebugDescription=connection to service with pid 19497 named com.apple.storekitd} There are various theories online that the display name of the purchase could be an issue. Another was that this indicates that this indicates that a helper process has crashed. Generally my guidance was to restart the device and that seemed to resolve it for most if not everyone. But not everyone reached out and it rained bad reviews and I was accused of a bait and switch and so on. Is there any way to mitigate this? Any way to address it? It doesn't happen for everyone but it happens very frequently still.
2
0
169
2w
Any way around this?
Guideline 3.1.1 - Business - Payments - In-App Purchase We found in our review that your app or its metadata provides access to mechanisms other than in-app purchase for purchases or subscriptions to be used in the app, which does not comply with the App Review Guidelines. Specifically: Your app's Thanks window includes the following call-to-action and/or URL that directs users to external mechanisms for purchases or subscriptions to be used in the app: After generating icons, a "Buy me a coffee" button is presented that goes to a website to make a purchase. I literally just want my app to be able to take "tips" without going through apple in app purchases, because the cut they take is INSANE
1
0
205
3w