その後、色々と試してみた結果を記載致します。
まず、IabHelperを通してlaunchPurchaseFlowでアイテムを購入する事で、購入処理は完結し、ユーザは該当アイテムを所有する。
その後、管理画面よりデベロッパー側で購入をキャンセルする。
この時点でユーザ側にキャンセル通知のメールが届く。
通常、このタイミングでアイテムの所有も解除されているのが自然だと思ったのですが、ここで
queryInventoryAsyncを呼んでアイテムの所有状態を確認しても、QueryInventoryFinishedListenerに通知されるInventoryを参照すると、
inventory.hasPurchase(該当アイテムID)がtrueで戻ってきてしまいます。
これは15分間隔くらいで何度も試してみましたが、1日経過してもfalseで戻ってくる事はありませんでした。
デベロッパー側でキャンセルをしても、アイテムの所有まではキャンセルされないのかと思い、再テストを行うためにconsumeAsyncでアイテムの消費を行いました。
すると、OnConsumeFinishedListenerには、すでにアイテムを所有していないBILLING_RESPONSE_RESULT_ITEM_NOT_OWNEDが戻ってきました。
これは、キャンセル後すぐは正常に消費されるので、キャンセルから一定時間が経過したためにアイテムの所有状態もキャンセルされた証だと思うのですが、
そうすると、なぜinventory.hasPurchase(該当アイテムID)がtrueで戻ってきたのかが分かりません。
アイテムの所有、未所有を判定するためにinventory.hasPurchase(該当アイテムID)以外のメソッドがあるのでしょうか?
もし詳しい事をお知りの方がいらっしゃいましたら、ご教唆頂けると幸いです。
この処理を完結させたい理由として、非消耗型のアイテムを購入したユーザからのメールなどでのキャンセル要求に対して、管理画面からの操作で払い戻しする代わりに
アイテムの所有状態も未所有に戻したい、という事情があります。
何とぞよろしくお願い申し上げます。
2013年3月18日月曜日 13時27分59秒 UTC+9 Maasa: