2016年6月20日まで、アプリで行ったテスト購入をキャンセルできました。同じテストアカウントから複数のアプリ内購入(消耗品ではない)を実行することで、コードの開発とテストが簡単になりました。
2016年6月20日以降、購入した商品は販売アカウントに表示されず、テストアカウントから複数回購入することができませんでした。私が得たのは、「あなたはすでにこのアイテムを所有しています」というメッセージだけでした。
Google開発者サポートグループにリクエストを記録しましたが、その答えは次のとおりです。
2016年6月20日から、1回限りのアプリ内購入(IAP)のテスト購入を変更しました。以前は、ワンタイムIAPの購入をテストして注文IDを生成していました。 2016年6月20日以降、1回限りのIAPは正式な注文IDを生成しません(もしあれば)、Merchant Centerには表示されません。この動作はすでにサブスクリプションIAPに適用されます。アプリ内課金のテストの詳細については、Android Developers Help Center: https://developer.Android.com/google/play/billing/billing_testing.html# testing-purchases
さて、私は言及されたリンクに行き、そこにセクションがあります:完了したテスト購入のキャンセル:
Google Playは各ユーザーの完了したテスト購入を蓄積しますが、それらを金融処理に渡しません。場合によっては、テストの購入を手動でキャンセルして、テストを続行することができます。そのためには、Playストアでアプリページを開きます。キャンセルするテスト購入がサブスクリプションの場合、Purchases.subscriptions APIのcancel()メソッドを使用することもできます。重要:Purchases.subscriptions APIのreload()およびrevoke()メソッドは、テスト購入をサポートしていません。
だから私はPlayストアのアプリページに行きます...そして正確に何をしますか?ウェブページには、私がそこで行うことになっていることが記載されていません。誰もが知っていますか?
Purches.subscriptions APIのcancel()メソッドも使用できます。
これは、cancel()メソッドの使用が唯一のメソッドではないことを示しています。
アプリにコードを追加せずにこれを解決するにはどうすればよいですか?
メインのGoogle Play Consoleページに移動し、Order Managementをクリックしました。その下で、私はすべてのテスト購入を選択し、それらを払い戻すことができました。私はアプリの主な開発者なので、アクセスできます。テスターの場合、おそらくサポートチームに連絡して、注文の払い戻しを依頼する必要があります。
管理対象のアプリ内製品はすべて消耗品です。
docs に記載されているとおり。
つまり、購入をキャンセルする代わりに所有アイテムを消費して、もう一度購入することができます。アプリの起動時にインベントリを照会することをお勧めします。
mIabHelper.queryInventoryAsync(this);
その後、コールバックで所有アイテムを消費できます。
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Purchase purchase = inventory.getPurchase(MY_SKU);
boolean isBought = (purchase != null && verifyDeveloperPayload(purchase));
if (isBought) {
mIabHelper.consumeAsync(purchase, new OnConsumeFinishedListener() {
@Override
public void onConsumeFinished(Purchase purchase, IabResult result) {
//Clear the purchase info from persistent storage
}
});
}
}
これはIABフローをテストするのには問題ありませんが、リリースバージョンからこのコードを削除してください。
Playコンソールで、[開発者アカウント]-> [アカウントの詳細]に移動し、ライセンステスターを設定します(デフォルトでは1つです)
アイテムを購入する
[注文管理]に移動し、それらのテスト注文を選択し、[返金]を選択します。ただし、払い戻しの際に[取り消し]を確認することを忘れないでください。 (取り消すのを忘れていたが、今では取り戻す方法が見つからない)
とにかく、別のテストアカウントでできます。
あまり便利ではないが機能する解決策を見つけました。消費できない製品を消費することができ、その方法で再び購入できるようです。 phonegapを使用しているので、cordova-plugin-purchaseプラグインのサンプルコードのみがあります。
_store.when("your.product.id").updated(product => {
if(product.owned) {
var transaction = product.transaction;
product.transaction = null;
store.inappbilling.consumePurchase(
function() { // success
alert("consume success");
},
function(err, code) { // error
alert("consume error " + err)
},
product.id,
transaction.id
);
}
});
_
store.refresh()
を呼び出すか、製品を購入すると、更新されたコールバックが呼び出されます。そのため、ユースケースに応じて、製品をいつ消費するかをチェックする追加の方法を実装する必要があります。
私はネイティブのAndroidアプリ内支払いの経験はありませんが、明らかにあなたはそこでも製品を消費することができるでしょう。
編集:申し訳ありませんが、プロジェクトに追加のコードを含めたくなかったと読みました。私は現時点ではそれが可能だとは思いませんが、アプリ内支払いをテストしようとする他の人を助けるかもしれないので、ここで私の答えを保持したいと思います。
から https://stackoverflow.com/a/30178861/326904 @mttmllns
特別な消費コードを書く必要はありません。 Google Playストアのデータを消去するには、adbコマンドを使用します。
adb Shell pm clear com.Android.vending
これに対する解決策が見つかりませんでした。私の回避策は、テストユーザーリストから現在のテストユーザーを削除し、実際の購入を行い、販売者コンソールを使用してキャンセルするだけです。