永远不会调用Google InAppBilling onPurchaseStateChange

Aka*_*asH 3 android billing

onPurchaseStateChange永远不会调用回调方法.我做了自己的演示应用程序,并尝试使用Google提供的演示(Dungeons).

我正在调用requestPurchase(String productId, String payload)这个onClick方法.


    @Override
    public void onClick(View view) {
        if(view == requestPurchaseButton) {
            mBillingService.requestPurchase("android.test.purchased", "10");
        }
    }
Run Code Online (Sandbox Code Playgroud)

调用回调方法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
          }
       }

Run Code Online (Sandbox Code Playgroud)

此方法的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");

        }
Run Code Online (Sandbox Code Playgroud)

永远不会被称为.

我错过了什么吗?同样的事情在Dungeons(Google提供的演示)中完成,并且onPurchaseStateChange没有被调用.

试验InAppBilling文件表明,我们必须能够达到购买状态.但是当我尝试时,我只看到了

android.test.purchased:发送购买请求.

小智 6

我遇到了同样的问题,但我自己解决了这个问题.我在代码中使用了我的工作公钥,但试图在我的个人手机上运行该应用程序.由于我使用我的个人帐户登录手机,我猜Google正确地认为我不是开发人员.我认为他们会发回错误信息.将个人密钥插入代码后,它在我的手机上运行正常.所以钥匙也可能不适合你.

  • 广播意图的接收者在哪里?在那里放一些日志,做mBillingService.requestPurchase应该发回RESPONSE_CODE然后IN_APP_NOTIFY.这是另一个教程:http://www.anddev.org/advanced-tutorials-f21/simple-inapp-payment-t52060.html另一个视角 (2认同)