標準で購入意向を送信した場合
String mySku = "Android.test.purchased";
mHelper.launchPurchaseFlow(this, mySku, 10001, mPurchaseFinishedListener);
私はアイテムを購入することができます、そしてそれは保存されます、そして私はアイテムを照会することができます、そしてそれもうまくいきます。動作しないのはPurchaseFinishedListenerだけです。サンプルアプリとほぼ同じようにコーディングしていますが、まったく呼び出されていないようです。
12-12 01:40:47.248: D/IabHelper(23502): Calling getPurchases with continuation token: null
12-12 01:40:50.116: D/IabHelper(23502): Starting async operation: launchPurchaseFlow
これらは呼び出される最後の2つのメソッドであり、その後、購入が完了すると、purchasefinishedlistenerは呼び出されません。
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: "
+ purchase);
if (result.isFailure()) {
complain("Error purchasing: " + result);
// setWaitScreen(false);
return;
}
if (purchase.getSku().equals(mySku)) {
Log.d(TAG, "mySku is being consumed.");
mHelper.consumeAsync(purchase, mConsumeFinishedListener);
}
Log.d(TAG, "Purchase successful.");
new AsyncQuestionsActivity().doInBackground();
}
};
ログから最後まで何も機能しません。どういうわけか私が見逃しているものはありますか?
私はそれを修正する方法を見つけました。 onActivityResultにhandleActivityResultを実装します。リスナーと立ち上げられた購入フローの間に架け橋を作る必要があります。
以下に私が使用したコードを示します。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + ","
+ data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
AndroidPenguin、あなたと同じ問題が発生していますが、activityresultが正しく設定されていますが、purchasefinishedlistenerが実行されません。
これが私のonActivityResultです
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (SettingsManager.getBooleanSetting(rootId, "inapppurchase", false)){
Log.d(TAG, "take care of activity result with billing helper");
if (!mBillingService.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.");
}
}
else
super.onActivityResult(requestCode, resultCode, data);
}
私の場合、このように動作しているので、そのグーグルプレイダイアログが閉じるまで待ってください。そうすると、リスナーが呼び出されます