Android In-app Billing,如何确认该产品已下载

时间:2011-12-16 11:24:10

标签: android in-app-billing

我尝试在我的应用中使用Dungeons示例。在Android开发指南中写道,我应该确认交付产品给用户发送CONFIRM_NOTIFICATIONS到市场,但我没有在示例中看到它或我错了吗?我应该确认下载吗?我的应用程序应该记住内容是否已成功发送?

在使用AsyncTask的活动中,在ResponseHandler类中调用下载或不同的最佳位置在哪里?

2 个答案:

答案 0 :(得分:1)

这也是我今天一直想知道的事情。从我所看到的,在Dungeons示例中,当调用BillingService#purchaseStateChanged时,它会在验证购买后自动确认所有通知。

参见BillingService.java示例中的第506-509行:

if (!notifyList.isEmpty()) {
    String[] notifyIds = notifyList.toArray(new String[notifyList.size()]);
    confirmNotifications(startId, notifyIds);
}

解决方案似乎是将此逻辑重新定位到您完成内容交付时可以手动调用的位置。

我打算删除该代码,并将BillingService#confirmNotifications公开,以便在我发送内容时,可以通过我的PurchaseObserver实现来调用它。

我会用结果更新,但这似乎是一个很好的起点。

答案 1 :(得分:0)

我希望以下代码可以帮助你。

@Override
    public void onPurchaseStateChange(PurchaseState purchaseState, String itemId,
            int quantity, long purchaseTime, String developerPayload) {
        if (Consts.DEBUG) {
            Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState);
        }

        if (developerPayload == null) {
            logProductActivity(itemId, purchaseState.toString());
        } else {
            logProductActivity(itemId, purchaseState + "\n\t" + developerPayload);
        }

        if (purchaseState == PurchaseState.PURCHASED) {
            mOwnedItems.add(itemId);

            Log.v("log_tag", "Item Purchased");

        }
        mCatalogAdapter.setOwnedItems(mOwnedItems);
        mOwnedItemsCursor.requery();
    }

在日志中,如果您收到“已购买物品”,则表示您已成功下载该物品。