I had published an App, and my app has App Clip supported. The issue I faced is that I had received complaints where the user keep seeing the pop up "Apple Media Services Terms and Conditions Have Changed" when user clicked on the "Open" Button in the App Clip.
What we had tried so far:
Let user switch the Apple Id's region to our supported region.
Let user try to log out and log in to Apple Id within the supported region.
StoreKit
RSS for tagSupport in-app purchases and interactions with the App Store using StoreKit.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I am a new dev in this space. I need to know how you guys setup a trial period correctly. I am using React Native and RevenueCat SDK. It seems a lot more complicated than it should be. Any assistance is greatly appreciated.
Topic:
App & System Services
SubTopic:
StoreKit
Hello, I'm currently experiencing issues with IAP subscription setup.
The following error appears:
"Billing Problem, There was a problem with your subscription renewal. To resolve, turn on Allow Purchases & Renewals, or leave off to test failed in-app purchase attempts and subscription renewals."
I'm testing with a sandbox account, and automatic subscription renewal is turned on in the sandbox settings.
A notification screen appears at the OS level, and consequently, a DID_FAIL_TO_RENEW error occurs on our payment server.
I cannot determine the cause at all, so I would appreciate your assistance in checking this issue.
One of our apps has 85% stuck in Billing Retry -- We are so confused. All the users are from the US, and have a one-week free trial.
We had 1,000 subscriptions expire from this issue.
So any help would be so appreciated.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
StoreKit
App Store Connect
App Store Server API
Environment
iOS 18.1+
StoreKit External Purchase Link Entitlement (EU)
App distributed via App Store in France
Problem Summary
I'm implementing external purchase links for EU users using ExternalPurchaseCustomLink. While the implementation works correctly in my TestFlight testing, some production users experience token(for:) returning nil.
Implementation
Following Apple's documentation, my flow is:
Check eligibility using ExternalPurchaseCustomLink.isEligible
If eligible, call ExternalPurchaseCustomLink.token(for: "ACQUISITION")
Store the token for use in the external purchase flow
// Simplified implementation
guard #available(iOS 18.1, *) else { return }
let isEligible = await ExternalPurchaseCustomLink.isEligible
guard isEligible else { return }
// This returns nil for some users despite isEligible being true
let token = try await ExternalPurchaseCustomLink.token(for: "ACQUISITION")
Configuration
Entitlement: com.apple.developer.storekit.external-purchase-link is present
Info.plist: SKExternalPurchaseCustomLinkRegions set to ["fr"]
App is only available in France via App Store
Observed Behavior
For affected users:
ExternalPurchaseCustomLink.isEligible returns true
token(for:) returns nil (not throwing an error)
The token generation was never previously called for these users
Questions
Under what conditions does token(for:) return nil when isEligible is true?
Is there additional validation I should perform before calling token(for:)?
Are there known issues with token generation on specific iOS versions?
Any guidance on debugging this issue would be appreciated.
Topic:
App & System Services
SubTopic:
StoreKit
Hello,
I seem to have a strange bug when testing 2 of my Apps that calls SubscriptionStoreView(groupID: storekitmanager.groupID), where storekitmanager is using @Observable, with groupID from the Subscription Group in App Store Connect.
They have the following: Yearly, Biannually, and Monthly. Their productIDs and groupIDs have been configured in each app with the correct IDs.
In my main Apple ID, when the SubscriptionStoreView is presented, selecting Monthly, tap Subscribe, and nothing happens. Selecting either Yearly or Biannually, tap Subscribe and the Confirmation Dialog that triggers faceID/touchID will appear correctly. This happens in both Apps for TestFlight.
I have a Manage Subscriptions button that uses:
manageSubscriptionsSheet(isPresented:subscriptionGroupID:)
I can change the subscription to Monthly in that manage subscriptions.
However, if I switch to a Sandbox Apple Account, the "bug" described above does not happen. The Sandbox account when selecting Monthly and tap Subscribe will trigger the Confirmation Dialog (in both Apps). Not sure if my main account is "stuck" in some loop where it is trying to purchase Monthly in TestFlight but it is not completed.
Has anyone ever encountered such a bug?
Hey guys,
This is a general question, but I have been working on an app for a while and I would like to to introduce IAP to the app. I have no clue where to start and chat GPT is no help. I also tried to vibe coding the IAP function and that didn't work out well. Any material or advice would help.
Topic:
App & System Services
SubTopic:
StoreKit
a UK-based user is having trouble completing an in-app purchase.
after going through the typical purchase flow (tapping the button to trigger the in-app purchase sheet, completing Face ID) they see this verification sheet appear over my app and have to go to their banking app to approve the purchase.
after approving the purchase from their banking app, they tap "Payment confirmed on Mobile App" to close the sheet, but then see an alert that suggests the result is .userCancelled.
the purchase does not seem to have completed. the user reports not being charged (despite numerous attempts). plus, i have a "restore purchases" function on App init that would've restored a purchase if it existed.
i have implemented what i think is a typical Storekit.purchase() method (again, the message the user sees is for the .userCancelled case):
func purchase(productId: String) async -> (Bool, String?) {
guard let product = subscriptionProducts.first(where: { $0.id == productId }) else {
return (false, "Product not found")
}
do {
let result = try await product.purchase()
switch result {
case .success(let verification):
switch verification {
case .verified(let transaction):
await transaction.finish()
hasSubscription = true
return (true, nil)
case .unverified:
return (false, "Transaction verification failed")
}
case .userCancelled:
return (false, "No worries, take your time. 😌")
case .pending:
return (false, "Purchase is pending")
u/unknown default:
return (false, "Error purchasing product. If this keeps happening, please contact [email].")
}
} catch {
return (false, "Error purchasing product: \(error.localizedDescription)")
}
}
has anyone dealt with this issue? i was seeing an unusually high number of .userCancelled purchase events from users outside the US, and i'm wondering if some of them were genuine purchase attempts that were blocked by this verification step. 😕
I’m implementing StoreKit External Purchase Custom Links (EU) and so far it is really painful. I am running into a strange, device-specific issue. On 3/4 devices it works. On one device I never get a token at launch nor before a transaction. isEligible is true everywhere. All devices have versions 18.5 and are located in Germany.
Info.plist: SKExternalPurchaseCustomLinkRegions is set to EU storefront codes and I have followed every step in the documentation: https://developer.apple.com/documentation/storekit/externalpurchasecustomlink
Good device: At launch → ACQUISITION = nil, SERVICES = token present. Works consistently.
Faulty device: At launch → ACQUISITION = nil, SERVICES = nil. Same before transaction. No token ever reaches my server from this device.
isEligible is true on both devices.
Any experts or help on the matter?
Topic:
App & System Services
SubTopic:
StoreKit
I set up a sandbox account to test in-app purchases in my development app. I went to settings > dev > sandbox accounts and updated my login in the app store. But I received a 'block'; I can no longer download new versions or anything from the store. I've already removed the sandbox account, and even using my real Apple ID, I can't use the functions.
Topic:
App & System Services
SubTopic:
StoreKit
App is approved and on App Store but Subscription is in review and localizations rejected. no way to edit.
anyone here that go this flow resolved and how?
Some users cannot repurchase a subscription SKU after it has expired.
Flow:
User previously subscribed.
User canceled and the subscription fully expired.
After weeks, user reinstalls the app and taps the same SKU.
StoreKit does not create a new purchase transaction.
Instead, StoreKit always returns the old expired transaction in updatedTransactions.
Therefore, the user is permanently unable to purchase the SKU again.
We have already tried:
Adding payment observer at app launch
Calling finishTransaction for all transactions
Clearing queue at startup
SKReceiptRefreshRequest
Server-side verifyReceipt
Ensuring subscription is truly expired (not in grace/retry)
Not calling restoreCompletedTransactions
None of these resolved the issue. StoreKit still only sends the old transaction and never generates a new one.
Expected behavior:
A new purchase transaction should be created when user taps the expired subscription SKU.
Actual behavior:
StoreKit repeatedly pushes the old expired transaction, blocking new purchases.
We can provide:
Some users cannot repurchase a subscription SKU after it has expired.
Flow:
User previously subscribed.
User canceled and the subscription fully expired.
After weeks, user reinstalls the app and taps the same SKU.
StoreKit does not create a new purchase transaction.
Instead, StoreKit always returns the old expired transaction in updatedTransactions.
Therefore, the user is permanently unable to purchase the SKU again.
We have already tried:
Adding payment observer at app launch
Calling finishTransaction for all transactions
Clearing queue at startup
SKReceiptRefreshRequest
Server-side verifyReceipt
Ensuring subscription is truly expired (not in grace/retry)
Not calling restoreCompletedTransactions
None of these resolved the issue. StoreKit still only sends the old transaction and never generates a new one.
Expected behavior:
A new purchase transaction should be created when user taps the expired subscription SKU.
Actual behavior:
StoreKit repeatedly pushes the old expired transaction, blocking new purchases.
We can provide:
Affected user’s base64 receipt
verifyReceipt full response
Transaction logs (transactionIdentifier, original_transaction_id, productIdentifier, state)
Please help investigate why StoreKit is not allowing a new subscription purchase.
Affected user’s base64 receipt
verifyReceipt full response
Transaction logs (transactionIdentifier, original_transaction_id, productIdentifier, state)
Please help investigate why StoreKit is not allowing a new subscription purchase.
Topic:
App & System Services
SubTopic:
StoreKit
We have 2 monthly subscription tiers that are part of a subscription group, and always have been part of this group. Both are configured with a 1 month trial introductory offer. According to the documentation for auto-renewable subscriptions,:
Users can subscribe to one subscription product per group at a time.
And yet several users have managed to start trials of both products in this group simultaneously, which converted to paid subscriptions after the expiration of the trials, and now are being concurrently billed by Apple for both. How do we completely prevent this from happening?
Scenario:
User is actively subscribed to Monthly Package
From the Device App (Manage Subscriptions), user upgrades to Yearly Package
Purchase completes successfully on device
Issue: Do not receive any server notification for this action
Month Package Purchase Date: 2025-11-11 19:06:45.537 +0600 Month to Yearly Upgradation Date: 2025-12-11 paymentReferenceId: 510002270528780
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
App Store Server Notifications
App Store Server API
会员等级进行升级?需要按天计算费用,像爱奇艺这样是怎么做的?
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
StoreKit
In-App Purchase
App Store Server API
Advanced Commerce API
关于通过Advanced commerce API 创建SKU,有几个问题:
1、通过Advanced commerce API创建的自动续费订阅的SKU是否支持推介优惠、促销优惠?如果可以,是在苹果connect设置吗?
2、已订阅通过connect创建的SKU的用户,是否可以重复订阅通过Advanced commerce API创建的SKU?还是要通过Advanced commerce API变更订阅?
3、Advanced commerce API创建的SKU ,用户订阅成功后,续费的扣款是否仍由苹果发起?还是由开发者自行发起?
1)What's the relationship between ""Texas, child, 16-17, significant change declined" from my 11:03 screenshot below and "revoking"? ie what situation could someone decline but not revoke or vice versa, what is the purpose of the distinction in testing or legally or implications/implementation
2) What is a cause besides a typo to receive the "Can't trigger notification" titled message after using "Revoke"? you can see by my screenshot by comparing the left and right half there is no title.
3) Even if i find a workaround perhaps my info will help someone else or be an opportunity for improved documentation
see:
see my 5:54pm second screenshot
Hello,
I would like to ask about an Apple ID authentication behavior during in-app purchases.
Our app uses a StoreKit 1 (SKPaymentQueue-based) implementation, and there are no differences in the in-app purchase logic between the TestFlight build and the App Store production build.
However, we have observed that some users are prompted to enter their Apple ID password during in-app purchases.
The observed behavior is as follows:
On the first in-app purchase, the system prompts for the Apple ID password
After the password is entered once, subsequent purchases proceed normally using Face ID (double side-button press)
Even after deleting and reinstalling the app, or switching between TestFlight and App Store builds, the password prompt does not reappear if authentication has already occurred
This behavior can occur even when the Apple ID already has an active auto-renewable subscription
The only confirmed change on our side is:
The app is now built with Xcode 26 instead of Xcode 18
Based on this, we are currently considering the following possible causes:
A change in purchase authentication behavior due to the Xcode version update
Expiration of the Apple ID purchase authentication session after a long period without purchases
In addition to these points, we would like to ask:
Are there any other common conditions or security policies in iOS or the App Store that may cause the system to require Apple ID password input during in-app purchases?
Is this behavior considered expected under certain circumstances?
We would appreciate your clarification on whether this is expected system behavior or if there are any implementation aspects we should further review.
Thank you for your support.
Hello,
I would like to ask about an Apple ID authentication behavior during in-app purchases.
Our app uses a StoreKit 1 (SKPaymentQueue-based) implementation, and there are no differences in the in-app purchase logic between the TestFlight build and the App Store production build.
However, we have observed that some users are prompted to enter their Apple ID password during in-app purchases.
The observed behavior is as follows:
On the first in-app purchase, the system prompts for the Apple ID password
After the password is entered once, subsequent purchases proceed normally using Face ID (double side-button press)
Even after deleting and reinstalling the app, or switching between TestFlight and App Store builds, the password prompt does not reappear if authentication has already occurred
This behavior can occur even when the Apple ID already has an active auto-renewable subscription
The only confirmed change on our side is:
The app is now built with Xcode 26 instead of Xcode 18
Based on this, we are currently considering the following possible causes:
A change in purchase authentication behavior due to the Xcode version update
Expiration of the Apple ID purchase authentication session after a long period without purchases
In addition to these points, we would like to ask:
Are there any other common conditions or security policies in iOS or the App Store that may cause the system to require Apple ID password input during in-app purchases?
Is this behavior considered expected under certain circumstances?
We would appreciate your clarification on whether this is expected system behavior or if there are any implementation aspects we should further review.
Thank you for your support.
Topic:
App & System Services
SubTopic:
StoreKit
I’m testing auto-renewable subscription purchases in the sandbox environment.
When I buy a subscription package using a sandbox test user, I don’t receive any App Store Server Notifications from the sandbox.
However, when I use the “Request Test Notification” option in App Store Connect, the notification is received successfully.
My sandbox server notification URL is configured correctly and publicly accessible.
I also call finishTransaction() after purchase, and the receipt is verified successfully with the sandbox verification endpoint.
To further debug, I used the getNotificationHistory API to fetch notifications for yesterday and today (Nov 3–4, 2025).
Apple’s API response does not include any notifications or transaction IDs for my today’s purchases (Nov 4, 2025) — even though I can confirm from logs that those transactions were completed and verified successfully.
It looks like sandbox purchase notifications are not being sent or logged, even though test notifications work fine.
Could someone from Apple please confirm if there’s currently an issue with sandbox server notifications for auto-renewable subscriptions?
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
App Store Connect
In-App Purchase