StoreKit

RSS for tag

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

StoreKit Documentation

Post

Replies

Boosts

Views

Activity

Do I have to use In-App Purchasing?
So in my app users have an avatar and there is some functionality where users can use their own face scanned 3d model instead of the default avatar head. Through a third party app our users send us images so the 3d model can be generated (for a fee). Once the face scan is generated we assign it to the user's account where they can use it during play. The problem with using In-app-purchasing (IAP) in this instance is that the this is a custom feature that requires the user to take action on a third party app to complete the process anyway. It would be a hassle to have to make the user pay with IAP, then go outside the app to send their images, and once the model is generated (takes a few days) hope it was assigned to their proper account. If I did it where the payment, 3d model generation, and assigning the model to the user took place outside the app would that be a violation of Policy 3.1.1? Policy 3.1.1 If you want to unlock features or functionality within your app, (by way of example: subscriptions, in-game currencies, game levels, access to premium content, or unlocking a full version), you must use in-app purchase. Apps may not use their own mechanisms to unlock content or functionality, such as license keys, augmented reality markers, QR codes, cryptocurrencies and cryptocurrency wallets, etc.
0
0
260
Feb ’24
Issues with StoreKit2 and TestFlight
Transaction.updates When testing on TestFlight, Transaction.updates emits payments that occur on the same device (usually within 1min after payment is finished), contradicting the docs: The asynchronous sequence that emits a transaction when the system creates or updates transactions that occur outside of the app or on other devices. Transaction.unfinished When testing on TestFlight, Transaction.unfinished contains finished payments from a different device (same App Store account). Docs: A sequence that emits unfinished transactions for the user. Both issues do not happen when testing with Xcode. Xcode 15.2, iOS 17.3, 17.4
0
0
450
Feb ’24
SubscriptionStoreView how to handle the Cancellation Button
Hi All, I use the SubscriptionStoreView and it displays a cancellation button in the upper right corner. How do I set a value of a local variable and dismiss the SubscriptionStoreView when the user clicks the cancellation button? Right now it seems as if the cancellation button is disabled and nothing happens when I press the cancellation button. Any help is appreciated. Regards Thomas S
1
0
433
Mar ’24
Am I required to use in-app purchases for Subscriptions on my app? it has premium content after subscrition
Apple has specific guidelines regarding the use of in-app purchases versus other payment processors in your app. According to these rules, if your app facilitates the purchase of digital items such as credits, it is mandated to utilize in-app purchases. On the other hand, for apps that involve the sale of real-world goods and services, Apple requires the use of a different payment processor. in my case i am providing subscriptions only and members with paid subscription have more visibility over content. can i use a third party payment gateway like stripe in my case ??
0
0
367
Mar ’24
Encode purchase payload as JSON and pass to request.httpBody
Hi All, I have this code and I would like to send the payload of the completed purchase to my server. How to do that? Regards Thomas S ` SubscriptionStoreView(...) .onInAppPurchaseCompletion { product, result in if case .success(.success(let transaction)) = result { print("Purchased successfully: \(transaction.signedDate)") // this looks good in Xcode // Pass payload of transaction to my server let url = URL(string: "... my server ...")! var request = URLRequest(url: url) request.httpMethod = "POST" request.httpBody = ???? // how do I pass the payload of the transaction to the httpBody request.setValue("application/json", forHTTPHeaderField: "Content-Type") let task = URLSession.shared.dataTask(with: request) { data, response, error in let statusCode = (response as! HTTPURLResponse).statusCode if statusCode == 200 { print("SUCCESS") } else { print("FAILURE") } } task.resume() } else { print("Something else happened") } } `
2
0
443
Mar ’24
Testing in-app purchases
I need to test my app's in-app purchases and I am having a very difficult time with it. I created a "Sandbox" account in App Store connect. Doing so was very frustrating. It told me multiple times that my password was "too simple", without ever explaining what the password rules are. Then it emailed me something so I could "validate" the account. Luckily I used an actual email address that I can receive mail on. I was expecting I could use any fake address since this is a Sandbox account. After that I started an iOS simulator and tried to log in. It immediately asked me to turn on two-factor authentication. I declined, and then it just said "User name or password is incorrect". I tried a couple more times, then I went back and actually turned on the two factor auth. But that didn't solve the problem. I still cannot log in. Can someone explain what I'm doing wrong here?
0
0
537
Mar ’24
How to detect when auto-renewing subscription expires?
Hi all, I've implemented in-app purchases to have auto-renewing subscriptions. However, when I use Xcode's Transaction Manager to expire a subscription, there seems to be no callback Transaction.updates or Transaction.currentEntitlements I can see an expiry through Transaction.all but I can't imagine the intention is to poll that while the app is running. What am I missing here?
1
0
579
Mar ’24
Physical or Digital Service for Competition Entry Fee?
I'm trying to figure out if my app will be required to use apple pay or not. My app features cycling competitions that take place over a month. There is no single race day so there is no physical event taking place. Instead, you're considered to be "in the event" every time you ride specific sections of road for that period of time. Unlike with, say, a telemedicine appointment, or a day-of race that you can't join if you don't have a ticket, there is no stopping you from riding your bike if you don't buy a ticket. The only difference is in whether you were riding as part of the event or not. The answer to this question will inform whether I take in-app payments or go with a 3rd party processor. Any guidance would be super helpful. Thank you!
0
0
275
Mar ’24
My Order on individual Apple Developer Membership reviewing 1 month and I didn't get an answer
My order reviewing 1 month and I didn't get an answer at all. During this period I have been trying different ways to get the subscription. I have tried different cards, different addresses and also I have tried to contact with Apple Support but I don't really understand why I can't complete this. there is an example what Apple Support answered me on message to help: Open this email on an iOS, iPadOS, or macOS device. Tap here to open the Apple Developer app from the App Store. Sign in to the app and follow in-app guidance to enroll. So when I download the app and follow the guidence I face grayed out button that didn't works and subtext: "Enrollment through the Apple Developer app is not available for this Apple ID. Visit: https://developer.apple.com/programs/enroll/" So this site is the site which answers me that my order will be reviewing during 2 business days. I am in the dead cycle where I can't pay my Program. Why? Pleas help me
0
0
441
Mar ’24
Status notification reception transition
We received a notification DID_FAIL_TO_RENEW(subtype:(Empty)) from App Store when the subscription failed to renew because of a billing issue. After this case, we predict that we will receive the notifications based on the following two cases. If the user resolves a billing issue: Receives notification DID_RENEW(subtype:(BILLING_RECOVERY)) If the user does not resolve the billing issue and cancels the subscription: Receives notification EXPIRED(subtype:BILLING_RETRY) Based on the above, I would like to ask two questions Are the above two cases and the notification types we expected correct? If wrong, please tell me what is wrong. If there are other than the above two cases, please tell me the case and notification type.
0
0
472
Mar ’24
2-sided marketplace/digital service/app store fee
My app enables dancers to monetize their work. Dances can be accessed through the app and learned with the features that we build (slow a video down, audio instructions). The majority of the revenue goes to the dancer, as it is typical for 2-sided marketplaces, and the business takes a 10-20% cut. Currently, we use IAP and users pay to unlock per dance. However, our business model is not feasible with the app store taking 15% and then 30% of the revenue in the long run. Are there exceptions for 2-sided marketplaces where the app store fee is being deducted from the business revenue, and not the overall revenue? If we have people purchase a subscription or credits on our website, what can we do to heighten our chances of that being approved by apple? I know that reader apps are allowed to do that. The app should largely classify as a reader app, since the users access content through it, but we also offer some functionality (such as slowing down the video or using the camera), so I am worried that the app store is going to be difficult about this after we build the system.
0
0
338
Mar ’24
Third party payment gateeway instead of In-app purchase
Our application facilitates doctors in storing patient records, including essential documents and images. However, a subscription is required for users to store images on a monthly or yearly basis. Considering we also have an Android application, we're considering using the same payment gateway for both platforms. Is it acceptable to integrate a third-party payment gateway instead of relying on an in-app purchase system? Thanks in advance.
0
0
306
Mar ’24
How to test subscriptions through Storekit 2 in Sandbox?
Hey all, Tl;dr: In debug-build using a .storekit file, all is good. When uploading a release build to testflight, purchasing follow the expected flow, but it does not seem the subscription status is reflected. Full description I've implemented auto-renewable subscriptions in my app. In debug, I've setup a scheme to use products.storekit. When I run this scheme on my device, I can subscrbe, cancel etc, and it all works as expected. When I upload my release scheme to testflight, purchasing can be done, but changes do not seem to be reflected inside the app (i.e.e no features get unlocked). Same thing when I run this scheme on my device. This scheme has None set for Storekit configuration. When I set 'Storekit configuration' to the Products.storekit, file I can't make a purches at all: SubscriptionStoreView shows Subscription unavailable. The subscription is unavailable in the current storefront'. I've watched a number of WWDC sessions on the topic, read most (all?) of the documentation, and I just can't seem to find out what it is that needs to be done. Unfortunately, debugging has been rather cumbersome and sometimes impossible lately, especially when trying to debug a release build. Anyone can tell me what it is I am overlooking, or what piece of information or link I missed? Here is the relevant code (which works OK in debug) private func listenForTransactions() -> Task<Void, Error> { return Task.detached { for await anUpdate in Transaction.updates { do { let transaction = try self.checkVerified(anUpdate) await self.checkSubscriptionStatus() await transaction.finish() } } } } And here's checkSubscriptionStatus(): @MainActor private func checkSubscriptionStatus() async { var hasActiveSubscription = false do { for aStatus in try await Product.SubscriptionInfo.status(for: "718A7488") { let state = aStatus.state hasActiveSubscription = (state == .inGracePeriod) || (state == .subscribed) } } catch { print(error) } self.hasActiveSubscription = hasActiveSubscription }
0
1
795
Mar ’24
App Only Crashes on Launch in iOS 17.4 for Production Version
Hello, I'm encountering an issue where my released app fails to launch only on iOS 17.4. The version of the app released through TestFlight works fine without any issues. Specifically, when the app installed from the App Store is launched on iOS 17.4, it immediately crashes. However, I've noticed the following: If I turn off the network connection, such as putting the device in Airplane Mode, the app launches successfully. Once the app is launched, I can re-enable the network connection, and the app continues to run without crashing. My app uses StoreKit2 for handling transactions and connections with the App Store. It initiates a connection to the App Store via StoreKit2 at launch. The primary difference between the TestFlight version and the production version is the App Store endpoint they connect to. This leads me to suspect that there might be an issue with the connection to the App Store. (Another possibility is that the app communicates with Firebase or Google Admob, so there could be an issue with these SDKs as well.) This issue only occurs in the production version, making it difficult to investigate. Are there any suggestions on what I can do to further diagnose this issue? You can download my app from here: https://apps.apple.com/us/app/repeatable-player-cut-loop/id616310281 I can provide the TestFlight URL if needed. Any help or guidance would be greatly appreciated.
1
1
3k
Mar ’24
Get originalTransactionId in app after completed purchase
Hi all, how do I get the originalTransactionId in an app after completed purchase. I use SubscriptionStoreView and onInAppPurchaseCompletion but I don't know how to extract the originalTransactionId. Any help would be appreciated. From https://developer.apple.com/documentation/appstoreserverapi/originaltransactionid I read "To get the original transaction identifier from your app, use the originalID property of the Transaction object that represents the in-app purchase. " So I assume I can extract the originalTransactionId in the code following onInAppPurchaseCompletion Regards Thomas S
0
0
329
Mar ’24
app transfer encountered subscription verification and login issues
For V1 used for internal purchase verification, when will the exclusive shared key regenerated after transfer be replaced? Will it affect in-app purchases and subscriptions by online users? The V2 used for internal purchase verification uses the key ID instead of the dedicated shared key. In this case, what should we pay attention to before and after the transfer? Do I need to regenerate the key ID for the new account? Is the private shared key still useful? Do I need to generate a dedicated shared key again in the transferred App? What will be the impact on existing subscriptions after the transfer? What do I need to do with the current existing subscriptions? We have used universalLink, do we need to add a new TeamId to the apple-app-site-assn. txt file? { "applinks": { "apps": [], "details": [ { "appID": “TeamIdA.com.***.***”, "paths": [""] }, { "appID": “TeamIdB.com.***.***”, "paths": [""] } ] } } We have stored the login information in Keychain Sharing, is there no way to get the original stored information after transfer? Is there a reasonable solution?
0
0
459
Mar ’24
What will happen if an existing subscriber redeem the offer code which is only eligible to new and expired subscribers?
I am working on an iOS app. I have created an annual offer code which is only eligible to new users and expired subscribers. May I know what will happen if an existing subscriber tries to redeem the offer using the offer code url? Then they would finish the whole process through the App Store. There are no ways for my app to block it. Would Apple not allow them to do this? If yes, would the existing subscribers have to cancel their subscription in order to redeem this annual offer code? If yes, will they then immediately see the offer? Or will they have to wait until their entitlement expires? Thanks.
1
0
428
Mar ’24