はじめまして。
以下のような仕様にて、アプリ内課金の機能を実装しております。
1)アプリ内アイテム購入後、消費(IInAppBillingService.consumePurchase())を実行
2)消費完了(BILLING_RESPONSE_RESULT_OK 返却)のタイミングでユーザにアイテム付与
3)購入後、消費完了前に通信断等があった場合に備えてリストア機能を実装
4)リストア機能では、まず IInAppBillingService.getPurchases() で購入履歴を取得
5)購入履歴中の購入済みのものに対して消費を実行し、完了したものについてアイテムを付与
動作テストとして、2)の consumePurchase() の呼び出し直後に通信断が発生するようにし、
テストを行いました。
通信断の方法として、A)機内モードにする、B)WiFiアクセスポイントのWAN側のケーブルを抜く
を行いました。※ B)は端末側で通信断が判断できない場合テスト
その結果、
A)では、4)5)のリストア処理にて正常にアイテムの付与が可能
B)では、4)にて購入履歴にて未付与のアイテムが取得できたのにも関わらず、
消費(consumePurchase())の結果が、BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED
となった。(数回のテストで何度か発生)
という状況でした。
B)に関して、買ったのに受け取れなかったというユーザクレームに
繋がりそうな挙動のため、対策を取りたいと考えておりますが、
なぜこのような挙動となるのかご存知の方や、対策を取られた方が
いらっしゃいましたらアドバイスを頂きたく、よろしくお願いいたします。