RevenueCat

Build With RevenueCat

Build a customized mobile subscription business with RevenueCat. We do the heavy lifting of normalizing subscribers from any source and maintain a single source of truth for subscription status, so you can get back to building your app.

RevenueCat is a powerful, secure, reliable, and free to use in-app purchase server with global support. All you need to get started is an API key.

Ask A Question

Questions

4
ANSWERED

Purchases successful but ended with error "There was a problem with App store"

Hi my application was not released yet and I was making purchase with sandbox user, the purchase was successful until show the dialog however it's ended "There was a problem with App store". This is the log: 2020-03-27 21:00:02.933854+0700 Runner[283:6154] [Purchases] - DEBUG: Vending offerings from cache 2020-03-27 21:00:02.934171+0700 Runner[283:6154] [Purchases] - DEBUG: makePurchase 2020-03-27 21:00:02.934924+0700 Runner[283:6154] [Purchases] - DEBUG: makePurchase - rocket_plan - Offering: Rocket Sales 2020-03-27 21:00:02.936578+0700 Runner[283:6154] Purchase Started !! 2020-03-27 21:00:02.940258+0700 Runner[283:6154] [Purchases] - DEBUG: PaymentQueue updatedTransaction: rocket_plan (null) ((null)) (null) - 0 2020-03-27 21:00:11.081338+0700 Runner[283:6422] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C10.1:2][0x118f416c0] get output frames failed, state 8196 2020-03-27 21:00:11.090565+0700 Runner[283:6422] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C10.1:2][0x118f416c0] get output frames failed, state 8196 2020-03-27 21:00:11.097460+0700 Runner[283:6422] TIC Read Status [10:0x0]: 1:57 2020-03-27 21:00:11.098430+0700 Runner[283:6422] TIC Read Status [10:0x0]: 1:57 2020-03-27 21:00:15.153365+0700 Runner[283:6946] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C11.1:2][0x105ebc3a0] get output frames failed, state 8196 2020-03-27 21:00:15.153828+0700 Runner[283:6946] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C11.1:2][0x105ebc3a0] get output frames failed, state 8196 2020-03-27 21:00:15.155711+0700 Runner[283:6946] TIC Read Status [11:0x0]: 1:57 2020-03-27 21:00:15.155885+0700 Runner[283:6946] TIC Read Status [11:0x0]: 1:57 2020-03-27 21:00:21.869236+0700 Runner[283:6154] [Purchases] - DEBUG: applicationDidBecomeActive 2020-03-27 21:00:34.021713+0700 Runner[283:6422] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C12.1:2][0x105fc9bc0] get output frames failed, state 8196 2020-03-27 21:00:34.022150+0700 Runner[283:6422] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C12.1:2][0x105fc9bc0] get output frames failed, state 8196 2020-03-27 21:00:34.029236+0700 Runner[283:6422] TIC Read Status [12:0x0]: 1:57 2020-03-27 21:00:34.029354+0700 Runner[283:6422] TIC Read Status [12:0x0]: 1:57 2020-03-27 21:00:36.757952+0700 Runner[283:6154] [Purchases] - DEBUG: applicationDidBecomeActive 2020-03-27 21:00:38.441530+0700 Runner[283:6154] Purchase Successful !! . 2020-03-27 21:00:38.446675+0700 Runner[283:6154] [Purchases] - DEBUG: PaymentQueue updatedTransaction: rocket_plan 1000000644273179 ((null)) 1000000643822621 - 1 2020-03-27 21:00:38.448914+0700 Runner[283:6154] [Purchases] - DEBUG: Loaded receipt from file:///private/var/mobile/Containers/Data/Application/5554A108-BAAC-4BDD-A2B4-62376A2E1B11/StoreKit/sandboxReceipt 2020-03-27 21:00:38.469747+0700 Runner[283:6154] [Purchases] - DEBUG: POST /v1/receipts 2020-03-27 21:00:40.174393+0700 Runner[283:7006] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C14.1:2][0x116370a60] get output frames failed, state 8196 2020-03-27 21:00:40.174988+0700 Runner[283:7006] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C14.1:2][0x116370a60] get output frames failed, state 8196 2020-03-27 21:00:40.176859+0700 Runner[283:7006] TIC Read Status [14:0x0]: 1:57 2020-03-27 21:00:40.177278+0700 Runner[283:7006] TIC Read Status [14:0x0]: 1:57 2020-03-27 21:00:41.009084+0700 Runner[283:7312] [Purchases] - DEBUG: POST /v1/receipts 503 2020-03-27 21:00:41.014570+0700 Runner[283:7312] [Purchases] - ERROR: There was a problem with the App Store. 2020-03-27 21:00:52.941614+0700 Runner[283:6154] [Purchases] - DEBUG: applicationDidBecomeActive

Posted by Steve 10 days ago

6

Can't make purchases with error " There was a problem with the Play Store. | Google Play Error: The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."

Hi I am using Flutter and already successfully setup the account, and can fetch the list of packages. However, when I am loading for first time and trying to make purchase I get this error: "There was a problem with the Play Store. | Google Play Error: The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console." I have followed the setup completely including this step: https://docs.revenuecat.com/docs/creating-play-service-credentials Is there any missing step and what is the solution? Thank you This is the log: D/[Purchases] - DEBUG(24741): Debug logging enabled. D/[Purchases] - DEBUG(24741): SDK Version - 3.0.4 D/[Purchases] - DEBUG(24741): Initial App User ID - null D/[Purchases] - DEBUG(24741): Identifying App User ID: $RCAnonymousID:54b92a6c8e2b4eaf95123a1202f4a6a2 D/[Purchases] - DEBUG(24741): App foregrounded D/[Purchases] - DEBUG(24741): Cache stale D/[Purchases] - DEBUG(24741): [QueryPurchases] Skipping updating pending purchase queue since BillingClient is not connected yet D/[Purchases] - DEBUG(24741): Listener set D/[Purchases] - DEBUG(24741): Sending latest purchaser info to listener D/[Purchases] - DEBUG(24741): Starting connection for [email protected] D/[Purchases] - DEBUG(24741): Ending connection for [email protected] D/[Purchases] - DEBUG(24741): Billing Service Setup finished for [email protected] D/[Purchases] - DEBUG(24741): [QueryPurchases] Updating pending purchase queue D/[Purchases] - DEBUG(24741): No cached offerings, fetching D/[Purchases] - DEBUG(24741): GET /subscribers/%24RCAnonymousID%3A54b92a6c8e2b4eaf95123a1202f4a6a2 D/[Purchases] - DEBUG(24741): GET /subscribers/%24RCAnonymousID%3A54b92a6c8e2b4eaf95123a1202f4a6a2 200 D/[Purchases] - DEBUG(24741): Purchaser info updated, sending to listener D/[Purchases] - DEBUG(24741): GET /subscribers/%24RCAnonymousID%3A54b92a6c8e2b4eaf95123a1202f4a6a2/offerings D/[Purchases] - DEBUG(24741): GET /subscribers/%24RCAnonymousID%3A54b92a6c8e2b4eaf95123a1202f4a6a2/offerings 200 D/[Purchases] - DEBUG(24741): Requesting products with identifiers: basic_plan, rocket_plan D/[Purchases] - DEBUG(24741): Requesting products with identifiers: basic_plan, rocket_plan D/[Purchases] - DEBUG(24741): [QueryPurchases] Querying subs D/[Purchases] - DEBUG(24741): [QueryPurchases] Querying inapp D/[Purchases] - DEBUG(24741): [QueryPurchases] Querying inapp D/[Purchases] - DEBUG(24741): Products request finished for basic_plan, rocket_plan D/[Purchases] - DEBUG(24741): Retrieved skuDetailsList: SkuDetails: {"skuDetailsToken":"AEuhp4LJn3zz4D_JSBFhb4P3AnEPRTXcfPEga_kVN_wDN0WhuolUHP3lw79A2WRXj0Y=","productId":"rocket_plan","type":"subs","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","subscriptionPeriod":"P1M","title":"Member Roket Terbang (Konekzy)","description":"Paket Roket Terbang membuka semua fitur dan akses di aplikasi Konekzy"} D/[Purchases] - DEBUG(24741): rocket_plan - SkuDetails: {"skuDetailsToken":"AEuhp4LJn3zz4D_JSBFhb4P3AnEPRTXcfPEga_kVN_wDN0WhuolUHP3lw79A2WRXj0Y=","productId":"rocket_plan","type":"subs","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","subscriptionPeriod":"P1M","title":"Member Roket Terbang (Konekzy)","description":"Paket Roket Terbang membuka semua fitur dan akses di aplikasi Konekzy"} D/[Purchases] - DEBUG(24741): Requesting products with identifiers: basic_plan D/[Purchases] - DEBUG(24741): Products request finished for basic_plan, rocket_plan D/[Purchases] - DEBUG(24741): Retrieved skuDetailsList: SkuDetails: {"skuDetailsToken":"AEuhp4LJn3zz4D_JSBFhb4P3AnEPRTXcfPEga_kVN_wDN0WhuolUHP3lw79A2WRXj0Y=","productId":"rocket_plan","type":"subs","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","subscriptionPeriod":"P1M","title":"Member Roket Terbang (Konekzy)","description":"Paket Roket Terbang membuka semua fitur dan akses di aplikasi Konekzy"} D/[Purchases] - DEBUG(24741): rocket_plan - SkuDetails: {"skuDetailsToken":"AEuhp4LJn3zz4D_JSBFhb4P3AnEPRTXcfPEga_kVN_wDN0WhuolUHP3lw79A2WRXj0Y=","productId":"rocket_plan","type":"subs","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","subscriptionPeriod":"P1M","title":"Member Roket Terbang (Konekzy)","description":"Paket Roket Terbang membuka semua fitur dan akses di aplikasi Konekzy"} D/[Purchases] - DEBUG(24741): Requesting products with identifiers: basic_plan D/[Purchases] - DEBUG(24741): [QueryPurchases] Purchase of type inapp with hash pDyOVEI67zRm0y100dgqV+Aoa6g= D/[Purchases] - DEBUG(24741): [QueryPurchases] Cleaning previously sent tokens D/[Purchases] - DEBUG(24741): [QueryPurchases] Tokens already posted: [] D/[Purchases] - DEBUG(24741): Products request finished for basic_plan D/[Purchases] - DEBUG(24741): Retrieved skuDetailsList: SkuDetails: {"skuDetailsToken":"AEuhp4LKH1y_-kuDaJc4ex4keacx19Rv0IEpyBRhnRP85jbsk_E85x_JGvg1irb7N_8A","productId":"basic_plan","type":"inapp","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","title":"Basic Plan (Konekzy)","description":"Paket berbayar untuk membuka fitur standar chat, komunitas dan ilmu"} D/[Purchases] - DEBUG(24741): basic_plan - SkuDetails: {"skuDetailsToken":"AEuhp4LKH1y_-kuDaJc4ex4keacx19Rv0IEpyBRhnRP85jbsk_E85x_JGvg1irb7N_8A","productId":"basic_plan","type":"inapp","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","title":"Basic Plan (Konekzy)","description":"Paket berbayar untuk membuka fitur standar chat, komunitas dan ilmu"} D/[Purchases] - DEBUG(24741): Products request finished for basic_plan D/[Purchases] - DEBUG(24741): Retrieved skuDetailsList: SkuDetails: {"skuDetailsToken":"AEuhp4LKH1y_-kuDaJc4ex4keacx19Rv0IEpyBRhnRP85jbsk_E85x_JGvg1irb7N_8A","productId":"basic_plan","type":"inapp","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","title":"Basic Plan (Konekzy)","description":"Paket berbayar untuk membuka fitur standar chat, komunitas dan ilmu"} D/[Purchases] - DEBUG(24741): basic_plan - SkuDetails: {"skuDetailsToken":"AEuhp4LKH1y_-kuDaJc4ex4keacx19Rv0IEpyBRhnRP85jbsk_E85x_JGvg1irb7N_8A","productId":"basic_plan","type":"inapp","price":"IDR 50,000.00","price_amount_micros":50000000000,"price_currency_code":"IDR","title":"Basic Plan (Konekzy)","description":"Paket berbayar untuk membuka fitur standar chat, komunitas dan ilmu"} I/flutter (24741): basic_plan I/flutter (24741): 50000.0 I/flutter (24741): rocket_plan I/flutter (24741): 50000.0 D/[Purchases] - DEBUG(24741): POST /receipts D/[Purchases] - DEBUG(24741): POST /receipts 503 E/[Purchases] - ERROR(24741): There was a problem with the Play Store. | Google Play Error: The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.

Posted by Steve 12 days ago

3
ANSWERED

iOS App Extension Subscription Status Updates

Hi RevenueCat team, I have a subscription system in my iOS app that's mainly focused around an iOS Extension. Unfortunately StoreKit is not supported in the extension and I am unable to verify subscription status there. My workaround has been to store the subscription status in a shared User Defaults object that can then be accessed in the Extension, but the downside to this approach is that the user needs to re-open the main application on subscription renewal to verify they're still subscribed and update the User Defaults. I have been pushing yearly subscriptions to minimize the interruption, but it's still a pain and cause for churn. I have been meaning to set up a server for App Store Webhook updates and create a user management system to track subscription status instead of the User Defaults, that way users no longer have to re-open the main application on renewal to verify subscription status. However this is a significant amount of work and I was hoping to avoid it entirely by migrating to RevenueCat. My question is therefore, does RevenueCat support this? If I set up Apple's server-to-server subscription updates to point to RevenueCat, can I access the user's renewed subscription status through the SDK in my app extension without ever having the user open the main application and therefore processing the renewal transaction? I see there is a method that allows you to specify a `userDefaults` object on initialization of the SDK to work across app extensions, but does this still require the occasional opening of the main application to process renewals? In advance, thank you.

Posted by Aleksander S. 12 days ago