Subscriptions

RSS for tag

Give 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

Verification Error in Production: Should I Submit My App with the Backend in Sandbox Mode?
Hello, My payment system works correctly when my backend is in sandbox mode, but when I submit my app for review, I get the following error: VerificationException [Error] at SignedDataVerifier.verifyNotification (/Users/---/node_modules/@apple/app-store-server-library/dist/jws_verification.js:126:19) at SignedDataVerifier.verifyAndDecodeNotification (/Users/---/node_modules/@apple/app-store-server-library/dist/jws_verification.js:121:14) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async file:///Users/---/src/api/routes/apple.routes.js:22:18 { status: 2, cause: undefined } Main Question For Apple to approve in-app purchases, should I submit my app for review with the backend in sandbox mode or production? Possible Causes of the Error I would appreciate any suggestions on what might be causing this error and how to fix it. Thanks in advance! 🚀
0
0
142
Feb ’25
404 Error Code when Calling Apple Servers - in-app purchase
Hello everyone, I’m hoping someone might help with auto-renewable subscription validation in Apple’s Sandbox environment. Here’s the situation: My Setup: I’ve configured three auto-renewable subscriptions in App Store Connect and generated an In-App Purchase key (with the correct Issuer ID and Key ID). (I also tried the App Store Connect API Keys) I’m using Apple’s App Store Server API v2 endpoints (GET /inApps/v2/subscriptions/{originalTransactionId}/latest) to fetch the latest subscription status. I’ve created several Sandbox test users (with fresh email addresses), signed out of old test accounts on my devices, and tested purchasing subscriptions anew. What Works: I am receiving valid Server Notifications from Apple (e.g. SUBSCRIBED, DID_RENEW) with the correct environment: "Sandbox" field. My JWT generation appears to be correct because I’m no longer receiving 401 errors—only 404. That suggests Apple accepts the key and credentials. My fallback logic attempts production first; if it sees a 404 or 410, it switches over to the Sandbox endpoint. This is exactly what Apple’s documentation recommends. The Problem: Whenever I query GET https://api.storekit-sandbox.itunes.apple.com/inApps/v2/subscriptions/{originalTransactionId}/latest using the originalTransactionId from Apple’s own Server Notification, Apple returns a 404 (indicating it can’t find that subscription). This happens even though the subscription is active in Sandbox (I see notifications arriving for it). I’ve tried adding a brief waiting period (2 seconds) before calling the Sandbox endpoint, but it consistently returns 404. I’ve also tried multiple retries over a longer timeframe without success. I tested multiple fresh Sandbox test users, ensuring each one was signed in to the device’s App Store. After each new purchase, I still get the same 404. Additional Checks: These are definitely auto-renewable subscriptions, not non-renewing or consumable products. I also tried calling GET /inApps/v2/subscriptions/{transactionId}/latest but I still see 404. I tried everything mentioned above in production as I said to no avail: GET https://api.storekit.itunes.apple.com/inApps/v2/subscriptions/{originalTransactionId}/latest
1
0
377
4w
Apple Developer Program Enrollment Delay
​Hi Colleagues, for the second time in my life I am trying to publish an app on the Apple Store. The first one was a time ago, for another company and I had no issues at all. This time I am facing an extreme delay to approve my enrollment in the Apple Developer Program. Despite my repeated follow-ups through the Apple phone support, I have not received a clear timeline for the completion of my enrollment and this important step is now getting to become urgent. Would you have any guideline recommendation or any other way to contact Apple besides phone and mail/form to check any additional information or action would be required on my end?
1
4
258
Jan ’25
Subscription Paywall Stuck on 'Loading Subscription': Works in Debug, Stuck in TestFlight/Production
Fellow Developers, I'm encountering a strange issue with subscriptions. My paywall properly fetches the products in debug mode when my device is connected to Xcode using a StoreKit Configuration file synced to the app in App Store Connect. However, when I test the app on TestFlight or in production, the paywall only shows "Loading Subscription." I use the SwiftUI: SubscriptionStoreView(productIDs: subscriptionsManager.products.map { $0.id }) { // Subscription paywall content here } Since it works flawlessly with the StoreKit Configuration file in debug mode, I believe I can rule out issues with my SubscriptionManager logic or naming typos. Subscriptions are approved in App Store Connect. What could I be missing here? Thank you!
2
0
224
Jan ’25
Issue with iPad app review. App crashing.
I'm receiving this error message from Apple saying that my app is crashing when they test, but I've already done the tests on the iPad version they recommended and it worked normally. Message below of the review team: Hello, Thank you for your resubmission. Upon further review, we identified additional issues that need your attention. See below for more information. If you have any questions, we are here to help. Reply to this message in App Store Connect and let us know. Review Environment Submission ID: 4f068d93-c30e-431c-b65c-6ff4c3ab1098 Review date: January 23, 2025 Version reviewed: 1.0 Guideline 2.1 - Performance Issue Description The app still crashed during review. Apps that crash negatively impact users. Steps leading to crash: The app crashed upon login attempt. Review device details: Device type: iPad Air (5th generation) OS version: iPadOS 18.2.1 I left the file below crashlog: {"app_name":"MauiApp2","timestamp":"2025-01-27 11:39:16.00 +0000","app_version":"4.0","slice_uuid":"11117a05-c930-3591-b6d9-7905912af710","adam_id":"6740661076","build_version":"4","bundleID":"com.company.MauiApp2","platform":2,"share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"iPhone OS 18.2.1 (22C161)","roots_installed":0,"incident_id":"987579BB-C332-42CF-B7AB-3F019902703A","name":"MauiApp2"} { "uptime" : 40000, "procRole" : "Foreground", "version" : 2, "userID" : 501, "deployVersion" : 210, "modelCode" : "iPad13,16", "coalitionID" : 1424, "osVersion" : { "isEmbedded" : true, "train" : "iPhone OS 18.2.1", "releaseType" : "User", "build" : "22C161" }, "captureTime" : "2025-01-27 11:39:15.7724 +0000", "codeSigningMonitor" : 1, "incident" : "987579BB-C332-42CF-B7AB-3F019902703A", "pid" : 1883, "translated" : false, "cpuType" : "ARM-64", "roots_installed" : 0, "bug_type" : "309", "procLaunch" : "2025-01-27 11:38:57.0672 +0000", "procStartAbsTime" : 979679570352, "procExitAbsTime" : 980128429544, "procName" : "MauiApp2", "procPath" : "\/private\/var\/containers\/Bundle\/Application\/240115B9-6606-406B-BD49-C24EC7F3D436\/MauiApp2.app\/MauiApp2", "bundleInfo" : {"CFBundleShortVersionString":"4.0","CFBundleVersion":"4","CFBundleIdentifier":"com.company.MauiApp2","DTAppStoreToolsBuild":"16C5031b"}, "storeInfo" : {"itemID":"6740661076","deviceIdentifierForVendor":"27BFDD21-822E-47D6-B639-199303E14913","thirdParty":true,"softwareVersionExternalIdentifier":"871814512"}, "parentProc" : "launchd", "parentPid" : 1, "coalitionName" : "com.company.MauiApp2", "crashReporterKey" : "83a5662fa3ae9a4fa99bf1f03c706f755ff38e3d", "appleIntelligenceStatus" : {"state":"unavailable","reasons":["notOptedIn","assetIsNotReady"]}, "wasUnlockedSinceBoot" : 1, "isLocked" : 0, "codeSigningID" : "com.company.MauiApp2", "codeSigningTeamID" : "ALCV75QR7M", "codeSigningFlags" : 570450689, "codeSigningValidationCategory" : 4, "codeSigningTrustLevel" : 7, "instructionByteStream" : {"beforePC":"fyMD1f17v6n9AwCRPOz\/l78DAJH9e8Go\/w9f1sADX9YQKYDSARAA1A==","atPC":"AwEAVH8jA9X9e7+p\/QMAkTHs\/5e\/AwCR\/XvBqP8PX9bAA1\/WECeA0g=="}, "bootSessionUUID" : "942643AD-6AFE-4696-ACEB-603AC2D48B4F", "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"}, "termination" : {"flags":0,"code":6,"namespace":"SIGNAL","indicator":"Abort trap: 6","byProc":"MauiApp2","byPid":1883}, "asi" : {"libsystem_c.dylib":["abort() called"]}, "faultingThread" : 0, "threads" : [{"threadState":{"x":[{"value":0},{"value":0},{"value":0},{"value":0},{"value":18446744071913938304},{"value":8},{"value":6135065824},{"value":6135063504},{"value":2354241331284576430},{"value":2354241335696964078},{"value":1023},{"value":6135063616},{"value":0},{"value":4336219676},{"value":7128134088,"symbolLocation":7344,"symbol":"WebKit::WebPage::requestDocumentEditingContext(WebKit::DocumentEditingContextRequest&&, WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>&&)"},{"value":7128134340,"symbolLocation":7596,"symbol":"WebKit::WebPage::requestDocumentEditingContext(WebKit::DocumentEditingContextRequest&&, WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>&&)"},{"value":328},{"value":8506093888,"symbolLocation":0,"symbol":"_main_thread"},{"value":0},{"value":6},{"value":259},{"value":8506094112,"symbolLocation":224,"symbol":"_main_thread"},{"value":4354417664},{"value":1},{"value":12927714000},{"value":0},{"value":0},{"value":6135069717},{"value":12950787712}],"flavor":"ARM_THREAD_STATE64","lr":{"value":9082160540},"cpsr":{"value":1073745920},"fp":{"value":6135065840},"sp":{"value":6135065808},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8120668884,"matchesCrashFrame":1},"far":{"value":0}},"id":399494,"triggered":true,"name":"tid_103","queue":"com.apple.main-thread","frames"
1
0
297
Jan ’25
How to Restrict In-App Purchases to a Specific User Email or Differentiate Users?
Hello, I am implementing In-App Purchases in my app and want to ensure that only users whose email matches their Apple ID email (the account used on the device as apple account) can purchase the subscription. Is it possible to retrieve the Apple ID email from the device or verify if the email matches the user's email in the app? If this is not feasible, what is the recommended approach to differentiate users and associate subscriptions with specific users in a secure way? For instance, how do I ensure that a subscription is tied to the correct user within my app? I understand privacy constraints, but I am trying to find the best way to match the subscription to the correct user while adhering to Apple's guidelines. Any guidance or best practices would be appreciated. Thank you!
1
0
230
Jan ’25
Transaction.Id from Product.Purchase is different from the transactionId notified by the server notification
Hi, In an auto-renewable subscription scenario, I receive a transaction from Product.Purchase and then send the transaction ID (e.g., 500000000738201) to my API server. After receiving the response, I called transaction.finish(). The account has purchased the subscription before and expired. So it's re-subscribe. And then, I received a RESUBSCRIBE notification from Apple’s server to my API server. I noticed a discrepancy where the transaction ID in the notification is decreased by one (e.g., 500000000738200 instead of 500000000738201). I’m wondering why this discrepancy occurs and how it happens. Best regards, RoyHuang
0
0
193
Jan ’25
inApps/v2/history/ of AppleStoreServerAPI
https://developer.apple.com/documentation/appstoreserverapi/get-v2-history-_transactionid I would like to inquire about the detailed triggers for updating receipts in this API specification. Recently, I was using this API with sort=DESCENDING&revoked=false to retrieve the expiration date of the most recent receipt and determine the subscription status. However, for some reason, an old receipt with an earlier expiration date appeared as the first receipt, and I would like to know the reason for this. Can you provide information on what specific events or actions trigger the updating of receipts in this API? Also, regarding https://developer.apple.com/documentation/appstoreserverapi/status, will statuses 3 and 4 not be returned in the response unless the billing grace period is enabled in the App Store? -- Japanese こちらのAPI仕様ですが、どのようなトリガーでレシートが更新されるのか詳細に伺いたいです。 先日このAPIを使用してsort=DESCENDING&revoked=falseで一番最初のレシートの有効期限を取得して課金状態か判断していたのですが、どういったわけか一番最初のレシートに古い有効期限のレシートが入ってきたので理由を知りたいです。 また、https://developer.apple.com/documentation/appstoreserverapi/status のステータスはAppleStoreで請求猶予期間を有効化しないと3,4はレスポンスされませんか?
0
0
191
Jan ’25
Can users create their own subscription plans?
I'm considering developing an app where users can create their own subscription plans by freely setting their prices, similar to YouTube's membership feature. I understand that in-app purchases must be used to unlock features within the app. With that in mind, I searched for APIs to enable this functionality but couldn't find relevant information. When I contacted Apple directly, they mentioned that they couldn't provide specific answers unless the app is under review. If anyone has knowledge about the following points, I would greatly appreciate your response: Is it possible to implement a feature similar to YouTube's membership using in-app purchase APIs? If it's not feasible with in-app purchases, is it allowed to use external payment services like Stripe?
1
0
145
Jan ’25
ConsumptionRequest fields
As part of ConsumptionRequest fields there's a bit of unclarity. In my case I am only concerned with subscriptions, as they give some premium features in the app. The fields and the questions are the following: playTime: is this the time used in the app in total or just the time the app has been used while using the subscription? consumptionStatus: does this relate only to the user using the premium features he/she paid for? or the fact that the user had access to those features only? Thanks!
0
0
237
Jan ’25
TestFlight Subscription Issue
Hi everyone, I'm finally in the final steps of putting my first app online, but I'm encountering an issue during the review process. I need to fix the subscription, but the Sandbox account isn't being triggered in TestFlight. In the logs, I see the main account being requested instead, and the TestFlight payment process isn't starting. Does anyone know a workaround for this? Thanks in advance for your help!
0
0
255
Jan ’25
Issues testing subscription in testflight
Hi everyone, I'm finally in the final steps of putting my first app online, but I'm encountering an issue during the review process. I need to fix the subscription, but the Sandbox account isn't being triggered in TestFlight. In the logs, I see the main account being requested instead, and the TestFlight payment process isn't starting. Does anyone know a workaround for this? Thanks in advance for your help! Brice
0
0
260
Jan ’25
Does the Apple Store support variable recurring payments like Stripe?
Stripe offers variable payment structures, also known as "irregular recurring payments," which include: Usage-based billing: Charges amounts based on usage during the billing cycle (e.g., minutes used or energy consumed). Quantity-based billing: Charges a pre-agreed amount based on quantity (e.g., number of users in a subscription). Is it possible to implement this type of billing in the Apple Store for apps? How would variations in amounts be handled?
0
0
242
Jan ’25
Skipping In-App Subscription
We currently have an app that contains a monthly subscription to unlock the main functionality. We would like to have a way for our employees to be able to use the app without having to go through this mechanic. For instance, our sales associates and our support staff. I had previously made a promo code field which would check the value with an API to determine whether to validate the subscription or not, but the app was denied since it didn't use the IAP system, which I understand. I'm aware that I could somewhat achieve this behaviour through the use of promo codes, but that would require us to create a new batch of codes periodically, not to mention that every employee would need to have a payment method setup in their device, which we would like to avoid. We could also periodically issue TestFlight builds to bypass this, but once again it's not an ideal solution since it necessitates some periodic and perpetual management. Is there any way I can achieve this while following the App Review Guidelines?
0
0
169
Jan ’25
Apple Developer Program Subscription Issue
Hello everyone, I’m reaching out for assistance regarding an issue with my Apple Developer Program subscription. I made the $99 USD payment for my subscription on January 10, 2025, but my account is still not active, and I am unable to publish my app. According to the process, activation should take up to 48 hours, but it has now been much longer without any updates. Additionally, when I log into the Apple Developer website, I still see the "PURCHASE" button as if the payment was not processed. Has anyone encountered a similar issue? If so, how was it resolved? Any guidance on what steps I should take next would be greatly appreciated. Thank you in advance for your help!
1
1
209
Jan ’25