在应用结算中:未找到商品

hun*_*erp 13 android in-app-billing

我已按照应用结算中的步骤操作:

  1. 已安装的演示应用
  2. 发布了应用内商品
  3. 没有发布应用程序本身

虽然我CAN购买物品,有一个奇怪的警告"项目未找到"我不得不解雇之前,我可以去购买屏幕.

和此日志错误:

E/Volley(1384): [157] BasicNetwork.performRequest: Unexpected response code 500 for https://android.clients.google.com/fdfe/details?doc=subs:com.testorooney.testo:sword_001
Run Code Online (Sandbox Code Playgroud)

Dim*_*ski 31

这不是服务器端错误.该错误位于示例应用程序的Dungeons类中的onClick for Purchase按钮中.

提供的方法在if {} else if {}语句中有一个错误,当所选项不是订阅项(mManagedType!= Managed.SUBSCRIPTION)时,它会导致mBillingService.requestPurchase被调用两次.因此,同一项目将被请求两次,一次是项目类型为"inapp"(这是有效请求),紧接着是项目类型为"subs"(这是不正确的,它显示"找不到项目") .

这是有缺陷的代码:

if (mManagedType != Managed.SUBSCRIPTION &&
                    !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
                showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
            } else if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
                // Note: mManagedType == Managed.SUBSCRIPTION
                showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
            }
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请将mManagedType == Managed.SUBSCRIPTION添加到else(如果在上面).

以下是该函数的外观:

@Override
    public void onClick(View v) {
        if (v == mBuyButton) {
            if (Consts.DEBUG) {
                Log.d(TAG, "buying: " + mItemName + " sku: " + mSku);
            }

            if (mManagedType != Managed.SUBSCRIPTION &&
                    !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
                showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
            } else if (mManagedType == Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
                // Note: mManagedType == Managed.SUBSCRIPTION
                showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
            }
        } else if (v == mEditPayloadButton) {
            showPayloadEditDialog();
        } else if (v == mEditSubscriptionsButton) {
            editSubscriptions();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 这是最愚蠢的错误...我觉得没有人在发布之前测试过这个演示/教程. (6认同)
  • 对于到达这里的任何人:**这个答案是关于in-app-billing-v02样本不在app-billing-v03** (2认同)