Code
29
SDK error · code 29
What it means
customerInfoError (code 29 on iOS and hybrids, 28 on Android) means the SDK could not read, decode or build customer info: a cached copy has an old format, a response could not be decoded, or offline mode has no product-to-entitlement mapping. Go online once so the SDK refreshes its data, then call getCustomerInfo again.
Code
29
iOS (Swift)
ErrorCode.customer
Android (Kotlin)
PurchasesErrorCode.Customer
Causes
showManageSubscriptions could not fetch customer info to find the management URL.Fix
Open the app on a working connection and call getCustomerInfo. That refreshes the cache and the product mapping.
Call invalidateCustomerInfoCache() so the SDK rebuilds from the server instead of the old copy.
Offline computation needs GET /v1/product_entitlement_mapping. Request it with your public key and confirm it returns your products.
On iOS read NSUnderlyingErrorKey. It holds the decoding or network error that caused this one.
In your app
// Swift
do {
let result = try await Purchases.shared.purchase(package: package)
} catch let error as ErrorCode where error == .customerInfoError {
// handle customer info error
}
// Kotlin
if (error.code == PurchasesErrorCode.CustomerInfoError) { /* ... */ } On RevenueDot: RevenueDot serves the product-to-entitlement mapping at GET /v1/product_entitlement_mapping, and the SDK refreshes it when its copy is 25 hours old. With it cached, the SDK can compute access on the device while RevenueDot answers 5xx. See offline entitlements.
FAQ
The Android SDK's enum numbers it 28, while the iOS enum and the hybrid enums use 29. Match on the name CustomerInfoError, not on the number.
Call invalidateCustomerInfoCache() and getCustomerInfo on a working connection. The cached copy may have an older format.
In React Native, compare error.code with PURCHASES_ERROR_CODE.CUSTOMER_INFO_ERROR. In Flutter, convert the PlatformException with PurchasesErrorHelper.getErrorCode(e) and compare the result with PurchasesErrorCode.customerInfoError.
Get started
RevenueDot answers the same SDK calls with the same error codes. Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue.
Already have an account? Sign in · Prefer your own servers? Self-host free