2014年10月20日月曜日

Unity Android Prime31のIn App Billing PluginでpurchaseCompleteAwaitingVerificationEventが発生する

UnityのAndroid課金PluginであるPrime31 In App Billingを使用していた時に
発生した問題とその対応方法を書き残しておく。

つい此間まで、課金処理のイベントで購入後
purchaseSucceededEventが返ってきていたのに
purchaseCompleteAwaitingVerificationEventが返ってきてしまうようになっていました。

prime31のドキュメントもソースコードのコメントも、いまいちニュアンスがつかめず
何の認証を待っているのかわかりませんでした。
色々試しましたが、その中でおそらくこれが対策として良いものであると言えそうなものを
挙げておきます。

1.
Google Play Consoleの振込先口座の設定状態を見直す。
登録中ならさっさと登録を済ませて完了させておく。

2.
GoogleIAB.init(publicKey);のあとに

GoogleIAB.setAutoVerifySignatures(true);

を追加しておく。
これが何の認証かよくわからない、だいたいサンプルはこれを使っていない。

3.
これは、アンチパターンだけれども
purchaseCompleteAwaitingVerificationEvent内には何も処理を書かない。
最初、purchaseSucceededEventが来ないなら同じ処理をよびだしちゃえと思って
purchaseSucceededEvent内の処理を呼び出していたけど何故かNullReferenceが
発生していました。
なので、purchaseCompleteAwaitingVerificationEventは引数をデバッグ出力する
記述しか残していません。

おそらく2.の記述により、
purchaseCompleteAwaitingVerificationEventが発生するけれども
そのあとにちゃんとpurchaseSucceededEventが発生するようになりました。

しかし、誰もpurchaseCompleteAwaitingVerificationEventが発生したことがないのか
ネット上では対策が見つけられなかった。
それともみんな、setAutoVerifySignaturesを設定するのがデフォルトなことになって
いるのでしょうか。