永远不会调用回调方法onPurchaseStateChange
。我做了自己的演示应用程序,并尝试使用Google提供的演示(Dungeons)。
我正在使用requestPurchase(String productId, String payload)
方法调用onClick
。
@Override
public void onClick(View view) {
if(view == requestPurchaseButton) {
mBillingService.requestPurchase("android.test.purchased", "10");
}
}
调用回调方法onRequestPurchaseResponse(Request, ResponseCode)
。
这里的responseCode
给出了值RESULT_OK
。因此请求已发送到服务器。
@Override
public void onRequestPurchaseResponse(RequestPurchase request,
ResponseCode responseCode)
{
if(responseCode == ResponseCode.RESULT_OK) {
Log.d("AJ", "onRequestPurchaseResponse.ResponeCode.RESULT_OK");
textView.append(request.mProductId + "\n");
} else if(responseCode == ResponseCode.RESULT_USER_CANCELED) {
//doesn't go here
} else {
//doesn't go here
}
}
此方法的javadoc说明
当我们从Market收到我们发出的RequestPurchase请求的响应代码时,会调用此方法。这不适用于任何购买状态更改。所有购买状态更改都在onPurchaseStateChange(PurchaseState,String,int,long)中接收。这用于报告各种错误,或者如果用户退出但未购买该项目。可能的响应代码是:RESULT_OK表示订单已成功发送到服务器。当订单被收费或取消时,稍后将调用onPurchaseStateChange()(购买状态为PURCHASED或CANCELED)。如果市场管理的商品的订单已经发送到服务器,也会发生此响应代码。 RESULT_USER_CANCELED表示用户没有购买该商品。 RESULT_SERVICE_UNAVAILABLE表示我们无法连接到Android Market服务器(例如,如果数据连接已关闭)。 RESULT_BILLING_UNAVAILABLE表示尚不支持应用内结算。 RESULT_ITEM_UNAVAILABLE表示此应用程序提供的待售项目在服务器端目录中不存在(或未发布)。 RESULT_ERROR用于任何其他错误(例如服务器错误)。
但是回调方法
@Override
public void onPurchaseStateChange(PurchaseState purchaseState,
String itemId, int quantity, long purchaseTime,
String developerPayload) {
Log.d("AJ", "onPurchaseStateChanged");
}
永远不会打电话给。
我错过了什么吗?在Dungeons(谷歌提供的演示)中也做了同样的事情,并且没有调用onPurchaseStateChange
。
Test-InAppBilling文件显示我们必须能够达到“已购买”状态。但是当我尝试时,我只看到
android.test.purchased:发送购买请求。
答案 0 :(得分:6)
我遇到了同样的问题,但我自己解决了这个问题。我在代码中使用了我的工作公钥,但试图在我的个人手机上运行该应用程序。由于我使用我的个人帐户登录手机,我猜Google正确地认为我不是开发人员。我认为他们会发回错误信息。将个人密钥插入代码后,它在我的手机上运行正常。所以钥匙也可能不适合你。