应用内功能的示例代码有:
onPurchaseStateChange(PurchaseState purchaseState, String itemId,
int quantity, long purchaseTime, String developerPayload)
它会带来有关已进行的应用内购买的信息(ID、金额等)。
在这里我可以更新我的代码,但我没有从计费服务的这个回调方法中得到任何响应。示例应用程序有什么问题。谁能帮忙?
提前致谢。
应用内功能的示例代码有:
onPurchaseStateChange(PurchaseState purchaseState, String itemId,
int quantity, long purchaseTime, String developerPayload)
它会带来有关已进行的应用内购买的信息(ID、金额等)。
在这里我可以更新我的代码,但我没有从计费服务的这个回调方法中得到任何响应。示例应用程序有什么问题。谁能帮忙?
提前致谢。
我不确定问题是什么,为什么有时@overrided onPurchaseStateChange
请求的 Activity 没有被调用,但我可以验证onPurchaseStateChange
BillingReceiver和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?