RevenueCat / purchases-ios

In-app purchases and subscriptions made easy. Support for iOS, watchOS, tvOS, macOS, and visionOS.
https://www.revenuecat.com/
MIT License
2.37k stars 319 forks source link

No transactions in in response, Payment completed with no transactions #4524

Open TobiasPalludan opened 6 hours ago

TobiasPalludan commented 6 hours ago

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.

  1. Environment
    1. Platform: iOS
    2. SDK version: 5.6.0
    3. 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)
    4. OS version: 18.0
    5. Xcode version: 15.4
    6. Device and/or simulator:
      • [X] Device
      • [ ] Simulator
    7. Environment:
      • [ ] Sandbox
      • [ ] TestFlight
      • [X] Production
    8. How widespread is the issue. Percentage of devices affected. I have multiple reports from my separate users, so I fear it's everyone.
  2. 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
  1. Steps to reproduce, with a description of expected vs. actual behavior
  1. 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();
    ...

@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}'); }

    var _subscriptionService = getIt<SubscriptionService>();

...

and here

Future setupServiceLocator() async { ...

// subscriptions final subscriptionService = SubscriptionService(); getIt.registerSingleton(subscriptionService); await 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.
RCGitBot commented 6 hours ago

👀 We've just linked this issue to our internal tracker and notified the team. Thank you for reporting, we're checking this out!