3

回调方法onPurchaseStateChange永远不会被调用。我做了自己的演示应用程序,还尝试使用谷歌提供的演示(地下城)。

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 意味着我们不能 t 连接到 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");

        }

永远不会被调用。

我错过了什么吗?在地下城(Google 提供的演示)中正在做同样的事情,并且onPurchaseStateChange没有调用。

Test-InAppBilling文档显示我们必须能够达到已购买状态。但是当我尝试时,我只看到

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

4

1 回答 1

6

我遇到了同样的问题,但只是为自己解决了。我在代码中使用了我工作的公钥,但试图在我的个人手机上运行该应用程序。由于我是用我的个人帐户在手机上登录的,我猜谷歌正确地假设我不是开发者。我认为他们会发回错误消息。将我的个人密钥插入代码后,它在我的手机上运行良好。因此,密钥可能也不适合您。

于 2011-03-25T15:40:53.737 回答