What does Play Billing FEATURE_NOT_SUPPORTED (-2) mean?

Play Billing FEATURE_NOT_SUPPORTED (-2) means the Google Play Billing feature you called is not supported on this device.

Quick facts#

Error BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED (-2)
Where Google Play Billing Library (BillingResult.responseCode)
What the vendor says The requested feature is not supported by the Play Store on the current device.

Cause#

  • Google says the cause is likely an old Play Store version on the user's device. Its example is a device that does not support in-app messaging.
  • Google lists it among the non-retriable responses: trying again on the same device gives the same answer.
  • It is a property of the device and Play Store version, not of your app's configuration.

Fix#

  1. Call billingClient.isFeatureSupported(FeatureType) before you use an optional feature, and only use the feature when the response is OK.
  2. Do not retry the call. Hide the feature or use a fallback for that device.
  3. Do not show a purchase error to the person: the product itself may still be sellable without the optional feature.
  4. Keep the Billing Library current, because newer versions know more feature types.

Example#

Kotlin
import com.android.billingclient.api.BillingClient

// Ask before you use an optional feature. FEATURE_NOT_SUPPORTED cannot be fixed by retrying.
fun supportsInAppMessaging(billingClient: BillingClient): Boolean {
    if (!billingClient.isReady) return false
    val result = billingClient.isFeatureSupported(BillingClient.FeatureType.IN_APP_MESSAGING)
    return result.responseCode == BillingClient.BillingResponseCode.OK
}

Not compiled: this Kotlin snippet was not built here because the docs repo has no Kotlin or Android toolchain. Check it against your Play Billing Library or SDK version before you ship it.

How the RevenueDot SDK reports it#

The RevenueDot purchases-android fork maps FEATURE_NOT_SUPPORTED to PurchasesErrorCode.PurchaseNotAllowedError (code 3), the same code it uses for BILLING_UNAVAILABLE and ITEM_NOT_OWNED. See what purchaseNotAllowedError means.

Source#

Checked: 2026-10-03

Edit this page on GitHub ↗ View as Markdown Last updated