私は最初のアプリのアプリ内課金を設定しようとしており、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!");
}
}
};
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以上でなければなりません!
"new Random()。nextInt()"を使用してランダムなrequestCodeを生成しましたが、動作する場合も動作しない場合もありました。今、私は次のドキュメントでrequestCodeが負の数であってはならないことを発見しました:
同じ問題があり、onActivityResultも呼び出されませんでした。
インスピレーション @ Ghulam's answer アクティビティ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);
}
}
私は同じ問題に直面しており、受け入れられたソリューションはすでに実装されていましたが、これが何を引き起こしているのかわかりませんでした。新しいGoogle Play Billing Library 1.0(2017年9月19日リリース)への移行により、私!
リンクをたどると、新しいライブラリを実装したい人に役立つと思います。
Protected void onActivityResult();を呼び出す必要があります。 MainActivity(Trivial Drive)の代わりに親Activityで、Trivial DriveアクティビティであるMainActivityを呼び出しています。
購入が成功した場合は結果コード値-1、それ以外の場合は0を受け取ります。