SDK error · code 32

productRequestTimedOut (error code 32): Product request timed out

What it means

productRequestTimedOut (code 32) means the SDK's StoreKit 1 product request (an SKProductsRequest to the App Store) did not finish in time, so offerings have no store prices. It is temporary. Retry loading offerings with a short delay, check the device's connection, and consider the default StoreKit 2 mode, which does not use this request.

Code

32

iOS (Swift)

ErrorCode.productRequestTimedOut

Android (Kotlin)

No matching code in the Android SDK; see the causes below.

Causes

Why the SDK returns productRequestTimedOut

  • The SDK waits a fixed time for an SKProductsRequest and, when it runs out, cancels the request and fails every waiting caller with this error (ProductsFetcherSK1.swift). Apple describes SKProductsRequest as the object that fetches product information from the App Store.
  • A slow or unstable connection, or a store that is slow to answer.
  • The offerings fetch then fails with a timeout error instead of a configuration error (OfferingsManager.swift).
  • Android has no member for this code. Slow product queries there surface as storeProblemError or networkError.

Fix

How to fix productRequestTimedOut

  1. 01

    Retry loading offerings

    Call getOfferings again after a short wait. The SDK caches offerings, so a later success covers the next launches.

  2. 02

    Check the connection

    Test on another network. Product requests need a working path to the App Store.

  3. 03

    Use StoreKit 2

    Leave the SDK on its default StoreKit 2 mode, or set with(storeKitVersion: .storeKit2). It does not use SKProductsRequest.

  4. 04

    Try a real device

    Simulators can be slow or stuck on product requests. Confirm on a device before you debug further.

In your app

How to handle it in code

  • Retrying is safe. A product request changes nothing.
  • Show a retry button and keep the rest of the app usable. Do not block launch on offerings.
  • Do not grant access from the error.
Match the errorSwift
// Swift
do {
  let result = try await Purchases.shared.purchase(package: package)
} catch let error as ErrorCode where error == .productRequestTimedOut {
  // handle product request timed out
}

On RevenueDot: The offerings themselves come from RevenueDot and arrive quickly. This timeout is between the device and the App Store, so no RevenueDot setting changes it.

FAQ

productRequestTimedOut: questions people ask

Why are my offerings slow or empty on iOS?

In StoreKit 1 mode the SDK asks the App Store for each product's price and waits a fixed time. If the answer is late, you get productRequestTimedOut. Retry, check the network, or use StoreKit 2.

Is productRequestTimedOut a RevenueCat server problem?

No. The request goes from the device to the App Store, not to the backend.

How do I check for productRequestTimedOut in React Native and Flutter?

In React Native, compare error.code with PURCHASES_ERROR_CODE.PRODUCT_REQUEST_TIMED_OUT_ERROR. In Flutter, convert the PlatformException with PurchasesErrorHelper.getErrorCode(e) and compare the result with PurchasesErrorCode.productRequestTimeout. The Flutter member is spelled productRequestTimeout.

Get started

Keep the RevenueCat SDK. Change the backend.

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