0

我想一遍又一遍地购买相同的物品,但是当尝试第二次购买时,代码给了我空指针异常。

这是代码;

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 将变为空。

如果用户已经购买了上述代码,我们可以询问谷歌

 inventory.hasPurchase(sku_id); 

但是每当我打开屏幕时,我都想出售相同的物品。

感谢您的帮助。

4

1 回答 1

1

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());
    }
}

purchaseData 中的 PurschaseToken 将转到此代码

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

在这些你告诉谷歌之后,这个项目可以再次购买。

于 2016-05-05T12:24:12.587 回答