web-dev-qa-db-ja.com

アプリ内課金-queryPurchases()が空のリストを返すと、Google Playから「このアイテムは既に所有しています」というメッセージが表示されます

アイテムのテスト購入を1回行っただけで、Wi-Fiが停止したため失敗しましたが、何らかの理由でGoogle Playから注文が保留中であることなどのメッセージが表示され、リンクで確認する必要があります(忘れました)書き留めます)。

同じテスト購入をもう一度行おうとすると、Google Playから「このアイテムはすでに所有しています」というエラーが表示されました。この購入は、Google Playダッシュボードの注文履歴にはありません。

何が起こっているのですか、どうすれば解決できますか?

編集:Google Playストアのキャッシュのクリア、Googleサービスフレームワークのキャッシュのクリア、およびアプリの再インストールは機能しません。


編集2:

Google Playストアアプリを強制停止し、そのデータを消去してから再起動することで、この問題を解決することができました。現時点では、Wi-Fiが切断されたときに行われた購入は、キャッシュではなくPlayストアアプリのデータにあると結論づけることしかできません。

したがって、私の質問は次のようになります。この特定のケースを処理するのは開発者の責任ですか(ソリューションがアプリ自体に含まれていない場合)、どのように処理しますか?

6
Gensoukyou1337

まったく同じ問題がありました。このアイテムを既に所有しているというエラーメッセージが表示されましたが、getPurchases呼び出しが空のリストを返しました。私にとってうまくいったのは、このリストが空の場合に購入履歴を取得し、この特定の製品IDの最後の購入の購入トークンを取得して、それを消費に使用することでした。

mService.getPurchaseHistory(version, packageName, "inapp", null, new Bundle());

履歴には、このユーザーからの各製品タイプの最後の購入に関する情報が含まれていることに注意してください。そのため、製品IDと関連するIDを比較してください。

1
gool