Android向けアプリ内課金(Google Play Store)でテスト確認までにはまったポイント


Android向けアプリのアプリ内課金を作っていて、テスト確認するまでにはまったポイントを自戒も込めてメモしておきます。

そもそものBillingの実装の仕方についてはこのあたり公式ドキュメントとQiitaなど参考ページをご確認ください。

https://developer.android.com/google/play/billing/billing_overview
https://developer.android.com/google/play/billing/billing_testing
https://qiita.com/knkj28/items/91ff37dedc767463459b
https://qiita.com/takahirom/items/4d597b00f500efb3dc7f
https://qiita.com/intel_au/items/0d3266d028c788f3ac2d#課金するgoogleアカウントを事前にデベロッパーコンソールから設定しておく必要があるhttps://www.masaibar.com/entry/play_billing_library_codelab#fn-2d90fbfe
http://akai0ringo.blog.shinobi.jp/android/androidのアプリ内課金処理

はまったポイント1

一番はまったのが、BillingSDKなどを使って一通り実装をした後、動かしてみると startServiceConnectiononBillingSetupFinishedresponseCode=0 が返ってきているにもかかわらず、 querySkuDetailsAsync の中に、自分が定義したSKUのリストが返ってきてくれないというところでした。

特に
https://qiita.com/knkj28/items/91ff37dedc767463459b#自分が定義した商品idを使う
この辺りをよく読んでから作業をすればよかったのですが、ひとまず自分のアイテムではなくてもいいやと考えて、リクエストするプロダクトIDをandroid.test.purchased のようなテスト用に用意されているものに変えてみたところ正常に情報が取得できたところで、問題がプログラム部分ではないのではないか、ということに気づきました。

対応ポイント

まず、一番大きな原因だったのがテスターの扱いでした。
商品登録をするためにAPKをいったんアップロードする必要があったり、というあたりは気づいて手続きしていて、内部テスターとして自分のアカウントも登録していたのですが、そのテスト登録したAPKについては内部公開するところまで手続きができていませんでした。
このため、テスター登録自体が有効ではない(オプトインが完了していなかった)状態だったので、いくらやっても有効な商品リストが取れない、という状態でした。

結果としてみてみると、Google Play Consoleのアプリのリリース画面で、左側のメニューに表示されるチェックがすべてグリーンになり、右側の「内部テストとして限定的な公開を開始」のボタンがクリックできる状態になるまで情報を登録する必要がありました。
この状態に持っていくためには、ストアに公開する情報も一通り登録する必要があるため、アプリアイコンヘッダー画像 スクリーンショットなども登録する必要があります。
またアプリ内で設定しているパーミッション次第では、プライバシーポリシーのページのURLを設定する必要もあるかもしれません。

このあたりの情報を一通り設定してアプリを公開手続きした後、数十分すると、Console上でオプトインURLが確認できるようになるのでそのURLをテスター登録しているアカウントに送って、オプトイン手続きまで完了して、初めて、商品情報を取得することができました。


はまったポイント2(追記)

上の問題をクリアした後、いざ購入処理、と進めてみたところ、何をクリックしても「このバージョンのアプリは、Google Playを通じたお支払いはご利用になれません。詳しくはヘルプセンターをご覧ください。」というエラーが…

対応ポイント

参考URLを見ていただければ書いてあるのですが、アカウントをGoogle Developer Console上で「テスト用のアクセス権がある Gmail アカウント」として登録する必要がありました。
参考ページの記述自体は最初から読んではいたのですが、設定場所が見つからず、「Consoleのバージョンが変わって設定が不要になったのかな?」などと考えてしまっていましたが、何のことはない、「設定>デベロッパーアカウント>アカウントの詳細>ライセンステスト」と進むためには、まず最初に「すべてのアプリ」の、Consoleトップページに戻す必要があるだけでした。
アプリを選択した、個別設定画面の中からは直接は「設定」ページに進めません。(と思います)

このライセンステストのアカウント設定については、設定の反映まで数時間待つような必要はなく、設定直後から普通にテスト購入ができるようになりました。


チームでやっているとこのあたりの情報は把握できて当たり前かもしれませんが、個人で調べながらやっているとなかなか情報が少なくて気づけないポイントなんじゃないかと思いましたのでまとめてみました。
どなたかの助けになれば幸いです。


ついでにもう1ネタ

これだけだとあまりにも何なので、取得した商品の並び替えについて。
商品を価格別に並べようと思った時、例えば、価格帯が 1,000 300 500 となっている場合、普通にsku.priceで並べ替えをすると、文字列のため、このままの順番で並んでしまいました。

        skuDetailsList.sortBy { it.priceAmountMicros }

とやることで、値段の昇順に並んでくれました。