Android-inapp-billing-v3: Purchases are not loaded on other devices

Created on 22 Nov 2018  路  3Comments  路  Source: anjlab/android-inapp-billing-v3

Report a bug.

What is the current behavior?

The application has 5 buttons of payment, method "purchase" and I am having complaints that the purchases do not load themselves after changing the device.

Example:

1.- Client downloads the application and purchases the full version.
2.- Client changes the device with the same gpay account.
3.- Client downloads the application in the new device. The previous payment is not restored. With what the client must buy again.

Don't forget to mention:

  • which version of library you use: v1.0.44
  • was it working in previous versions? Use this version from the beginning.
  • do you use fragments or not: no.
  • how do you instanciate BillingProcessor (singleton or not): Use the attached example exactly, just edit the "updateTextViews". Example:

` private void updateTextViews() {

    if (bp.isPurchased(PRODUCT_ID)) {
        btnBuyAds.setEnabled(false);
        mAdView.setVisibility(View.GONE);
        if (!btnBuyAds.isEnabled() || !btnBuyList.isEnabled() || !btnBuyMassive.isEnabled() || !btnBuySLList.isEnabled()){
            btnBuyFull.setEnabled(false);
        }
    }

}`

  • which device/OS version do you use for testing (or its an emulator): Emulador y:
    Nexus 6P (Android 8.1.0)
    Xiaomi Mi A2 (Android 8.1.0)
    Samsung Grand Prime (Android 5.1)
    Asus ZenPad (Android 5.1)
    Asus ZenPhone2 (Android 6.0.1)

  • have you uploaded it to Google Play or not (if yes, when which channel: Prod/Beta/Alpha): Yes, Prod.

  • do you test with real products, or with a testing onces (e.g. android.test.purchased): Real products.

Most helpful comment

@KRIPT4 I assume that you are talking about Non-Consumable managed in-app product. In that case did you tried checking the purchase status against your products in the following method like,

    /*
    * Called when purchase history was restored and the list of all owned PRODUCT ID's 
    * was loaded from Google Play
    */
 @Override
  public void onPurchaseHistoryRestored() {
   checkPurchases();
  }

  /*
    * Called when BillingProcessor was initialized and it's ready to purchase 
    */
 @Override
  public void onBillingInitialized() {
   checkPurchases();
  }

private void checkPurchases() {
  if (bp.loadOwnedPurchasesFromGoogle()) {
                final List<String> ownedProducts = bp.listOwnedProducts();
                for (String product : ownedProducts) {
                    if (product.equalsIgnoreCase(PRODUCT_ID)) {
                            setUnlockedVersion(true); // purchase found
                            return;
                                       }
                }

              setUnlockedVersion(false); // no purchase found
}

Also, if everything done right, user cannot purchase same the non-consumable product again. They will get an error "Product Already Owned". Take a look at that. If anything else reply, I will try to do my best...

All 3 comments

any update?

@KRIPT4 I assume that you are talking about Non-Consumable managed in-app product. In that case did you tried checking the purchase status against your products in the following method like,

    /*
    * Called when purchase history was restored and the list of all owned PRODUCT ID's 
    * was loaded from Google Play
    */
 @Override
  public void onPurchaseHistoryRestored() {
   checkPurchases();
  }

  /*
    * Called when BillingProcessor was initialized and it's ready to purchase 
    */
 @Override
  public void onBillingInitialized() {
   checkPurchases();
  }

private void checkPurchases() {
  if (bp.loadOwnedPurchasesFromGoogle()) {
                final List<String> ownedProducts = bp.listOwnedProducts();
                for (String product : ownedProducts) {
                    if (product.equalsIgnoreCase(PRODUCT_ID)) {
                            setUnlockedVersion(true); // purchase found
                            return;
                                       }
                }

              setUnlockedVersion(false); // no purchase found
}

Also, if everything done right, user cannot purchase same the non-consumable product again. They will get an error "Product Already Owned". Take a look at that. If anything else reply, I will try to do my best...

@jpvs0101 I have the same issue. Bought an in app purchase managed product (one time) on one device, it's not loaded on the other. I debugged into your library and found that it's not being returned by billingService.getPurchases.
EDIT: After restarting the device and after clearing the play services cache (completely) I showed up. NOT on the first try but after a few minutes after re trying. Strange.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

RishabhTayal picture RishabhTayal  路  3Comments

RajatVaghani picture RajatVaghani  路  8Comments

2math picture 2math  路  8Comments

kriti-1 picture kriti-1  路  7Comments

najam-amfnrh9 picture najam-amfnrh9  路  6Comments