onIabPurchaseFinished从未打过电话。

时间:2013-02-10 17:11:41

标签: android in-app-billing

我一直在尝试为我的第一个应用设置应用内结算,并且一直在使用android.test.purchased sku。购买通过,我设法将SKU放入我的库存中,但正如标题所示,onIabPurchaseFinished永远不会被调用。

我认为它可能与此日志有关:“无法保存哪个视图具有焦点,因为焦点视图com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0没有id”。在进入Google Play之前就会弹出。我不太确定这意味着什么......

启动购买:

mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");

听众:

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {

    @Override
    public void onIabPurchaseFinished(IabResult result, Purchase info) {
        System.out.println("Purchase Finish heard something");

        if (result.isFailure()) {
             Log.d(TAG, "Error purchasing: " + result);
             return;
        } else{
                Log.d(TAG,"Success!");
             }


    }
};

5 个答案:

答案 0 :(得分:201)

尝试将此添加到调用mHelper.launchPurchaseFlow(..)的活动:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);

    // 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.");
    }
}

答案 1 :(得分:8)

我刚发现另一个重要的事情:用于启动购买流程的requestCode必须是> = 0!

我使用" new Random()。nextInt()"生成一个随机的requestCode,有时它起作用,有时它没有。现在我在以下文档中发现,requestCode不应该是负数:

http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29

答案 2 :(得分:2)

我遇到了同样的问题,也没有调用 onActivityResult
灵感来自@Ghulam's answer我意识到活动 onActivityResult 不会自动调用片段的 onActivityResult 所以我不得不这样做 手动

delete-inventory.csv

答案 3 :(得分:0)

我遇到了同样的问题,已经接受的解决方案已经实施但无法分辨是什么导致了这一问题。转到新的 Google Play结算库1.0 (2017年9月19日发布)为我解决了问题!

我希望以下链接可以帮助那些想要实施新库的人:

Google's blog post about the release

Google's youtube video

Play Billing Library Training Class

Google's Trivial Drive v2 Sample

Play Billing Library codelab published during Google I/O 2017

Play Billing Library Docs

Official reference for classes and methods

Releases notes

答案 4 :(得分:0)

你需要调用protected void onActivityResult();在您的父级Activity而不是MainActivity(Trivial Drive)中,您将调用MainActivity,即简单的驱动器活动。

如果购买成功,您将收到结果代码值-1,否则为0。