22

標準で購入意向を送信した場合

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();
    }
};

ログから最後まで何も機能しません。どういうわけか私が見逃しているものはありますか?

4

4 に答える 4

50

私はそれを修正する方法を見つけました。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.");
        }
    }
于 2012-12-12T04:10:45.490 に答える
5

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);
}
于 2013-01-12T19:40:31.730 に答える
1

私の場合、このように動作しているので、そのグーグルプレイダイアログが閉じるまで待ってください。そうすると、リスナーが呼び出されます

于 2013-08-01T11:47:22.843 に答える
-1

私が経験していたのと同じ問題を抱えていたあなた方のために...

メンバー変数IabHelperを静的にしたところ、問題が修正されました。

すでにAndroidPenguinのコードを追加しましたが、アイテムを購入した後もnullのIabHelperからクラッシュが発生していました(したがって、mHelperがnullであるため、onActivityResultがhandleActivityResultを呼び出す機会がありませんでした)。

于 2014-11-14T16:46:39.033 に答える