Also known in RevenueCat as the STORE_PROBLEM error, this error can occur when purchasing a product and indicates there was an issue verifying the purchase with the App Store or Google Play Store. The error can either come directly from Apple or Google’s libraries, or from RevenueCat’s backend when attempting to verify the receipt.
Why does this error occur?
STORE_PROBLEM error occurs more commonly in sandbox than production, and can result from different causes depending on the store. Usually, it means there was a problem connecting to the store at the time of purchase—such as the store’s servers were down, or the user’s network connection failed, so the purchase could not be verified and completed.
RevenueCat will forward the underlying error, or the exact cause for the error, along with the
STORE_PROBLEM error. Here is a list of possible causes from each store:
SKErrorCloudServiceNetworkConnectionFailed. The user’s device could not connect to the network.
SKErrorCloudServiceRevoked. The user revoked access to the cloud service.
SKErrorOverlayTimeout. The exact cause of this error is not well documented, but it only happens on iOS 14 or greater.
BillingClient.BillingResponseCode.ERROR. A fatal error occurred during the API call to the Play Store. A “catch-all” error similar to Apple’s SKErrorUnknown.
BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE. The user’s network connection was down.
BillingClient.BillingResponseCode.SERVICE_DISCONNECTED. A transient error that indicates the device disconnected from Google’s Billing Service.
BillingClient.BillingResponseCode.SERVICE_TIMEOUT. The API call to the Play Store timed out.
BackendStoreProblem. This error occurs when Apple or Google’s receipt verification endpoint is down.
BackendPlayStoreQuotaExceeded. This error occurs when the Google Play Developer API daily quota is exceeded.
BackendPlayStoreGenericError. This indicates an unexpected error occurred when RevenueCat’s backend tried to reach Google.
What should I do when I get this error?
In most cases this error is transient, and retrying the purchase is the best course of action. RevenueCat actually does this for you: if a purchase is unable to be completed, for instance due to this
STORE_PROBLEM error, the transaction stays on the payment queue. Whenever the app is relaunched, the SDK checks the payment queue for any unfinished transactions and tries to complete them. This happens automatically, without any action required by you or the user.
We recommend that wherever you catch the
STORE_PROBLEM error, you display a notification to the user that there may have been an issue with their purchase and direct them to restart the app.
If you are seeing this error frequently, it may be a good idea to inspect the error to find and debug the root cause from Apple or Google’s libraries. How you do this depends on the platform—on iOS, the underlying error is listed in the userInfo dictionary in the error. On Android, the underlying error message is a property of the PurchasesError object. The underlying error should correspond to one of the error cases listed above.
If you're seeing this error often in iOS sandbox, we recommend changing your Sandbox Tester account and trying again.
RevenueCat will try to manage these quotas, but if you're seeing this underlying error from Google, you can alleviate the issue by:
Turning on platform server notifications to reduce the number of requests RevenueCat makes
Ensuring you're not using another in-app purchase service or refreshing fetch tokens on your backend (if you are, be conservative with refreshes)
Requesting a quota increase from Google (be sure to try the other two options before this one)