Android 未调用onPurchaseStateChange
应用内功能的示例代码包括:Android 未调用onPurchaseStateChange,android,in-app-purchase,in-app-billing,Android,In App Purchase,In App Billing,应用内功能的示例代码包括: onPurchaseStateChange(PurchaseState purchaseState, String itemId, int quantity, long purchaseTime, String developerPayload) 它还提供了应用程序内购买的信息(id、金额等) 在这里,我可以更新我的代码,但在这个回调方法中,我并没有从计费服务得到任何响应。示例应用程序中有什么错误。有人能帮忙吗 提前感谢。我不确定问题出在哪里
onPurchaseStateChange(PurchaseState purchaseState, String itemId,
int quantity, long purchaseTime, String developerPayload)
它还提供了应用程序内购买的信息(id、金额等)
在这里,我可以更新我的代码,但在这个回调方法中,我并没有从计费服务得到任何响应。示例应用程序中有什么错误。有人能帮忙吗
提前感谢。我不确定问题出在哪里,也不知道为什么有时请求活动中的
@覆盖的onPurchaseStateChange
不会被调用,但我可以验证BillingReceiver和BillingService中的onPurchaseStateChange
是否总是被调用
由于某些原因,有时回调不会一直返回到调用活动
顺便说一句,这个问题似乎只有在您购买托管产品或订阅时才会发生。如果您购买的是非托管产品,则回调将始终到达
解决方案可能是(在示例应用程序中的请求购买活动-地下城活动中):
@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(似乎是正确的解决方案):
谷歌的示例代码包括以下方法:
@Override
protected void onStop() {
super.onStop();
ResponseHandler.unregister(YOUR_PURCHASE_OBSERVER);
}
这会导致在您打开Play store购买活动的那一刻取消注册观察者。当您返回活动时(无论是购买后还是返回按钮),将调用onStart
,并重新启动purchaseObserver
,但并不总是使用购买信息-这将导致永远不会调用onPurchaseStateChange
解决方案是从onStop中删除注销并将其移动到onDestroy。另一种解决方案是将其保留在那里,但从一个包含以前接收到的详细信息的队列开始。请看这里: