1

应用内功能的示例代码有:

onPurchaseStateChange(PurchaseState purchaseState, String itemId,
            int quantity, long purchaseTime, String developerPayload)

它会带来有关已进行的应用内购买的信息(ID、金额等)。

在这里我可以更新我的代码,但我没有从计费服务的这个回调方法中得到任何响应。示例应用程序有什么问题。谁能帮忙?

提前致谢。

4

1 回答 1

2

我不确定问题是什么,为什么有时@overrided onPurchaseStateChange请求的 Activity 没有被调用,但我可以验证onPurchaseStateChangeBillingReceiver和BillingService总是被调用。

出于某种原因,有时,回调并没有一路返回到调用 Activity。

顺便说一句,这个问题似乎只在您购买托管产品或订阅时发生。如果您购买非托管产品,回调将始终到达。

一个解决方案可能是(在示例应用程序中的请求购买活动 - 地下城活动中):

@Override
        public void onPurchaseStateChange(PurchaseState purchaseState, String itemId, int quantity, long purchaseTime, String developerPayload) {

            if (purchaseState == PurchaseState.PURCHASED) {

                onPurchaseStateChange = true;

                // Do whatever you need to do after purchase here first.

            }
        }

        @Override
        public void onRequestPurchaseResponse(RequestPurchase request, ResponseCode responseCode) {


            if (responseCode == ResponseCode.RESULT_OK) {

                if (!onPurchaseStateChange) {
                    // If onPurchaseStateChange = false, the onPurchaseStateChange callback didn't arrive from the BillingService, so you can perform your after purchase actions here.
                }

            } else if (responseCode == ResponseCode.RESULT_USER_CANCELED) {

            } else {

            }
        }

解决方案#2(似乎是正确的解决方案): Google 的示例代码包含此方法:

@Override
    protected void onStop() {
        super.onStop();

        ResponseHandler.unregister(YOUR_PURCHASE_OBSERVER);
    }

这会导致观察者在您打开 Play 商店购买活动的第二次被取消注册。当您返回活动时(无论是在购买后还是返回按钮之后),onStart都​​会调用并重新启动,purchaseObserver但并不总是使用购买信息 - 这会导致onPurchaseStateChange永远不会调用。

一个解决方案是从 onStop 中删除 unregister 并将其移至 onDestroy。另一种解决方案是将它留在那里,但从一个包含先前接收到的详细信息的队列开始。请参阅此处:Android 应用内计费。何时注销 ResponseHandler?

于 2012-10-18T06:17:34.870 回答