Describe the bug
A clear and concise description of what the bug is. The more detail you can provide the faster our team will be able to triage and resolve the issue. Do not remove any of the steps from the template below. If a step is not applicable to your issue, please leave that step empty.
I'm quite inexperienced with RevenueCat, so I apologize if I am not following proper form, and it is likely what is tripping me up.
In production on iOS, when users start trial of my only product they successfully complete the purchase, but the purchase screen stays, and the user is not registered as paid even when the app is reopened.
I can see the trial in iOS settings under subscriptions.
I am unable to recreate the issue in sandbox mode where payment works without problems.
It is not caught by Apples review process either.
Environment
Platform: iOS
SDK version: 5.6.0
StoreKit version:
[ ] StoreKit 1 (default on versions <5.0.0. Can be enabled in versions >=5.0.0 with .with(storeKitVersion: .storeKit1))
[x] StoreKit 2 (default on versions >=5.0.0)
OS version: 18.0
Xcode version: 15.4
Device and/or simulator:
[X] Device
[ ] Simulator
Environment:
[ ] Sandbox
[ ] TestFlight
[X] Production
How widespread is the issue. Percentage of devices affected.
I have multiple reports from my separate users, so I fear it's everyone.
Debug logs that reproduce the issue. Complete logs with Purchases.logLevel = .verbose will help us debug this issue.
What I captured from Xcode in production environment:
default 09:26:14.068383-0500 storekitd AMSPurchaseTask: [9CD3F2E1_SK2] Purchase completed successfully
default 09:26:14.068572-0500 storekitd AMSPurchaseTask: [9CD3F2E1_SK2] === Finished ===
default 09:26:14.068636-0500 storekitd [9CD3F2E1_SK2] Payment complete
default 09:26:14.068700-0500 storekitd [9CD3F2E1_SK2] 0 transactions in response
default 09:26:14.073381-0500 storekitd [9CD3F2E1_SK2] Forcing server transaction sync for legacy purchase
default 09:26:14.073445-0500 storekitd [9CD3F2E1_SK2] Syncing server transactions
error 09:26:14.073820-0500 storekitd [9CD3F2E1_SK2] Payment completed with no transactions
default 09:26:14.073422-0500 storekitd [9CD3F2E1_SK2] Forcing server transaction sync for legacy purchase
default 09:26:14.073491-0500 storekitd [9CD3F2E1_SK2] Syncing server transactions
error 09:26:14.073860-0500 storekitd [9CD3F2E1_SK2] Payment completed with no transactions
default 09:26:14.073402-0500 storekitd [9CD3F2E1_SK2] Forcing server transaction sync for legacy purchase
default 09:26:14.073470-0500 storekitd [9CD3F2E1_SK2] Syncing server transactions
error 09:26:14.073841-0500 storekitd [9CD3F2E1_SK2] Payment completed with no transactions
error 09:26:14.075148-0500 Runner Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=825 "No transactions in response" UserInfo={NSDebugDescription=No transactions in response}
error 09:26:14.075186-0500 Runner Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=825 "No transactions in response" UserInfo={NSDebugDescription=No transactions in response}
error 09:26:14.075166-0500 Runner Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=825 "No transactions in response" UserInfo={NSDebugDescription=No transactions in response}
default 09:26:14.076987-0500 storekitd AMSURLRequestEncoder: [9CD3F2E1_SK2] Encoding request for URL: https://mzstorekit.itunes.apple.com/inApps/v1/history?guid=00008130-000278D13EDA001C&reason=purchase
{
account = <ACAccount: 0xbc63289a0 type = iTunesStore | backingID = 6E9B6AF3-7DB1-4D0A-82ED-5ED1781B16C7 | username = tobiaspalludan@gmail.com | altDSID = 000518-08-59ae2873-c936-44f6-bdd0-0423268e133b | DSID = 17320517425 | active = true | storefront = 143458-11,29>
mediaType = com.apple.AppleMediaServices.accountmediatype.production
}
default 09:26:14.077050-0500 storekitd AMSURLRequestEncoder: [9CD3F2E1_SK2] Encoding request for URL: https://mzstorekit.itunes.apple.com/inApps/v1/history?guid=00008130-000278D13EDA001C&reason=purchase
{
account = <ACAccount: 0xbc63289a0 type = iTunesStore | backingID = 6E9B6AF3-7DB1-4D0A-82ED-5ED1781B16C7 | username = tobiaspalludan@gmail.com | altDSID = 000518-08-59ae2873-c936-44f6-bdd0-0423268e133b | DSID = 17320517425 | active = true | storefront = 143458-11,29>
mediaType = com.apple.AppleMediaServices.accountmediatype.production
}
default 09:26:14.077018-0500 storekitd AMSURLRequestEncoder: [9CD3F2E1_SK2] Encoding request for URL: https://mzstorekit.itunes.apple.com/inApps/v1/history?guid=00008130-000278D13EDA001C&reason=purchase
{
account = <ACAccount: 0xbc63289a0 type = iTunesStore | backingID = 6E9B6AF3-7DB1-4D0A-82ED-5ED1781B16C7 | username = tobiaspalludan@gmail.com | altDSID = 000518-08-59ae2873-c936-44f6-bdd0-0423268e133b | DSID = 17320517425 | active = true | storefront = 143458-11,29>
mediaType = com.apple.AppleMediaServices.accountmediatype.production
}
error 09:26:14.077811-0500 Runner ERROR: 💰 Product purchase for 'monthlystar1' failed with error: unknown
error 09:26:14.077790-0500 Runner ERROR: 💰 Product purchase for 'monthlystar1' failed with error: unknown
error 09:26:14.077832-0500 Runner ERROR: 💰 Product purchase for 'monthlystar1' failed with error: unknown
What I'm getting from the simulator:
DEBUG: ℹ️ SDK Version - 5.6.0
DEBUG: ℹ️ Bundle ID - dk.themusicstar.themusicstar
DEBUG: ℹ️ System Version - Version 17.5 (Build 21F79)
DEBUG: ℹ️ Observing StoreKit.Transaction.updates
DEBUG: ℹ️ Using a simulator. Ensure you have a StoreKit Config file set up before trying to fetch products or make purchases.
See https://errors.rev.cat/testing-in-simulator
for more details.
DEBUG: 👤 No initial App User ID
DEBUG: ℹ️ Purchases is configured with response verification disabled
DEBUG: ℹ️ Purchases is configured with StoreKit version 2
VERBOSE: Purchases.init: created new Purchases instance: Purchases (0x0000000106b0ec30)
StoreKit Wrapper: right(<RevenueCat.PaymentQueueWrapper: 0x6000002a0c60>)
VERBOSE: Purchases.deinit: Purchases (0x000000010671e150)
VERBOSE: Closing FileHandler for: file:///Users/louisejensen/Library/Developer/CoreSimulator/Devices/F486CAA9-1E40-48CA-AF94-36307C76D75C/data/Containers/Data/Application/D3A91E66-6ABB-45BE-8684-FF88A747ADA6/Library/Application%20Support/revenuecat/paywall_event_store
VERBOSE: PurchasesOrchestrator.deinit: PurchasesOrchestrator (0x0000000106b06860)
VERBOSE: DeviceCache.deinit: DeviceCache (0x000060000291dd50)
DEBUG: ℹ️ Delegate set
VERBOSE: Updating all caches
DEBUG: ℹ️ No cached Offerings, fetching from network
DEBUG: ℹ️ Offerings cache is stale, updating from network in foreground
VERBOSE: Enqueing network operation 'GetOfferingsOperation' with cache key: 'GetOfferingsOperation $RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3'
DEBUG: ℹ️ Network operation 'GetOfferingsOperation' found with the same cache key 'GetOfferingsOperation $RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3'. Skipping request.
DEBUG: ℹ️ GetOfferingsOperation: Started
DEBUG: ℹ️ There are no requests currently running, starting request GET /v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3/offerings
VERBOSE: Using etag '54a08b56ddb353c3' for request to 'https://api.revenuecat.com/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3/offerings
'. Validation time: 2024-11-27 15:58:50 +0000
DEBUG: ℹ️ API request started: GET '/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3/offerings'
VERBOSE: Enqueing network operation 'GetCustomerInfoOperation' with cache key: 'GetCustomerInfoOperation $RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3'
VERBOSE: Storing etag '54a08b56ddb353c3' for request to 'https://api.revenuecat.com/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3/offerings
' (success)
DEBUG: ℹ️ API request completed: GET '/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3/offerings' (304)
Request-ID: 'bff4ad17-93d1-4006-a5c8-f50c11f42de7'; Amzn-Trace-ID: 'Root=1-674741bc-174abd654848ee6b6e1e4a9e'
DEBUG: ℹ️ No existing products cached, starting store products request for: ["monthlystar1"]
DEBUG: ℹ️ Found an existing request for products: ["monthlystar1"], appending to completion
DEBUG: ℹ️ GetOfferingsOperation: Finished
DEBUG: ℹ️ Serial request done: GET /v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3/offerings, 0 requests left in the queue
DEBUG: ℹ️ GetCustomerInfoOperation: Started
DEBUG: ℹ️ There are no requests currently running, starting request GET /v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3
VERBOSE: Using etag 'acda4979a4583516' for request to 'https://api.revenuecat.com/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3
'. Validation time: 2024-11-27 15:58:50 +0000
DEBUG: ℹ️ API request started: GET '/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3'
DEBUG: 😻 Store products request received response
DEBUG: ℹ️ Store products request finished
DEBUG: 😻 Offerings updated from network.
DEBUG: 😻 Offerings updated from network.
flutter: Offerings(all: {default: Offering(identifier: default, serverDescription: The default offering to the user., metadata: {}, availablePackages: [Package(identifier: $rc_monthly, packageType: PackageType.monthly, storeProduct: StoreProduct(identifier: monthlystar1, description: Full access to all features in the Music Star, title: Monthly subscription, price: 6.49, priceString: $6.49, currencyCode: USD, introductoryPrice: IntroductoryPrice(price: 0.0, priceString: $0.00, period: P3D, cycles: 1, periodUnit: PeriodUnit.day, periodNumberOfUnits: 3), discounts: [], productCategory: ProductCategory.subscription, defaultOption: null, subscriptionOptions: null, presentedOfferingContext: null, subscriptionPeriod: P1M), presentedOfferingContext: PresentedOfferingContext(offeringIdentifier: default, placementIdentifier: null, targetingContext: null))], lifetime: null, annual: null, sixMonth: null, threeMonth: null, twoMonth: null, monthly: Package(identifier: $rc_monthly, packageType: PackageType.monthly, storeProduct: StoreProduct(identifier: monthlystar1, description: Full access to all features in the Music Star, title: Monthly subscription, price: 6.49, priceString: $6.49, currencyCode: USD, introductoryPrice: IntroductoryPrice(price: 0.0, priceString: $0.00, period: P3D, cycles: 1, periodUnit: PeriodUnit.day, periodNumberOfUnits: 3), discounts: [], productCategory: ProductCategory.subscription, defaultOption: null, subscriptionOptions: null, presentedOfferingContext: null, subscriptionPeriod: P1M), presentedOfferingContext: PresentedOfferingContext(offeringIdentifier: default, placementIdentifier: null, targetingContext: null)), weekly: null)}, current: Offering(identifier: default, serverDescription: The default offering to the user., metadata: {}, availablePackages: [Package(identifier: $rc_monthly, packageType: PackageType.monthly, storeProduct: StoreProduct(identifier: monthlystar1, description: Full access to all features in the Music Star, title: Monthly subscription, price: 6.49, priceString: $6.49, currencyCode: USD, introductoryPrice: IntroductoryPrice(price: 0.0, priceString: $0.00, period: P3D, cycles: 1, periodUnit: PeriodUnit.day, periodNumberOfUnits: 3), discounts: [], productCategory: ProductCategory.subscription, defaultOption: null, subscriptionOptions: null, presentedOfferingContext: null, subscriptionPeriod: P1M), presentedOfferingContext: PresentedOfferingContext(offeringIdentifier: default, placementIdentifier: null, targetingContext: null))], lifetime: null, annual: null, sixMonth: null, threeMonth: null, twoMonth: null, monthly: Package(identifier: $rc_monthly, packageType: PackageType.monthly, storeProduct: StoreProduct(identifier: monthlystar1, description: Full access to all features in the Music Star, title: Monthly subscription, price: 6.49, priceString: $6.49, currencyCode: USD, introductoryPrice: IntroductoryPrice(price: 0.0, priceString: $0.00, period: P3D, cycles: 1, periodUnit: PeriodUnit.day, periodNumberOfUnits: 3), discounts: [], productCategory: ProductCategory.subscription, defaultOption: null, subscriptionOptions: null, presentedOfferingContext: null, subscriptionPeriod: P1M), presentedOfferingContext: PresentedOfferingContext(offeringIdentifier: default, placementIdentifier: null, targetingContext: null)), weekly: null))
VERBOSE: Storing etag 'acda4979a4583516' for request to 'https://api.revenuecat.com/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3
' (createdSuccess)
DEBUG: ℹ️ API request completed: GET '/v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3' (304)
Request-ID: 'f76e4da2-b8d1-45e4-8450-444e0fa8590e'; Amzn-Trace-ID: 'Root=1-674741bc-416701923cdb6dd6651fd2fa'
VERBOSE: Updating CustomerInfo '$RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3' request date: 2024-11-27 15:58:52 +0000
DEBUG: 😻 CustomerInfo updated from network.
DEBUG: ℹ️ GetCustomerInfoOperation: Finished
DEBUG: ℹ️ Serial request done: GET /v1/subscribers/$RCAnonymousID%3Ab57d2ffb50b442128c419d105eb4ffc3, 0 requests left in the queue
flutter: Buy package button pressed for package: monthlystar1
DEBUG: ℹ️ Vending Offerings from memory cache
INFO: 💰 Purchasing Product 'monthlystar1' from package in Offering 'default'
DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3
DEBUG: ℹ️ TransactionPoster: handling transaction '0' for product 'monthlystar1' (date: 2024-11-27 15:59:55 +0000) in Offering 'default'
DEBUG: ℹ️ Skipping products request for these products because they were already cached: ["monthlystar1"]
VERBOSE: Enqueing network operation 'PostReceiptDataOperation' with cache key: 'PostReceiptDataOperation $RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3-true-5770219e1e9d9bb59bb3ccd4616110e9ad0bc4b1bd72a4127601c9ae5a9f57e0
-monthlystar1-6.49-USD-USA-2-0-20578275-P1M-P3D-2
-default-false
-["$attConsentStatus": [SubscriberAttribute] key: $attConsentStatus value: notDetermined setTime: 2024-11-27 15:59:57 +0000]'
DEBUG: ℹ️ PostReceiptDataOperation: Started
DEBUG: ℹ️ PostReceiptDataOperation: Posting StoreKit 2 receipt (source: 'purchase'):
{
"bundle_id" : "dk.themusicstar.themusicstar",
"environment" : "xcode",
"original_application_version" : "56",
"original_purchase_date" : "1970-01-01T00:00:00Z",
"subscription_status" : {
"20578275" : [
{
"renewal_info" : "eyJ0eXAiOiJKV1QiLCJ4NWMiOlsiTUlJQnl6Q0NBWEdnQXdJQkFnSUJBVEFLQmdncWhrak9QUVFEQWpCSU1TSXdJQVlEVlFRREV4bFRkRzl5WlV0cGRDQlVaWE4wYVc1bklHbHVJRmhqYjJSbE1TSXdJQVlEVlFRS0V4bFRkRzl5WlV0cGRDQlVaWE4wYVc1bklHbHVJRmhqYjJSbE1CNFhEVEkwTVRFeU56RTFOVGsxTlZvWERUSTFNVEV5TnpFMU5UazFOVm93U0RFaU1DQUdBMVVFQXhNWlUzUnZjbVZMYVhRZ1ZHVnpkR2x1WnlCcGJpQllZMjlrWlRFaU1DQUdBMVVFQ2hNWlUzUnZjbVZMYVhRZ1ZHVnpkR2x1WnlCcGJpQllZMjlrWlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQlBSaWdiVFkyZUZkVGVWUE5VMDYySDBwOHl1Y1ZBXC9NaE4yOHc3eHlMOGc5Q0lhMkVqZDFaaUh1eGlyanp5WTc4RFp2Q1h6bXp3SmZ1eTNjeENXd3hwK2pUREJLTUJJR0ExVWRFd0VCXC93UUlNQVlCQWY4Q0FRQXdKQVlEVlIwUkJCMHdHNEVaVTNSdmNtVkxhWFFnVkdWemRHbHVaeUJwYmlCWVkyOWtaVEFPQmdOVkhROEJBZjhFQkFNQ0I0QXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTDJ1aFhjRmRJamZhMWtpSVduVml0eGNaYTh0MTVsZ1lWTklESkRLYVZ2UkFpQnhiQUVsVUh0SFFXeTlpSlBpZFd1RFh6azFSWHlVSTFyMHVvOG9pOE9ENmc9PSJdLCJhbGciOiJFUzI1NiIsImtpZCI6IkFwcGxlX1hjb2RlX0tleSJ9.eyJwcm9kdWN0SWQiOiJtb250aGx5c3RhcjEiLCJzaWduZWREYXRlIjoxNzMyNzIzMTk3MzE1LCJyZW5ld2FsRGF0ZSI6MTczMjk4MjM5NTUzMCwiYXV0b1JlbmV3UHJvZHVjdElkIjoibW9udGhseXN0YXIxIiwicmVjZW50U3Vic2NyaXB0aW9uU3RhcnREYXRlIjoxNzMyNzIzMTk1NTMwLCJvcmlnaW5hbFRyYW5zYWN0aW9uSWQiOiIwIiwiYXV0b1JlbmV3U3RhdHVzIjoxLCJkZXZpY2VWZXJpZmljYXRpb25Ob25jZSI6Ijg1NTEyYjQwLWY0MTktNGI0MC05NWY4LWI1NDg2ZWRkZWY0ZSIsImVudmlyb25tZW50IjoiWGNvZGUiLCJkZXZpY2VWZXJpZmljYXRpb24iOiJwZTViSm1GMzA3UXVOY3dpdk1KSzZsSXZBYm15OFdzRHNcL0ZRTGJcL09iVXZrZGlkNzAreGVITVdZSjc4c2Q0b1UifQ.eVhVSucGYvJOitve_aInUsU9Xa2Qiw_qYdHz1Z8MYnMTV84kVO51tfEOt9n1v61a6sn4yrj_RmCbayitI40cxg",
"state" : 1,
"transaction" : "eyJ0eXAiOiJKV1QiLCJ4NWMiOlsiTUlJQnl6Q0NBWEdnQXdJQkFnSUJBVEFLQmdncWhrak9QUVFEQWpCSU1TSXdJQVlEVlFRREV4bFRkRzl5WlV0cGRDQlVaWE4wYVc1bklHbHVJRmhqYjJSbE1TSXdJQVlEVlFRS0V4bFRkRzl5WlV0cGRDQlVaWE4wYVc1bklHbHVJRmhqYjJSbE1CNFhEVEkwTVRFeU56RTFOVGsxTlZvWERUSTFNVEV5TnpFMU5UazFOVm93U0RFaU1DQUdBMVVFQXhNWlUzUnZjbVZMYVhRZ1ZHVnpkR2x1WnlCcGJpQllZMjlrWlRFaU1DQUdBMVVFQ2hNWlUzUnZjbVZMYVhRZ1ZHVnpkR2x1WnlCcGJpQllZMjlrWlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQlBSaWdiVFkyZUZkVGVWUE5VMDYySDBwOHl1Y1ZBXC9NaE4yOHc3eHlMOGc5Q0lhMkVqZDFaaUh1eGlyanp5WTc4RFp2Q1h6bXp3SmZ1eTNjeENXd3hwK2pUREJLTUJJR0ExVWRFd0VCXC93UUlNQVlCQWY4Q0FRQXdKQVlEVlIwUkJCMHdHNEVaVTNSdmNtVkxhWFFnVkdWemRHbHVaeUJwYmlCWVkyOWtaVEFPQmdOVkhROEJBZjhFQkFNQ0I0QXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTDJ1aFhjRmRJamZhMWtpSVduVml0eGNaYTh0MTVsZ1lWTklESkRLYVZ2UkFpQnhiQUVsVUh0SFFXeTlpSlBpZFd1RFh6azFSWHlVSTFyMHVvOG9pOE9ENmc9PSJdLCJhbGciOiJFUzI1NiIsImtpZCI6IkFwcGxlX1hjb2RlX0tleSJ9.eyJzaWduZWREYXRlIjoxNzMyNzIzMTk3MzE1LCJzdWJzY3JpcHRpb25Hcm91cElkZW50aWZpZXIiOiIyMDU3ODI3NSIsImlzVXBncmFkZWQiOmZhbHNlLCJ0eXBlIjoiQXV0by1SZW5ld2FibGUgU3Vic2NyaXB0aW9uIiwib3JpZ2luYWxQdXJjaGFzZURhdGUiOjE3MzI3MjMxOTU1MzAsIm9yaWdpbmFsVHJhbnNhY3Rpb25JZCI6IjAiLCJvZmZlclR5cGUiOjEsInByaWNlIjowLCJzdG9yZWZyb250SWQiOiIxNDM0NDEiLCJxdWFudGl0eSI6MSwiaW5BcHBPd25lcnNoaXBUeXBlIjoiUFVSQ0hBU0VEIiwiZW52aXJvbm1lbnQiOiJYY29kZSIsInByb2R1Y3RJZCI6Im1vbnRobHlzdGFyMSIsImN1cnJlbmN5IjoiVVNEIiwiYnVuZGxlSWQiOiJkay50aGVtdXNpY3N0YXIudGhlbXVzaWNzdGFyIiwicHVyY2hhc2VEYXRlIjoxNzMyNzIzMTk1NTMwLCJkZXZpY2VWZXJpZmljYXRpb25Ob25jZSI6ImJmYTIzNjZhLWViMzYtNGU5Ni05ZmMzLWNmNDA2M2EzNWQ2ZCIsInRyYW5zYWN0aW9uUmVhc29uIjoiUFVSQ0hBU0UiLCJkZXZpY2VWZXJpZmljYXRpb24iOiJYRHV2QkZkclwvZVp5NHpyRFQ1SXcwWTdmVm1HQSt4MEZGVnZtXC9DYThpazFqM0twRzRUK1VPeTBqXC9mR0h2SVRzIiwic3RvcmVmcm9udCI6IlVTQSIsInRyYW5zYWN0aW9uSWQiOiIwIiwid2ViT3JkZXJMaW5lSXRlbUlkIjoiMCIsImV4cGlyZXNEYXRlIjoxNzMyOTgyMzk1NTMwLCJvZmZlckRpc2NvdW50VHlwZSI6IkZSRUVfVFJJQUwifQ.0y4-msKgONQw2Nq1r6LfLbWQPOEbGzzi_eE6adbs-hJmUGWxNkuu0tZc4j0WbOyJ_WDI9PrO7MgX412NAC9M6w"
}
]
},
"transactions" : [
"eyJ0eXAiOiJKV1QiLCJ4NWMiOlsiTUlJQnl6Q0NBWEdnQXdJQkFnSUJBVEFLQmdncWhrak9QUVFEQWpCSU1TSXdJQVlEVlFRREV4bFRkRzl5WlV0cGRDQlVaWE4wYVc1bklHbHVJRmhqYjJSbE1TSXdJQVlEVlFRS0V4bFRkRzl5WlV0cGRDQlVaWE4wYVc1bklHbHVJRmhqYjJSbE1CNFhEVEkwTVRFeU56RTFOVGsxTlZvWERUSTFNVEV5TnpFMU5UazFOVm93U0RFaU1DQUdBMVVFQXhNWlUzUnZjbVZMYVhRZ1ZHVnpkR2x1WnlCcGJpQllZMjlrWlRFaU1DQUdBMVVFQ2hNWlUzUnZjbVZMYVhRZ1ZHVnpkR2x1WnlCcGJpQllZMjlrWlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQlBSaWdiVFkyZUZkVGVWUE5VMDYySDBwOHl1Y1ZBXC9NaE4yOHc3eHlMOGc5Q0lhMkVqZDFaaUh1eGlyanp5WTc4RFp2Q1h6bXp3SmZ1eTNjeENXd3hwK2pUREJLTUJJR0ExVWRFd0VCXC93UUlNQVlCQWY4Q0FRQXdKQVlEVlIwUkJCMHdHNEVaVTNSdmNtVkxhWFFnVkdWemRHbHVaeUJwYmlCWVkyOWtaVEFPQmdOVkhROEJBZjhFQkFNQ0I0QXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTDJ1aFhjRmRJamZhMWtpSVduVml0eGNaYTh0MTVsZ1lWTklESkRLYVZ2UkFpQnhiQUVsVUh0SFFXeTlpSlBpZFd1RFh6azFSWHlVSTFyMHVvOG9pOE9ENmc9PSJdLCJhbGciOiJFUzI1NiIsImtpZCI6IkFwcGxlX1hjb2RlX0tleSJ9.eyJzaWduZWREYXRlIjoxNzMyNzIzMTk3MzE1LCJzdWJzY3JpcHRpb25Hcm91cElkZW50aWZpZXIiOiIyMDU3ODI3NSIsImlzVXBncmFkZWQiOmZhbHNlLCJ0eXBlIjoiQXV0by1SZW5ld2FibGUgU3Vic2NyaXB0aW9uIiwib3JpZ2luYWxQdXJjaGFzZURhdGUiOjE3MzI3MjMxOTU1MzAsIm9yaWdpbmFsVHJhbnNhY3Rpb25JZCI6IjAiLCJvZmZlclR5cGUiOjEsInByaWNlIjowLCJzdG9yZWZyb250SWQiOiIxNDM0NDEiLCJxdWFudGl0eSI6MSwiaW5BcHBPd25lcnNoaXBUeXBlIjoiUFVSQ0hBU0VEIiwiZW52aXJvbm1lbnQiOiJYY29kZSIsInByb2R1Y3RJZCI6Im1vbnRobHlzdGFyMSIsImN1cnJlbmN5IjoiVVNEIiwiYnVuZGxlSWQiOiJkay50aGVtdXNpY3N0YXIudGhlbXVzaWNzdGFyIiwicHVyY2hhc2VEYXRlIjoxNzMyNzIzMTk1NTMwLCJkZXZpY2VWZXJpZmljYXRpb25Ob25jZSI6ImJmYTIzNjZhLWViMzYtNGU5Ni05ZmMzLWNmNDA2M2EzNWQ2ZCIsInRyYW5zYWN0aW9uUmVhc29uIjoiUFVSQ0hBU0UiLCJkZXZpY2VWZXJpZmljYXRpb24iOiJYRHV2QkZkclwvZVp5NHpyRFQ1SXcwWTdmVm1HQSt4MEZGVnZtXC9DYThpazFqM0twRzRUK1VPeTBqXC9mR0h2SVRzIiwic3RvcmVmcm9udCI6IlVTQSIsInRyYW5zYWN0aW9uSWQiOiIwIiwid2ViT3JkZXJMaW5lSXRlbUlkIjoiMCIsImV4cGlyZXNEYXRlIjoxNzMyOTgyMzk1NTMwLCJvZmZlckRpc2NvdW50VHlwZSI6IkZSRUVfVFJJQUwifQ.0y4-msKgONQw2Nq1r6LfLbWQPOEbGzzi_eE6adbs-hJmUGWxNkuu0tZc4j0WbOyJ_WDI9PrO7MgX412NAC9M6w"
]
}
DEBUG: ℹ️ There are no requests currently running, starting request POST /v1/receipts
VERBOSE: Found no etag for request to 'https://api.revenuecat.com/v1/receipts
'
DEBUG: ℹ️ API request started: POST '/v1/receipts'
VERBOSE: Storing etag '69043b3378decb85' for request to 'https://api.revenuecat.com/v1/receipts
' (success)
DEBUG: ℹ️ API request completed: POST '/v1/receipts' (200)
Request-ID: '6f01bcaf-e86e-472d-87d5-f8686f9d0bf9'; Amzn-Trace-ID: 'Root=1-674741fe-405a6ea463d677912b3976c9'
VERBOSE: Updating CustomerInfo '$RCAnonymousID:b57d2ffb50b442128c419d105eb4ffc3' request date: 2024-11-27 15:59:58 +0000
DEBUG: ℹ️ PostReceiptDataOperation: Finished
INFO: 💰 Finishing transaction '0' for product 'monthlystar1'
DEBUG: ℹ️ Serial request done: POST /v1/receipts, 0 requests left in the queue
DEBUG: ℹ️ Sending updated CustomerInfo to delegate.
INFO: 😻💰 Purchased product - 'monthlystar1'
DEBUG: ℹ️ Detected active subscriptions changed. Clearing trial or intro eligibility cache.
DEBUG: ℹ️ PurchasedProductsFetcher: invalidating cache
Steps to reproduce, with a description of expected vs. actual behavior
New user presses "start trial"
Apple payment popup shows
User chooses payment method and double taps button to acknowledge with Face ID
Purchase goes through, and user is told that the purchase was successful
Paywall screen persists, and a restart of the app leads the user to the paywall again
Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)
I have spotted that I'm erroneously calling init twice, both here:
class _SubscriptionPageState extends State<SubscriptionPage> {
late final Future<void> initFuture = getIt<SubscriptionService>().init();
...
But I'm unsure if this is the issue, and I'm not super thrilled about testing in production to find out, so I haven't published a fix for this yet.
5. **Additional context**
Add any other context about the problem here.
As I said, I'm pretty inexperienced, so please let me know if there's anything I can do to add further information.
Describe the bug A clear and concise description of what the bug is. The more detail you can provide the faster our team will be able to triage and resolve the issue. Do not remove any of the steps from the template below. If a step is not applicable to your issue, please leave that step empty.
I'm quite inexperienced with RevenueCat, so I apologize if I am not following proper form, and it is likely what is tripping me up. In production on iOS, when users start trial of my only product they successfully complete the purchase, but the purchase screen stays, and the user is not registered as paid even when the app is reopened. I can see the trial in iOS settings under subscriptions. I am unable to recreate the issue in sandbox mode where payment works without problems. It is not caught by Apples review process either.
.with(storeKitVersion: .storeKit1)
)Purchases.logLevel = .verbose
will help us debug this issue.What I captured from Xcode in production environment:
What I'm getting from the simulator:
@override Widget build(BuildContext context) { return FutureBuilder( future: initFuture, builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
...
Future setupServiceLocator() async {
...
// subscriptions final subscriptionService = SubscriptionService(); getIt.registerSingleton(subscriptionService);
await subscriptionService.init();
...
}