I know this isn’t the place to report this, but I’m in a Catch 22 situation. You meed to access the app to send a bug report to developers, but I can’t load the app on IOS 18, so I’m reporting it here. The NY Times News App does not open under IOS 18 or iPadOS 18. The subsidiary apps, Games, Cooking, and Audio do.
Subscriptions
RSS for tagGive users access to content, services, or premium features in your app on an ongoing basis with subscriptions, a type of in-app purchase.
Posts under Subscriptions tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Anyone else seeing renewals show up as activations for auto-renewing subscriptions in App Store Connect?
Our app is almost 2 months old on the App Store and we have had monthly subscriptions starting to sell almost on day one so we've had one full subscription monthly cycle go by for a bunch of our paid users. We noticed though that after 4-5 weeks, there was only one subscription renewal shown but we also were't seeing cancellations or a drop in our subscriber numbers. We just kept seeing more activations. Now at the 8 week mark we are very sure that renewals are showing as activations instead since our subscriber numbers aren't tanking, but instead slowly climbing, and we've only had a handful of renewals or cancellations.
We'll see say 10 subscription activations in a day but then our total paid subscriber numbers only go up by 5, so once again, assuming 5 are actually renewals and not activations.
We do see refunds but at the exact same time as a longer subscription period sells so assuming an upgrade and the total paid subscribers doesn't go down.
Supposedly our retention rate is 2% but that doesn't seem to match our subscriber numbers at all. Assume this is due to renewals being counted as activations instead.
We are NOT using server side validation or tracking of sales, using StoreKit to validate on device and unlock features. So all of this is from the App Store Connect web site.
None of this is really an issue right this moment but longer term we'd like to better understand how our retention is going vs new sales. Are we just misunderstanding what the categories mean? We assume this isn't an issue with how we implemented StoreKit in the app but maybe it is?
Thanks!
Colin
I recently had a request from a Product Owner to implement capability like Netflix has to enable users to switch their payment method from App Store Subscription to Credit Card on our website, as per capability that Netflix has in their account management portal.
We tested it today with a colleague who was paying for Netflix through iOS in-app subscription:
In the Netflix account management pages it showed that he was currently paying via In App Subscription
He updated his payment method to Credit Card in their website's account management portal.
Almost immediately after adding his Credit Card in his iOS Subscription Management settings (we could see the the subscription had been set to no longer renew, with an expiry date)
How is this done - I can't see any API in App Store Server API documentation that gives us a way of cancelling / preventing renewal of subscriptions on behalf of a user... But Netflix can clearly do it somehow...
Hi I'm from India, My apple developer account has expired, also I have removed my previous payment method UPI because which is my friend's UPI, now I have added a new payment method but while renew my plan it is showing error like Your Purchase could not be completed. Please someone help me.
I have an APP. After User A (Apple ID) subscribes, the user switches to User B (Apple ID) in the App Store. I want to cancel the subscription. If the user switches back to User A (Apple ID) in the App Store, I want to restore the subscription. How can I achieve this? According to the official documentation, it is not recommended to call the restore function frequently.
I'm working in Apple's Sandbox environment to implement in-app purchase of an auto-renewable subscription.
I followed the instructions at this link in order to Enable Billing Grace Period: https://developer.apple.com/help/app-store-connect/manage-subscriptions/enable-billing-grace-period-for-auto-renewable-subscriptions.
However, when I receive an App Store Server Notification for when the user's billing method fails (DID_FAIL_TO_RENEW), it includes no information about the gracePeriodExpiresDate and we never get a GRACE_PERIOD_EXPIRED notification.
Logs showing App Store Server Notification not reflecting Grace Period Enabled.
I enabled grace period in App Store Connect like three weeks ago, so it's not a delay there.
What can I do to test out Billing Grace Period? Is this just an Apple bug?
Hi!
I'm trying to set up a test account in the App Connect Sandbox for testing payments and I'm getting this error:
"Something Went Wrong. Try again later."
Steps to repro:
Login to App Store Connect
Go to Users and Access
Go to Sandbox
Go to Test Accounts - Note: I see the same error here before even starting to add an account
Click Add Test Account button
Fill out form
Click Create button
Result:
I receive the "Something Went Wrong. Try again later." error with no test account created.
Expected result:
A test account created that I can use to test payment flows in the sandbox before submitting app for review.
Any help here would be awesome so we can test before we submit this app! 🙏
In my application I have 3 types of monthly auto-renewing subscriptions.
Pro 3.99$ Premium 2.99$ Standard 1.99$
A user who is already having a standard subscription plan, plans to upgrade to Premium after 15days of usage. In this case who is responsible for refunding the remaining amount on usage charge. If its developers responsibility what is the API to use and how to calculate refund.
Greetings,
for the past 2+ weeks I have been going back and forth with the Apple Review team regarding the App Completeness rule.
We are using React-Native-IAP package for our in-app purchases and have an issue where in the development environment using sandbox user the purchases show up without issues however when the project goes to review the review team is unable to see these purchases.
We have tried explaining that you need to use a physical device as react-native IAP purchases do not work on simulators but have not reached a resolution.
For example if we make a production build and run it on a physical IOS devices with sandbox users the purchases show up without issues.
Can anyone advise what should be done, so it goes through the review? Even if you do not use react-native any help is welcome! Because this is devastating.
Hello,
I'm trying to understand what happens when a subscribed customer of a subscription A purchases a promotional offer for the same subscription A.
Let's say the product is a yearly subscription priced at $100. When the month 7 starts (6 months remaining in the regular subscription period), I send the user a promotional offer for the same product but priced at $25 for the first year (100$ afterwards) and he accepts the offer.
Is the promotional offer started only at the end of the current year (after the 6 remaining months) or is it started immediately and he gets a pro-rata refund for the 6 remaining months?
Thanks.
Hello,
I am currently implementing server-side handling for in-app subscription payments and using App Store Server Notifications V2 to receive notifications with a TestFlight account.
However, I am not receiving EXPIRED notifications, although I am successfully receiving other notifications such as SUBSCRIBED, DID_RENEW, and DID_CHANGE_RENEWAL_PREF.
Here are some details of my observations:
Until a certain point, I was receiving EXPIRED notifications without any issues, but they stopped coming in after that point.
Each subscription renews every 3 minutes in TestFlight account, and I receive DID_RENEW notifications 7 to 12 times. According to the official documentation, the subscriptions should renew up to 12 times, but I am not receiving exactly 12 DID_RENEW notifications. This inconsistency might be related to the issue.
Other notifications (SUBSCRIBED, DID_RENEW, DID_CHANGE_RENEWAL_PREF) are received without any issues.
Could anyone provide insight into why this might be happening and suggest any alternative methods to handle subscription expirations in case the EXPIRED notifications are not reliable?
Thank you for your assistance.
Relevant Official Documentation
App Store Server Notifications V2
App Store Server Notifications V2_notificationType
Testing in-app purchases with sandbox
Current Server Implementation
Below is the Kotlin Spring Boot server code currently implemented for handling App Store Server Notifications V2:
@RestController
class ProductIosController(
private val productIosService: ProductIosService,
private val appStoreNotificationService: AppStoreNotificationService,
) : BaseController {
@PostMapping("/api/v1/ios-products/app-store-notifications-v2")
fun handleNotification(@RequestBody @Valid notification: AppStoreNotificationRequest): CustomResponse {
appStoreNotificationService.processNotification(notification)
return CustomResponse.ok()
}
}
@Service
class AppStoreNotificationService(
@Qualifier("appStoreClient") private val appStoreServerAPIClient: AppStoreServerAPIClient,
@Qualifier("signedVerifier") private val signedDataVerifier: SignedDataVerifier,
) {
@Transactional
fun processNotification(notification: AppStoreNotificationRequest) {
logger.info("signedPayload: ${notification.signedPayload}")
val decodedPayload = verifyAndDecodeSignedPayload(notification.signedPayload)
val notificationType = decodedPayload.notificationType
val signedTransactionInfo = decodedPayload.data.signedTransactionInfo
val transaction = signedDataVerifier.verifyAndDecodeTransaction(signedTransactionInfo)
val (user, product) = fetchUserAndProduct(transaction)
when (notificationType) {
SUBSCRIBED -> processSubscriptionPurchase(user, product, decodedPayload, transaction)
DID_CHANGE_RENEWAL_PREF -> processSubscriptionGradeChange(user, product, decodedPayload, transaction)
DID_CHANGE_RENEWAL_STATUS -> processRenewalStatusChange(transaction)
OFFER_REDEEMED -> processOfferRedeemed(transaction)
DID_RENEW -> processSubscriptionRenewal(user, product, decodedPayload, transaction)
EXPIRED -> processSubscriptionExpiration(user, product)
DID_FAIL_TO_RENEW -> processFailedRenewal(transaction)
GRACE_PERIOD_EXPIRED -> processSubscriptionGracePeriodExpiration(transaction)
PRICE_INCREASE -> processPriceIncrease(transaction)
REFUND -> processSubscriptionRefund(transaction)
REFUND_DECLINED -> processRefundDeclined(transaction)
CONSUMPTION_REQUEST -> processConsumptionRequest(transaction)
RENEWAL_EXTENDED -> processRenewalExtension(transaction)
REVOKE -> processSubscriptionRevocation(transaction)
TEST -> processTestNotification(transaction)
RENEWAL_EXTENSION -> processRenewalExtension(transaction)
REFUND_REVERSED -> processRefundReversed(transaction)
EXTERNAL_PURCHASE_TOKEN -> processExternalPurchaseToken(transaction)
else -> logger.warn("Unsupported notification type: ${notificationType.value}")
}
}
Hi,
I can't add Sandbox test account for like ~3 days because of the errors in below:
I believe the dashboard broken somehow, can somebody help?
I'm developing an application where user can access contents based on In-app purchase subscription.As per the app requirement I want to restrict user from accessing the content when they try to access from a different country.
Example:
Being a user I brought subscription while I was in India by paying lets say 10$ instead of actual 20$ (50% discount for India users).
Lets say I am travelling to other country and in order to use the content user now has to pay the remaining 10$.
As per apple's policy is this allowed? , if yes, then how to achieve this.
My developer account pending for more that 48 hours.
When I login to http://developer.apple.com, it show the following message:
Purchase your membership.
To continue your enrollment, complete your purchase now.
Your purchase may take up to 48 hours to process.
I have already paid the membership fee and got the E-invoice from apple.
Could anyone help to solve this problem?
Thanks.
Hi,
We previously scheduled a price change (which did NOT affect existing subscribers) however months later, we have now made a decision to apply the increase to all subscribers.
As the price has not increased, I only see the option to preserve and isn't obvious if this has any effect on those grandfathered in the lower price.
Can anyone confirm or must I increase the price again?
I have an APP with its own user system. I configured subscriptions in the Apple Store and divided them into levels 1 and 2. User logs in to the App Store with apple id A, then logs in to my APP with account A1 and subscribes to level 1 subscription. At this time, he switches to the App Store, switches apple id to B, then returns to my APP (the APP user is still A1 at this time), finds the previous subscription and upgrades it. At this time, apple ids A and B will be charged for subscription at the same time. I need to restrict this operation. My solution is to obtain the user's current valid subscription from the App Store when upgrading. If it cannot be obtained, the user is prohibited from upgrading. However, I only found "Restoring purchased products" from Apple's documentation. This document only explains how to restore completed transactions and cannot be called frequently. Are there any other solutions or APIs?
Hello
Could you please tell me what's wrong? I am publishing my application for the first time. I have already put Terms of Use in the application settings. What is missing?
Guideline 3.1.2 - Business - Payments - Subscriptions
3.1.2(c) Subscription Information Before asking a customer to subscribe, you should clearly describe what the user will get for the price. How many issues per month? How much cloud storage? What kind of access to your service? Ensure you clearly communicate the requirements described in Schedule 2 of the Apple Developer Program License Agreement.
Issue Description
The submission did not include all the required information for apps offering auto-renewable subscriptions. Apps offering auto-renewable subscriptions must include all of the following required information in the binary:
Title of auto-renewing subscription, which may be the same as the in-app purchase product name
Length of subscription
Price of subscription, and price per unit if appropriate
Functional links to the privacy policy and Terms of Use (EULA)
The app metadata must also include functional links to the privacy policy and Terms of Use (EULA).
Next Steps
Update the app's metadata to include the following required information:
A functional link to the Terms of Use (EULA). If you are using the standard Apple Terms of Use (EULA), include a link to the Terms of Use in the App Description. If you are using a custom EULA, add it in App Store Connect.
Hi,
I would like to run a seasonal discount on my app and offer -30% off for subscribing for the first year to all new and lapsed users.
I can achieve that in two ways:
Create a new Subscription with an Introductory offer (for the new users). And add a Promotional offer to existing subscription (for the lapsed users).
or
Add Offer Code to existing subscription. Make it available for new users and previous subscribers.
It seems that both ways produce the same result, which one should I prefer? Are there any caveats to them?
Thank you!
My app has a single subscription group called Premium that contains two products with different billing periods - monthly and yearly. All tests are made in Apples's Sandbox environment with sandbox user.
I am currently testing a scenario, where the user is subscribed to the monthly product, subsequently cancels the subscription from the App Store subscriptions page, and before the subscription expires, he wants to re-enable it (same monthly product). If the subscription is re-enabled from the App Store subscriptions page, my server gets a notification about the changed subscription renewal status and everything works well. This scenario is documented at the bottom of the page here: https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchases_with_sandbox/testing_disabling_auto-renew#3780478
I however also want to support the scenario where the user can re-enable the subscription before it expires from the app itself. To do so, if the subscription is cancelled, but not yet expired, I show the user a button Re-activate. When this button is clicked, I initiate a purchase of the same monthly product, the IAP correctly shows the payment sheet and once I click Subscribe in the In App Purchase payment sheet, it goes through without any issues. However, my app subsequently receives a callback that the purchase failed:
<SKPaymentQueue: 0x280f1fa10>: Payment completed with error: Error Domain=ASDErrorDomain Code=500 "Unhandled exception" UserInfo={NSUnderlyingError=0x2803a4720 {Error Domain=AMSErrorDomain Code=301 "Invalid Status Code" UserInfo={NSLocalizedDescription=Invalid Status Code, AMSURL=https://sandbox.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy?REDACTED, AMSStatusCode=500, NSLocalizedFailureReason=The response has an invalid status code}}, NSLocalizedFailureReason=An unknown error occurred, NSLocalizedDescription=Unhandled exception}
This seems like the purchase failed with invalid status, but strangely enough, my server receives a notification that the subscription renewal status was changed to AUTO_RENEW_ENABLED and if I check the App Store subscriptions, I can see that its not cancelled anymore. The subscription also gets renewed at the end of the billing period, where it would have otherwise been cancelled. So in other words, everything seems to work except the purchase error above.
My question is, what could be the reason for this? Perhaps Apple does not support re-enabling subscription directly from the App, but only from the App Store subscription page? Or perhaps its just a limitation of Apple's sandbox environment and I would not receive this payment error in production environment?
Hello.
I received a rejection on a new application in the first release for some unknown reason:
2.1.0 Performance: App Completeness
Bug description: Specifically, no action occurred after completing in-app purchase.
and a screenshot of the paywall with products (prices). My products load from RevenueCat, and when tested in TestFlight, there are no issues. Please tell me what could be the problem?