应用内功能的示例代码包含:
onPurchaseStateChange(PurchaseState purchaseState, String itemId,
int quantity, long purchaseTime, String developerPayload)
它会显示有关应用内购买的信息(ID,多少等)。
在这里我可以更新我的代码,但我没有在Billing Service的回调方法中得到任何响应。示例应用程序有什么问题。有人可以帮忙吗?
先谢谢。
答案 0 :(得分:2)
我不确定问题是什么,为什么有时请求活动中的@overrided onPurchaseStateChange
没有被调用,但我可以验证 BillingReceiver 中的onPurchaseStateChange
和始终会调用 BillingService 。
出于某种原因,有时,回调不会一直返回到调用Activity。
顺便说一下,这个问题似乎只发生在您购买被管理产品或订阅时。如果您购买非托管产品,回拨将始终到达。
解决方案可能是(在请求购买活动 - 示例应用程序中的Dungeons 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中删除取消注册并将其移至onDestroy。另一种解决方案是将其保留在那里,但是使用保存先前接收的详细信息的队列启动它。见这里:Android in-app-billing. When to unregister the ResponseHandler?