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

In App Purchases Not Completing
Looks like I'm getting the error "There's no information available for in app purchases. Try again later. 21102" The purchase starts, gets to in progress but never completes so I cannot grant the user any item in app. App info: I made a small test application with a simple purchase button and restore purchase button, the middle button as shown in the video that's clicked is the purchase button to kick off the transaction. If the service isn't working through the manage>test purchase in appstore>sandbox(not in-app), it is likely not a code issue from my end, it is either internally from your Apple side or a config issue on the apple account application end on my side. Ive tried deleting sandbox testers, new builds, as well as doing it on test flight. Just feel like if its not workig through manage>test purchase in appstore>sandbox then its def not a my problem Logs: <SKPaymentQueue: 0x281f4eb40>: Payment completed with error: Error Domain=ASDServerErrorDomain Code=3539 "There’s no information available for In‑App Purchases. Try again later." UserInfo={NSLocalizedFailureReason=There’s no information available for In‑App Purchases. Try again later., AMSServerErrorCode=3539, client-environment-type=Sandbox, storefront-country-code=USA} Any help would be great, this has been happening for a week now , and apple has been 0 help. Thank you so much for anything here.
18
2
2.5k
Dec ’23
In App Purchase Consumable "product tiers"
Hello, We are planning to launch in-app purchases to our app with millions of MAUs. The plan is to sell more than 10,000 products in the future, and we saw that there's a limit to non-consumable products of 10K so we didn't want that to limit us. Proposed Solution As a result, we have decided to launch consumable products instead, and manage unlocking the content on the server side once a user has successfully purchased an item. The client will also manage payments that couldn't be confirmed server side by temporary storing information about the product which has been purchased (but not unlocked) so that we can recover gracefully. The plan is to create numerous consumable products, where each product has a specific price. Thus when a user wants to purchase product A, we will trigger the IAP flow with the consumable apple product which matches the price of product A. If we offer products from 15 pounds to 100 pounds, we'll be creating non-consumable products: Product 1: 15.99 Product 2: 16.99 Product 3: 17.99 ... etc So you can think of it as tiering apple products together based on the price. The product in our catalog will not have a one to one mapping with the apple product. So I have two questions: Is this okay with Apple's guidelines? Should we expect Apple to block the release? Is there a limit on the pricing of a consumable product? Can we go above 100 dollars?
0
0
306
Nov ’23
Unable to accept Paid Applications Agreement
I need to implement in-app purchases for my iOS application. For which I need to accept the Paid Applications Agreements but on the App Store Connect "Agreements, Tax and banking" page under agreements tab. I see no agreements. I have already accepted "Apple Developer Program License Agreement"and "Apple Developer Agreement". I have attached the screenshot of my agreements page. Most of the solutions I have seen online have a table at this page like so. but I see "There are no Agreements." I should see a table like this one Here's my apple developer homepage which says that I have accepted two agreements I am signed-in as the account holder and admin of this account. Do I need to create a certificate or something?
0
1
450
Nov ’23
Introductory offer does not appear for Sandbox testing
Hi, I currently have an introductory offer set up in App Store Connect, which is in the 'Ready to Submit' state. When testing with the StoreKit configuration testing for Xcode, the introductory offer appears correctly, and I can successfully make and cancel purchases. However, when testing on a device without the StoreKit configuration, using a new sandbox account, the introductory offer does not appear, though the introductory price is visible for subscription. Could you advise on how to ensure the introductory offer is displayed in this scenario? Using Storekit 2
2
0
683
Jan ’24
Bundle App combine Subscription & Consumable/non-consumable purchase
I intend to group together several free-to-play games in a bundle. While these games will be accessible without charge, users will have the option to subscribe (for example, to a VIP club) and make additional purchases for consumable or non-consumable items. Although I've reviewed Apple's guidelines, I haven't found any information indicating whether it's permissible to offer consumable and non-consumable purchases after users have paid a subscription fee to access all the games in the bundle. I would appreciate your assistance in clarifying this matter.
0
0
223
Nov ’23
User flow for SKStoreReviewController API
Within Apple's documentation for ratings and reviews, it was stated that the SKStoreReviewController API allows users to "submit a rating through the standardized prompt, and can write and submit a review without leaving the app" however I am unable to see how user is able to leave a review in-app as the prompt appears to request for a rating only. Would clicking on the 'Submit' button display the option to leave a review in-app without being redirected to the App Store product page? Please kindly advise, thank you!
2
0
276
Nov ’23
StoreKit 2 - AppTransaction.originalAppVersion confusion
I've watched some of the WWDC session videos about this topic and read the documentation and header files, but it is still confusing... Because I change the pricing model of my iOS App (it was a paid App and now it will be a free App with an In-App purchase), I want to check if a user of my App purchased the App in the past. So user who have already paid in the past will get the full access without the need to pay the IAP, while new users would have to do this. In one of the WWDC videos exactly this topic was covered and the solution would be to check out AppTransaction.originalAppVersion. This would be a simple and easy solution... ...Unless I read the information from the header file and documentation for this API. Here it says: The string value contains the original value of the CFBundleShortVersionString for apps running in macOS, and the original value of the CFBundleVersion for apps running on all other platforms. The problem here is that when I check the Info.plist of iOS Apps, the CFBundleShortVersionString is used for the main App version and CFBundleVersion is used for the "build" number. According to the cited documentation from above, AppTransaction.originalAppVersion would be totally uselesss on the iOS platform, because it would only return the build number and not the version number. So I'm confused. Can I use AppTransaction.originalAppVersion to get the original version that was purchased for iOS Apps? If yes, the documentation must be wrong and misleading. If no, how can I do this? I'm currently in testing and I only get "1.0" as originalAppVersion within the beta release. This could be either because I really only get the useless build number, or I get the "real" version because the App is on the device since version "1.0" on my device, or it is just a limitation of XCode while testing that it is returning version "1.0" but would return the correct version when the App was installed from the AppStore.... Can someone bring some light into this topic? Am I missing something or did I understand something wrong?
2
3
646
1w
How to prevent unlocking products for TestFlight beta testers
Hey, I'm adding in-app purchases to an app. I'm using consumable products and tiering all my products into specific tiers (products A, B, C will be part of tier 1 with a specific price, products D, E, F will be part of tier 2 with another price, etc). The process of unlocking a given product is handled on the backend. Once a purchase is done via IAP on the app, I'm sending the StoreKit 2 JWS representation of the transaction along with the product so that my server unlocks this product to this user. Do I need to call Get Transaction History at this point for extra verification? Also, how do I prevent my app's beta users (who install the app via test flight) from purchasing the products for free (since test flight in app purchases are for free, as they're done via a Sandbox user)?
1
0
254
Nov ’23
Is StoreKit.Transaction.currentEntitlements down at the moment?
Calling StoreKit.Transaction.currentEntitlements today just doesn't return. It just sits there. for await result in StoreKit.Transaction.currentEntitlements { switch result { case .verified(let transaction): currentTransaction = transaction case .unverified(let transaction, let error): currentTransaction = transaction } } The for loop never starts. This is using a Sandboxed user that made a renewal subscription purchase. Everything was working fine yesterday. Nothing on my end has changed since then. Is something wrong with StoreKit?
1
0
478
Nov ’23
ensuring user can only do one action per day across all their iOS devices
Hi, My iOS app allows a user to perform a rather expensive cloud operation (costs me 10 cents per time) and I want to ensure they can only do it once a day across all of their iOS devices. The marketing will make it clear this is how it will work so users won't be surprised. While most will only have one iPhone in practice, with my subscription pricing I'd lose money the second someone started doing it on a second device. I could solve this using Sign in with Apple to ensure there is a 1:1 correlation between Apple ID with paid subscription and a user account in my system that I could track usage against but I'd like to avoid users having to sign in at all since it would serve no purpose from a user perspective. identifierForVendor won't work since it's different across every device the same user has Is there something in StoreKit v2 receipts or transaction data that would be stable longterm and have the same result across all devices using the same Apple ID? I don't actually want any info about the user, just a stable anonymized identifier to see they are the same user on different devices. I could also go with a consumable in-app purchase but I don't think users would like this pricing model for this app. Thanks! Colin
1
0
559
Nov ’23
manageSubscriptionsSheet not showing
Trying to debug StoreKit on device using a sandboxed user. When I want to show manageSubscriptionsSheet, the screen flashes but nothing shows. This is visible in the console: SKEngagementRemoteViewTask: Presenting system engagement request. Request: {length = 5347, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000012d7 } Present engagement request: {length = 5347, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000012d7 }, clientBundleID: com.acme.myapp Finished presenting engagement request with view service There isn't much information in the documentation so I'm not sure if it's me not doing things correctly or a bug in iOS 17.2?
2
0
483
Nov ’23
How to hide auto-renew subscription from sale for period?
My app contains 2 auto-renew subscriptions, one for monthly and another one for yearly duration. Is there any way to hide or prevent user to subscribe for period without affecting existing subscribers? Example case: Temporary prevent user to subscribe Monthly subscription for 2 weeks due to technical problem about premium feature. Existing monthly subscribers renewal is still running normally. Appreciate for any help! Thank you. 🙏
0
0
296
Nov ’23
StoreKit fetching product using local config file returns empty array on Mac
I am testing an in-app purchase in my app. The app has a multiplatform target with Mac (native, not Catalyst) and iPad destinations. I created a local StoreKit configuration file in Xcode and added an IAP to it. I edited the Xcode scheme to use my local config file. I have the following code to fetch the IAP: @Published private(set) var products: [Product] @MainActor func fetchProducts() async { let productIdentifiers = ["com.pro_version"] do { products = try await Product.products(for: productIdentifiers) } catch { print("Failed product request from the App Store server: \(error)") } } When I call this function, the products array is always empty on Mac but is not empty on iOS. I checked that the product ID for the product in the config file matches the value of the productIdentifiers constant in the code. What am I missing that is preventing me from fetching the products from my local StoreKit config file on Mac?
1
0
746
Nov ’23
IAP issue SKError Code MissingOfferParams error
Hi IAP Developer: We have noticed a significant increase in the SKError.Code.missingOfferParams error, which started on October 24, 2023, and has reached up to 2000 occurrences daily. Moreover, there seems to be a continuous rise compared to the previous day. This error does not exhibit any distinctive OS version or app version characteristics. Our server logs confirm that all SKPaymentDiscount-related parameters are intact and have not undergone recent changes. We would like to inquire whether Apple has made any modifications to the related services or if there is any insight into the potential causes of this issue. We eagerly await your response.
3
0
275
Oct ’23
referral Program/ Invites
Hi guys, I want to build a referral program wherein current users are rewarded for inviting friends to join my app/website. I also wanted to keep the accounts linked so that recruiting users can get rewarded every time a new user they recruited purchases something. I want to just give the users points, I'm not offering cash or subscription discounts. similar to how game invites work. through my research into the topic I have found dynamic links with flutter and firebase. deep deferred links, QR code deferred links, and some work around that included taking the user to a website copying the code to their clipboard, then pasting it into a hidden textfield to verify and track the code can anyone help me get started?
0
0
546
Oct ’23
appAccountToken is missing in JWSTransactionDecodedPayload
We use store kit original API for in-app purchase,I set a UUID to the SKMutablePayment object applicationUsername property, when finish the payment, In the App Store Server API, the JWSTransactionDecodedPayload object returns no appAccountToken field.This probability is extremely small, about 17 in 100,000.Does anyone have the same situation?
4
1
869
Feb ’24
IAP Subscription sandbox problem after Apple server down yesterday.
Hi everyone, I got problem about fetch data IAP Subscription product on sandbox environment. My project make on Unity and use IAP Unity. About 2 day ago it still work, but after Apple down some service yesterday then until now I can't fetch my product from Sandbox anymore. I also check my older version on testflight and still not work, but the production still work fine. I also check log on Sandox and saw this: "IAPStoreManager failed to initialize. Reason: NoProductsAvailable." Code I checked from IOS Native and saw the product count return "Received 0 products": - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { UnityPurchasingLog(@"Received %lu products", (unsigned long)[response.products count]); // Add the retrieved products to our set of valid products. NSDictionary* fetchedProducts = [NSDictionary dictionaryWithObjects: response.products forKeys: [response.products valueForKey: @"productIdentifier"]]; [validProducts addEntriesFromDictionary: fetchedProducts]; NSString* productJSON = [UnityPurchasing serializeProductMetadata: response.products]; // Send the app receipt as a separate parameter to avoid JSON parsing a large string. [self UnitySendMessage: @"OnProductsRetrieved" payload: productJSON]; } I have no idea about this issue so anyone know the Sandbox still work or had other any problem ? Please give me advise. Thanks everyone.
0
0
301
Oct ’23