StoreKit

RSS for tag

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

StoreKit Documentation

Post

Replies

Boosts

Views

Activity

subscription is locked on waiting for review
Hey, I've been having a frustrating time with Apple regarding my app's submission. I initially submitted a build (version 1.2.27) of my app that included a "Full Access" subscription feature. Shortly after, I decided to cancel this submission to update and resubmit a newer version. But now, I'm stuck because the "Full Access" subscription seems locked in a "Waiting for Review" status. This means I can't select it for my new submission. I reached out to Apple Support for help. I explained that my problem isn't with canceling the submission but with being unable to choose the "Full Access" subscription for the new version. They responded quickly but only provided a link to manage version submissions, which doesn't really address my specific issue. So, I had to clarify again that I need guidance on how to unlock the subscription from its current status so I can move forward with my app's resubmission. It's a bit of a loop, and I'm still waiting for a solution from them.
1
0
410
Nov ’23
SKPaymentTransaction With Transaction State Incorrect
Hi, I'm receiving an incorrect returning state from SKPaymentTransaction. I have a subscription plan that users can purchase and have access to new features in my app, but, for some reason, even if it's a new app account or new appstore account, when it reaches the SKPaymentTransaction.TransactionState, it always says that the state is SKPaymentTransactionStatePurchased. This code haven't been changed since 2018 and this error started about 1 week ago. This is the full code: - (void)createPaymentWithProduct:(SKProduct *)product { SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product]; payment.quantity = 1; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] addPayment:payment]; } - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction in transactions) { switch (transaction.transactionState) { // Call the appropriate custom method for the transaction state. case SKPaymentTransactionStatePurchasing: [self purchasingTransaction:transaction]; break; case SKPaymentTransactionStateDeferred: [self failedTransaction:transaction]; break; case SKPaymentTransactionStateFailed: [self failedTransaction:transaction]; break; case SKPaymentTransactionStatePurchased: { //It reaches this case but never reaches Purchasing [self purchasedTransaction:transaction]; break; } case SKPaymentTransactionStateRestored: [self restoredTransaction:transaction]; break; default: // For debugging NSLog(@"Unexpected transaction state %@", @(transaction.transactionState)); [self failedTransaction:transaction]; break; } } } After the queue, it calls this functions that ask for the payment receipt, which returns me an error because it's not purchased, so it doesn't have a receipt. - (void)purchasedTransaction:(SKPaymentTransaction *)transaction { [self sendReceiptToServerForTransaction:transaction]; if (self.purchasedNotification) { self.purchasedNotification(); } }
0
0
514
Nov ’23
After executing the subscription period extension process for the Sandbox account, the automatic renewal of the subscription will be canceled when the extension period expires.
We are currently implementing a feature that will allow us to extend the subscription period for users who have suffered losses due to our negligence. Regarding the problem that is occurring in the sandbox environment during the testing stage, please check whether it is due to the sandbox specifications. ■Reproduction steps Sandbox account A starts charging in the sandbox environment (sandbox account A is in the state of automatic contract renewal) Execute extension process for a specific period for sandbox account A. Confirm that the period of sandbox account A has been extended. Confirm that sandbox account A has reached the expiration date after the extension and that the next contract renewal will be performed automatically. Delete the purchase history of sandbox account A by following the steps below.AppStoreConnect->Users and Access->Sandbox->Test Account->Edit "Clear Purchase History". Proceed with steps 1 to 3 again for sandbox account A. Due to the expiration of the period in step 4, the automatic contract renewal for sandbox account A was canceled and subsequent contract renewals were no longer performed. (This is the problem) I've run similar tests with other accounts, and in every test the problem doesn't occur until I clear my purchase history, but the problem occurs after I clear my purchase history. When I checked the log information, the following notification was received at the timing of step 7, and it seems that the user took the initiative to cancel the automatic update. 「"notificationType": "EXPIRED", "subtype": "VOLUNTARY"」 Please let me know if the behavior is as specified.
1
0
476
Nov ’23
Using external payments for games services such as PSN and XBOX pass
I would like to understand the restrictions that apple apply to apps that offer external payment methods for services that are not part of iOS app IAP system. There are companies that sell vouchers for PSN, Steam and XBOX that are not related to IAP purchases, and are used in consoles external to the iOS environment. But it seems that a payment app cannot offers such services inside iOS. Could someone give me an explanation why is that so? thanks in advacne,
0
0
220
Nov ’23
Promo code redemption error (not found)
I have a production app (since Feb 2023) that has in-app subscriptions (working fine). Now I want to give offer codes to my new users so they can get free trials (2 months free trial + annual subscription). The offer code is set up like this: https://photos.app.goo.gl/V42fZWRpECnbUQsv6 I waited for 2 days for it to be available. When I redeem this code, it shows error "The code you entered could not be found". See https://photos.app.goo.gl/sGKvuw9thFFkoJWv5, https://photos.app.goo.gl/kctoWPbNu6k4JkZp6 Please help!
2
4
502
Nov ’23
6 active Subscriptions in one Group
Hello everyone, we have 6 subscription models in only one subscription group, of which we only show 2 (monthly and yearly) via RevenueCat. So we have 3 prices (offer, normal price and another one that we use later to increase the price) Now we were approached by a customer that she could choose the subscription model of the 3 monthly subscriptions when renewing her subscription. That would of course be fatal for us if that were the case. We have already sold the app over 1000 times and it has been running for almost 6 months. When I look at the statistics at RevenueCat, everything is ok, those who bought for the offer could also continue to run for the offer price. and those for the normal price too. We have set the app to free because we allow downloading and installation and you only then take out the subscription in the app. Of course, we point this out to customers. What is your experience? Does anyone know who can tell me whether I can continue with this or whether I should deactivate the other outdated subscriptions first, for example? Of course, I still need to find out how this works with Google and the Google Play Store. Of course, we've done the same thing there. Best Regards
2
0
442
Nov ’23
App Store Server Notifications V2. Empty body.
Hello. We used App Store Server Notifications V1 for purchase notifications. And we decided to switch to version 2. We got a problem. If we use v2 and make a test purchase, the callback will receive a call with an empty requestBody. If we use v1, then a call comes with data. If we use https://api.storekit-sandbox.itunes.apple.com/inApps/v1/notifications/test for simulate notification, when version 2 is enabled, callback receive call with correct requestBody. What could be the problem? Thank you.
3
0
759
Nov ’23
Indicating premium content in screenshots / videos
Dear All, I have a paid app which has in-app purchases to unlock additional content. In my App Store screenshots and preview videos, I used to indicate which content was paid and which was free with labels superimposed over the screen captures. App store review guideline 2.3.2 supports doing this - in fact, it seems to require it: 2.3.2 If your app includes in-app purchases, make sure your app description, screenshots, and previews clearly indicate whether any featured items, levels, subscriptions, etc. require additional purchases. But App Review don't like it. Some years ago they complained about the labels on the screenshots, which I removed. Now they are complaining about the preview videos. They cite guideline 2.3.7, which says (in part, my emphasis): 2.3.7 ... Metadata such as app names, subtitles, screenshots, and previews should not include prices, terms, or descriptions that are not specific to the metadata type. ... So these guidelines seem to be contradictory. If I label a screenshot as "free" or "paid", they consider that to violate 2.3.7. (I'm not showing an actual "$1.23" price, just "free" or "paid".) But I need to indicate whether the content shown is "free" or "paid" in order to comply with 2.3.2. (And I want to label it as such, because I don't want users to misunderstand what is included with their initial purchase.) Has anyone else had this problem? I wonder if there is some particular wording that they require, e.g. "Requires in-app purchase" rather than "Paid". Or something rather than "free". There is a limit to how much text I can legibly add without obscuring the actual content, so I have tried to keep it brief. I did refer to 2.3.2 in my reply to App Review, but they haven't addressed that; they've accepted the update as a bug fix. Ultimately I'll just do what they want - it always seems easiest - but I do have real concern that my customers are worse off without these annotations.
2
0
986
Nov ’23
DID_RENEW notification with cancellation_date field completed
Hello, We have a few FAMILY_SHARED subscriptions which received a DID_RENEW notification, with all the cancellation fields completed, the expiration date in the future and no pending_renewal_info array in it. We are not sure why did we get the DID_RENEW notification with the cancelation details, shouldn't we get a REVOKE notification? We found this in the Apple documentation: The pending_renewal_info array is returned only for app receipts that contain auto-renewable subscriptions. If customers voluntarily cancel a subscription renewal while in the grace period, the App Store pauses billing retry, and removes the transaction from pending_renewal_info. The subscription is in the grace period if the key grace_period_expires_date_ms is present and the expiration date hasn't passed. We do not handle any cancelation related logic for the DID_RENEW notification. Should we adjust the logic for this scenario or there should be a different notification type sent out. This is how the latest element looks like from the lattest_recipt_info: "auto_renew_status": "true", "unified_receipt": { "status": 0, "environment": "Production", "latest_receipt_info": [{ "quantity": "1", "product_id": "product_id", "transaction_id": "transaction_id", "purchase_date": "2023-11-07 23:01:41 Etc/GMT", "purchase_date_ms": "1699398101000", "purchase_date_pst": "2023-11-07 15:01:41 America/Los_Angeles", "original_purchase_date": "2021-10-07 22:01:42 Etc/GMT", "original_purchase_date_ms": "1633644102000", "original_purchase_date_pst": "2021-10-07 15:01:42 America/Los_Angeles", "expires_date": "2024-11-07 23:01:41 Etc/GMT", "expires_date_ms": "1731020501000", "expires_date_pst": "2024-11-07 15:01:41 America/Los_Angeles", "web_order_line_item_id": "web_order_line_item_id", "is_trial_period": "false", "is_in_intro_offer_period": "false", "original_transaction_id": "original_transaction_id", "cancellation_date": "2023-11-07 15:37:03 Etc/GMT", "cancellation_date_ms": "1699371423020", "cancellation_date_pst": "2023-11-07 07:37:03 America/Los_Angeles", "cancellation_reason": "0", "in_app_ownership_type": "FAMILY_SHARED", "subscription_group_identifier": "subscription_group_identifier" }
1
0
582
Dec ’23
Delete Subscription - An error has occurred. Try again later.
Hi I am unable to delete a subscription, it keeps giving an error message "An error has occurred. Try again later." Some background : I have submitted my app along with subscription for review and it got rejected with the message - Guideline 3.1.2 - Business - Payments - Subscriptions When I tried to edit the exisiting rejected subscription by changing the localisation or review screenshot it is giving an error. Then I decided to delete this subscription itself and create a new one, that also giving an error. Spend whole day trying to figure out this issue still no luck , anyone else experienced this ?
0
0
457
Dec ’23
How to cancel Auto-renewable subscription bought in TestFlight?
I've read several topics on cancelling subscriptions in sandbox environment, but it seems to me that it could not be applied to TestFlight. I can cancel sandbox subscriptions through Settings > App Store > Sandbox account But since TestFlight does not use sandbox account I cannot cancel a sub from there. Also, TF purchase does not appear in the list of regular subscriptions (Settings > Profile > Media & Purchases). So my question is: is there any way to manually cancel auto-renewable subscription bought in TestFlight build of the app?
5
3
2.3k
Dec ’23
Can't publish my app due to NFTs transactions
Hello, dear community! We are developing an NFTs marketplace where users can create, buy, and sell NFTs. Additionally, our app is intended to transfer and purchase our cryptocurrency like any other crypto wallet. When users create their own NFT using our app, they can set the price (in our cryptocurrency) of the asset they create. However, Apple's review team rejected our app submission due to in-app purchases that we don't have. . OUR ACTION PLAN: We are planning to develop "Packages" for buying our cryptocurrency, like gems in a game, to buy any other NFT within the app, but we are not sure if this strategy can help us pass the app review. . Do you know if we have to add any other configuration in the app store connect to attend the wallet functionality, to buy and transfer our cryptocurrency? Do you have any recommendations for passing the app review? Our app is designed to work like: Metamask (for buying our crypto currency and transfer). Coinbase (for buying our crypto currency). Jump.trade (for NFTs Marketplace and create NFTs). Bitso (for buying our crypto currency). NFT GO (for NFTs Marketplace and create NFTs). Thanks in advance! ❤️
1
0
531
Dec ’23
in app consumable purchase stay in pending state. never ends with success or failure
The app is in beta testing. I want to test the consumable IAP in the sandbox before pushing it to the external beta testers. however, the in-app purchase stays pending and never reaches success or failure. Also when I attempt to make a purchase, the purchase prompt closes with a success tone after giving the password but keeps appearing again. this is happening in a loop. I tried with multiple sandbox user accounts but no luck. any help here, please?
0
0
244
Dec ’23
buymeacoffee/ko-fi link inside app
Hi! Is it allowed by Apple's rules to add an in app link to a buymeacoffe/ko-fi type donation page? Short context: in the middle of wrapping up v1.0 for my first ever app, and I would like to publish it. However I dont think I have the capacity to implement in app purchases for v1.0. I was thinking maybe if I add this type of donation oportunity, it is better than nothing. For the technicalities, I'm would like to use ko-fi, where they have a neat web widget style donation interface, and I just wrap that in a webview. Thanks!
2
0
526
Dec ’23
Not fetching auto-renewal subscription information (price) in China market
My app (Apple ID: 6473235939) first released on Dec 2 2023 to App Store for China market, and it has auto-renewal subscription. However, the user in China downloaded, installed and launched it, and he can't see the price, looks the app can't fetch the purchase product information, so the user can't subscribe. However, in the info section of app store the in-app purchase price is listed and right. The app was tested ok based in Canada, and the right subscription price is showing. Does the auto-subscription is blocked for China market? Any help? Thanks a lot.
0
0
365
Dec ’23
EXPIRED notification is no longer received
Hello, I have configured V2 server notifications for my applications. I am receiving different types of notifications (https://developer.apple.com/documentation/appstoreservernotifications/notificationtype) in my webhook. Something changed after November 18th. EXPIRED notifications are no longer received. Has something changed in the API? Other notification types still work.
2
0
698
Dec ’23