34

Googleの「アプリ内課金v3」に関するトレーニングを受講しました。アイテムを購入することができますが、問題があります。

https://developer.android.com/training/in-app-billing/index.html

購入をキャンセルして払い戻しましたが、アプリは購入をtrueとして検出します。常にアイテムを購入したものとして検出するため、アプリのテストを続行できません。

logCatで見つけた唯一のエラーは次のとおりです。

[3687] InAppBillingService.logResponseBundle:バンドルに応答コードが含まれていません

mHelper.queryInventoryAsync(mGotInventoryListener)を起動した後に表示されます。

何か案が?

4

4 に答える 4

22

ps-これは、払い戻しが更新されるまでに時間がかかることを示しています

http://code.google.com/p/marketbilling/issues/detail?id=88#makechanges

しかし、私は確信していません-彼らがデバイスに購入データをキャッシュしていることを理解していますが、24時間は長い時間です...

「テスト」トランザクションをキャンセルしてから24時間以上経過しても、それらのアカウントは引き続きライセンスされていることを追加するために更新されました。

再度更新-36時間後、アプリはまだライセンスされていました。アンインストールして再インストールしましたが、まだライセンスがありました!!

もう一度更新しました!-デバイスを工場出荷時にリセットし、ログインしてアプリをインストールしましたが、ライセンスがありませんでした...

そして別の更新-Googleからの返信は、払い戻しは「自動的に」処理されるが、デバイスで更新されるまでに「最大72時間」かかる可能性があることを示唆しています-払い戻しを検出する他のルートがないため、プレーヤーは最大3日間のものを取得します彼らが返金する場合は無料です-えーと、これはアプリ内であり、アプリの購入ではありませんが、それでも、それは少し過剰に思えますか?

于 2012-12-16T20:32:43.157 に答える
4

約12時間待って、ここと同様のスレッドで提案されたすべてを試した後も、同じ問題に直面していました。私にとってのトリックは、次のadbコマンドでした。

adb shell pm clear com.android.vending

于 2015-10-27T02:40:03.313 に答える
2

アイテムを消費することにより、テスト目的で購入を簡単に無効にすることができます。

Trivial Driveサンプルを使用して、MainActivity.javaに次のコードを追加しました。これにより、アプリの起動時にプレミアムアップグレードが「消費」されます。

        // Do we have the premium upgrade?
        Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM);
        mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase));
        Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));

        // dss added for test: Consume the premium upgrade for test purposes.
        boolean testConsume = true;
        if (mIsPremium && testConsume) {
            Log.d(TAG, "NOT FOR PRODUCTION: We have a premium upgrade. Consuming it.");
            mHelper.consumeAsync(inventory.getPurchase(SKU_PREMIUM), mConsumeFinishedListener);
            mIsPremium = false;
        } //dss end add

ボーナスとして、サンプルが他の場所ですべての消費をガソリンとして扱っているという理由だけで、アップグレードを消費すると、ガスの無料のクォータータンクを取得します。MainActivityで「プロビジョニング」を検索して場所を見つけます。

于 2016-04-12T20:51:06.380 に答える
0

私がそれを回避する方法は、私が行った特定の購入を無視するコードのブロックを使用することです。購入情報を出力するログステートメントがコードにあり、無視するために、purchaseTimesのアプリにリストをハードコーディングします。それはめちゃくちゃで、テストするたびに再コンパイルする必要がありますが、まだより良い方法を見つけていません。

于 2013-04-06T19:22:28.933 に答える