Покупка одного и того же товара снова и снова - In App Purchase Android

я хочу покупать один и тот же товар снова и снова, но код дает мне исключение нулевого указателя при попытке купить во второй раз.

Вот код;

try {
        Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), "ucret", "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");

        PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");

        startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));

    } catch (RemoteException e) {
        e.printStackTrace();
    } catch (IntentSender.SendIntentException e) {
        e.printStackTrace();
    }

Когда этот код скрипта снова сработает, pendinIntent станет нулевым.

Мы можем запросить у Google, если пользователь уже купил, как указано выше.

 inventory.hasPurchase(sku_id); 

Но я хочу продавать один и тот же предмет всякий раз, когда я открываю экран.

Спасибо за помощь.


person Arda    schedule 05.05.2016    source источник


Ответы (1)


Google запрещает пользователям покупать одни и те же товары. Поэтому, если вы это сделаете, вы должны сказать Google «позвольте мне». И это называется «потребление».

Вот это все потребляющий метод

private void consumeBilling() {

    try {

        Bundle ownedItems = iInAppBillingService.getPurchases(3, getPackageName(), "inapp", null);

        int response = ownedItems.getInt("RESPONSE_CODE");

        if (response == 0) {

            ArrayList<String> ownedSkus = ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");

            ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");

            ArrayList<String> signatureList = ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE_LIST");

            String continuationToken = ownedItems.getString("INAPP_CONTINUATION_TOKEN");

            for (int i = 0; i < purchaseDataList.size(); ++i) {

                String purchaseData = purchaseDataList.get(i);

                //   String signature = signatureList.get(i);

                //    String sku = ownedSkus.get(i);

                //    RDALogger.info("purchaseData " + purchaseData + " signature " + signature + " sku " + sku);

                RDALogger.info("purchaseData " + purchaseData);

                String purchaseTokenString = new JSONObject(purchaseData).getString("purchaseToken");

                int responsee = iInAppBillingService.consumePurchase(3, getPackageName(), purchaseTokenString);

                RDALogger.info("Consuming response " + responsee);
            }
        }

    } catch (Exception e) {

        e.printStackTrace();

        ErrorHandlers.handle(PaymentActivity.this, new HoustonWeGotAProblemException());
    }
}

PurschaseToken из PurchaseData пойдет на этот код

  int responsee = iInAppBillingService.consumePurchase(3, getPackageName(), purchaseTokenString);

после того, как вы сказали Google, этот товар можно купить снова.

person Arda    schedule 05.05.2016