我一直在试图建立应用内结算为我的第一个应用程序,并已使用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!");
}
}
};
尝试添加这调用活动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.");
}
}
我只是发现了另一个重要的东西:用来启动购买流程requestCode必须为> = 0!
我用“新的随机()。nextInt()”来生成一个随机requestCode,有时它的工作,有时没有。 现在我下面的文档中发现,该requestCode不应该是一个负数:
http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29
我有同样的问题和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);
}
}
我面临着同样的问题,接受的解决方案已经实施,但说不出是什么造成了这一点。 移动到新的谷歌Play结算库1.0(2017 年9月19日发布)修正了这个问题对我来说!
我希望下面的链接将帮助别人想执行新的图书馆谁:
谷歌的博客文章发布
谷歌的YouTube视频
Play结算库培训班
谷歌的琐碎的驱动V2样品
在播放过程中谷歌I / O 2017年公布的结算库代码实验室
Play结算库文件
类和方法的官方参考
发布笔记
你需要调用保护无效onActivityResult(); 在你父母的活动,而不是展示您所呼叫的MainActivity那是微不足道的驱动器活动MainActivity(普通驱动器)。
您将收到resultCode为值-1,如果购买成功,否则为0。
文章来源: onIabPurchaseFinished never called.