【问题标题】:in-app billing issue with purchase of consumable购买消耗品的应用内计费问题
【发布时间】:2014-12-07 02:58:17
【问题描述】:

我有几个销售订阅的应用程序,但现在我正在销售一种消耗品,但它不能正常工作。我卖了消耗品,订单确实通过了,但我的代码立即消费和供应不起作用。 . .

public void btnTranslations_Clicked(View v)
{
    String payload = "";
    DebugLog.debugLog("Launching translations purchase flow", false);
    mHelper.launchPurchaseFlow(this, SKU_TRANSLATIONS, RC_REQUEST,
            mPurchaseFinishedListener, payload);
}
    // Callback for when a purchase is finished
    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
            DebugLog.debugLog("In Purchase finished: " + result + ", purchase: " + purchase, false);

在上面的示例中,购买流程已成功启动,但控制永远不会返回到 PurchaseFinishedListener 回调。我知道是因为该调试语句永远不会执行。

还好,当应用再次启动时,代码如下

mHelper.queryInventoryAsync(mGotInventoryListener); 

工作正常,因为回调有效,并且用户在上次执行时购买的消耗品被消耗和配置。

所以问题是为什么 IabHelper.OnIabPLurchaseFinishedListener 永远不会被执行? 谢谢, 院长

【问题讨论】:

    标签: android in-app-purchase in-app-billing


    【解决方案1】:

    好吧,我在这里再次回答我自己的问题。我不知道是我的问题越来越难还是这个论坛变得没有以前那么有用了。

    问题在于 Google 文档中的错误和遗漏,即 this

    文档完全没有说需要以下方法才能立即使用和配置工作。 . .

       @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
            if (mHelper == null) return;
    
            // Pass on the activity result to the helper for handling
            if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
                // not handled, so handle it ourselves (here's where you'd
                // perform any handling of activity results not related to in-app
                // billing...
                super.onActivityResult(requestCode, resultCode, data);
            }
            else {
                Log.d(TAG, "onActivityResult handled by IABUtil.");
            }
        }
    

    对 mHelper.handleActivityResult 的调用以某种方式导致 mPurchaseFinishedListener 回调执行。 TrivialDrive 示例代码有这种方法——他们只是认为不适合将它放在操作说明中。还有其他错误,例如如何正确包含aidl文件。

    危害在于这些草率的文档将几个小时的任务变成了几天的任务,因为他们的每一个遗漏/错误都需要研究。

    也许这些文档的下一个受害者会浏览这篇文章并节省一些时间。 院长

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多