onIabPurchaseFinished从来没有所谓。(onIabPurchaseFinished

2019-07-19 16:51发布

我一直在试图建立应用内结算为我的第一个应用程序,并已使用android.test.purchased SKU。 购买来通过,我设法让SKU进入我的库存,但是,正如标题所说,onIabPurchaseFinished,永远不会被调用。

我认为它可能有一些做与此日志:“无法保存其观点焦点,因为聚焦的观点com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0没有ID”。 弹出,正确的去谷歌播放之前。 我真的不知道这意味着什么,但...

启动购买:

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


    }
};

Answer 1:

尝试添加这调用活动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.");
    }
}


Answer 2:

我只是发现了另一个重要的东西:用来启动购买流程requestCode必须为> = 0!

我用“新的随机()。nextInt()”来生成一个随机requestCode,有时它的工作,有时没有。 现在我下面的文档中发现,该requestCode不应该是一个负数:

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



Answer 3:

我有同样的问题和onActivityResult中也不叫。
从启发@吴拉姆的回答我意识到,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);
        }
    }


Answer 4:

我面临着同样的问题,接受的解决方案已经实施,但说不出是什么造成了这一点。 移动到新的谷歌Play结算库1.0(2017 年9月19日发布)修正这个问题对我来说!

我希望下面的链接将帮助别人想执行新的图书馆谁:

谷歌的博客文章发布

谷歌的YouTube视频

Play结算库培训班

谷歌的琐碎的驱动V2样品

在播放过程中谷歌I / O 2017年公布的结算库代码实验室

Play结算库文件

类和方法的官方参考

发布笔记



Answer 5:

你需要调用保护无效onActivityResult(); 在你父母的活动,而不是展示您所呼叫的MainActivity那是微不足道的驱动器活动MainActivity(普通驱动器)。

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



文章来源: onIabPurchaseFinished never called.