2015-07-21 130 views
3

继开发人员网站上的文档后,我最近在我的应用程序中实施了InAppBilling v3。我已经使用TRIVIAL DRIVE示例中提供的utils包中的类。InAppBilling v3 IabResult响应代码BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED

我现在面临的问题是,如果一个用户在应用内产品的购买已经在开展purchse另一台设备上再次流动Play商店对话框显示项目已拥有IabResult返回的响应码不匹配到常量IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED。返回的响应代码实际上是IabHelper类中的错误代码之一(-1005用户取消)。

我真的很想知道如何得到实际的响应代码而不是错误代码。任何帮助,将不胜感激。

下面是回调代码

// Callback for when a purchase is finished 
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = 
     new IabHelper.OnIabPurchaseFinishedListener() { 
      public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 

       if (result.isFailure()) { 
        if (result.getResponse() == 
          IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) { 
         //already owned 
         boolean isPremium = true; 
         SharedPrefsUtils.setPremium(BaseActivity.this, isPremium); 
         EventBus.getDefault().post(new InAppBillingUiUpdateEvent(isPremium)); 
         //setWaitScreen(false); 
         return; 
        } 
        //handle error 
        complain(result.getResponse() + " " + "Error purchasing: " + result); 
        //setWaitScreen(false); 
        return; 
       } 
       if (!verifyDeveloperPayload(purchase)) { 
        //corrupted 
        complain("Error purchasing. Authenticity verification failed."); 
        //setWaitScreen(false); 
        return; 
       } 

       //successful 
       if (purchase.getSku().equals(NO_ADS_PRODUCT_ID)) { 
        // bought the premium upgrade! 
        alert("Thank you for upgrading to premium!"); 
        boolean isPremium = true; 
        SharedPrefsUtils.setPremium(BaseActivity.this, isPremium); 
        EventBus.getDefault().post(new InAppBillingUiUpdateEvent(isPremium)); 
        //setWaitScreen(false); 
       } 
      } 
     }; 

回答

4

我终于设法找到在IabHelper代码的问题,所以在这里不言而喻每当Activity.RESULT_CANCELED结果代码在handleActivityResult返回方法IabResult对于所有这些情况下固定与用户取消(-1005)无论原因是什么。因此,为了得到正确的实际响应代码替换下面的代码handleActivityResult

else if (resultCode == Activity.RESULT_CANCELED) { 
     logDebug("Purchase canceled - Response: " + getResponseDesc(responseCode)); 
     result = new IabResult(IABHELPER_USER_CANCELLED, "User canceled."); 
     if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); 
    } 

与此

else if (resultCode == Activity.RESULT_CANCELED) { 
     logDebug("Purchase canceled - Response: " + getResponseDesc(responseCode)); 
     result = new IabResult(responseCode, null); 
     if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); 
    } 

希望它会节省时间某人