onIabPurchaseFinished从未调用。


111

我一直在尝试为我的第一个应用设置应用内结算,并且一直在使用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!");
             }


    }
};

我也许应该补充一点,我正在尝试从选项卡中执行此操作
AAAton

我已经以编程方式设置了id,但没有区别。
AAAton

Answers:


206

尝试将其添加到调用的Activity中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.");
    }
}

16
有同样的问题,并且效果很好。但是我想知道的是为什么为什么不像人们想象的那样执行回叫,为什么我们必须对自己进行回叫呢?某种方式使回调无效:/
蜘蛛

4
也帮助了我,谢谢。@Spider,在Activity中需要此方法的原因是,否则将不会调用mHelper的handleActivityResult()方法。换句话说,这是Activity中所需的实际/标准handleActivityResult(),而mHelper实际上只是一个常规的旧方法。
gcl1 2013年

8
谢谢你 这是文档中的错误(他们从来没有在IabHelper中提及此错误。IabHelper的launchPurchaseFlow()会调用startIntentSenderForResult-活动完成时将调用您活动的onActivityResult()。)
Jerry Brady

3
我以为我发现问题后就解决了我的问题……然后我意识到我已经实现了此功能,但仍然无法正常工作…… 感叹
Matt K

3
请注意,在Fragment上覆盖onActivityResult()无效,必须在Activity上完成
cprcrack 2014年


3

我有同样的问题,onActivityResult也没有被调用。
@Ghulam的答案中得到启发,我意识到活动onActivityResult不会自动调用该片段的onActivityResult,因此我必须手动进行操作。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(mCurrentFragment!= null){
            mCurrentFragment.onActivityResult(requestCode, resultCode, data);
        }
    }

在我而言,这个答案的工作,但我不得不在我的主要活动(添加OnActivityResult覆盖github.com/onepf/OpenIAB/issues/166
PayToPwn

1

您需要调用protected void onActivityResult(); 在您的父活动而不是MainActivity(Trivial Drive)中,您从中调用的MainActivity是琐碎的驱动器活动。

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


0

我遇到了同样的问题,已经实现了可接受的解决方案,但无法确定是什么原因造成的。转到新的Google Play计费库1.0 (于2017年9月19日发布)为我解决了这个问题!

我希望以下链接对希望实施新库的人有所帮助:

Google关于发布的博客文章

Google的youtube视频

玩计费图书馆培训班

Google的琐事驱动器v2示例

播放在Google I / O 2017期间发布的计费库代码实验室

播放帐单资料库文件

类和方法的官方参考

发布说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.