2013年6月28日金曜日

In-App Billing Version 3で少しはまった所

In-App Billing Version 3を使ってみました

同じように困っている人がいるかもしれないので、メモの意味もかねてブログに書いておきます

テストで行った課金処理がクリアできない


アプリ内課金でテスト用に用意されている「android.test.purchased」というアイテムで購入処理の動作を確認する訳ですが、一度購入すると2回目からは既に購入済みとなってテストが出来ない
そこで購入情報のクリア方法をググってみるとGoogle Playのキャッシュを削除するといいという情報があった

[設定]→[アプリ]からGoogle Playを探して「キャッシュを消去」をしました

しかし、購入情報がクリアされません

ならば!と「データを消去」の方を実行したところ購入情報がクリアされました

検証端末:Android 4.2.2 のGalaxy Nexus

「キャッシュを消去」で上手くいかない人は「データを消去」を試してみてください


課金処理後のonActivityResultが呼び出されない


In-App Billing Version 3ではstartIntentSenderForResult (IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) を使って購入処理が実行されて、購入処理後に結果がonActivityResult (int requestCode, int resultCode, Intent data)に返ってきます
アプリ側ではonActivityResult (int requestCode, int resultCode, Intent data)で返却を待って購入後の処理(たとえば購入ボタンを非表示にするなど)を行えば良い訳です

しかし、あるページでは上手く動作するのにあるページでは上手く動かないという現象が発生しました

yanzmさんのブログ「Y.A.M の 雑記帳」にある「In-app billing V3 は singleInstance な Activity では使えない
をみて、ひょっとしてsingleInstanceにしてたっけ?
と見てみましたが違いました

もっと単純でした

課金処理はスーパークラスに記載して、サブクラスから購入処理を実行したのですが、このサブクラスにonActivityResult (int requestCode, int resultCode, Intent data)がありオーバーライドしていた事が原因でした
ですので
super.onActivityResult (int requestCode, int resultCode, Intent data)
を追加したら上手く動きました

単純なミスですが見つけにくかった・・・


ほかにもあったような気がしますが思い出したら追記することにします

しかし、In-App BillingがVersion 3になって簡単になりましたね
簡単といってもお金が関わる所なので慎重なテストが必要となるで作業としては大変ですね

0 コメント:

コメントを投稿