経緯
開発ビルドアプリでGoogle play アプリ内課金のテストをする上で躓くことがありポイントをまとめました。
公式ドキュメント
- Google Play の課金システムの概要 | Android Developers
- Google Play Billing Library をアプリに統合する | Google Play の課金システム | Android Developers
結論
- Google Play に開発ビルドアプリを登録する
- 自社のサーバーとGoogle間の購入フローを含めたシナリオを開発ビルドアプリで検証するには限定したユーザーにのみ managed Google Play に公開する
- 限定公開アプリでテストするためのGoogle Workspace アカウントを準備
課金形態
Googleが提供するアプリ内課金の形態は以下の2種類があります。
- 1 回限りのアイテム購入
- 定期購入
「1 回限りのアイテム購入」は、ゲームのガチャなど、都度消費することを目的とする場合の消費可能アイテムと、広告の非表示やアップグレードなど、一度の購入で無期限に利用する場合の消費不可アイテムにわかれます。
「定期購入」は、オンライン雑誌や音楽ストリーミング サービスなど、ユーザーがキャンセルするまで自動的に更新され、繰り返し利用できるコンテンツの利用権を提供する場合に用います。
アプリ内課金で購入できるVoicyの特典
Voicyでは以下のコンテンツや特典をアプリ内課金で購入できます。
- パーソナリティへの差し入れ
- プレミアムリスナーへの参加権
- 過去のプレミアム放送
「プレミアムリスナーへの参加権」向けコンテンツをWebで先駆けて販売していました。 Webが採用しているクレジット決済代行システムの仕様に伴い、モバイルでの販売形態はアイテム購入としています。
マルチ環境でアプリをビルドする
Androidアプリで開発環境、本番環境を切り替えるにはProduct Flavorを設定しています。 アプリケーション ID は環境別に一意である必要があり、開発環境のアプリケーションIDには".debug"といったSuffixをつけています。
app/build.gradle
productFlavors { development { applicationIdSuffix ".dev" ... } staging { applicationIdSuffix ".stg" ... } production { ... }
支払いフロー
上記が特典を購入する画面の大まかな処理フローになります。 4番の購入情報をGoogle Playへリクエストする際、production ID(またはSKU)を渡します。
開発ビルドアプリで、ライセンステスターを使用してアプリ内課金のテストを行うと、以下のような表示になります。 開発環境ではproduction IDを本番のそれにinterfixをつけており、Google Play Consoleでは本番のみのproduction IDを登録していて、開発ビルドアプリGoogle Play Consoleでアイテム登録したアイテム情報が取得できません。
// 開発環境のproduction ID jp.voicy.application.dev.tier2 // 本番環境のproduction ID jp.voicy.application.tier2
Playストアには本番ビルドのアプリのみ登録しており、本番でのみ課金フローの確認を行うというのはリスキーですし、自社サーバーで実装した Google Play Developer API の Acknowledge(支払いを承認する処理)や Verify などのGoogle との結合部分を検証する必要があったため、Google Playストアに開発ビルドアプリを公開することにしました。
注:Googleと自社サーバーの結合部分(上記支払いフローの11番以降)の課金フロー検証を本番環境のみで行い、開発ビルドアプリではライセンステスターでの検証で十分な場合は開発ビルドアプリを公開する必要ありません。
限定公開のアプリを公開する
Playストアに登録して公開しない状態で課金フローを検証できることを期待しましたが、だめでした。 ここがハマったのですが、公開しないとやはりアイテム情報が取得できないようです。
また、一般ユーザーに開発ビルドアプリを公開するわけには行かないため限定公開にします。 限定公開についてもハマったのですが、内部テスターやbeta版リリースでも"課金ダイアログ"でエラー表示となります。
調査したところ、managed Google Playに開発ビルドアプリを公開する必要があります。
managed Google Playとは
企業とその社員のみに限定公開されたアプリを入手するためのストアです。 おもにインハウス向けの業務用アプリなどで利用します。
managed Google Play でアプリを公開し開発ビルドアプリで課金テストを行うには
Google Workspace(旧G suite)にログインし、組織を追加後顧客IDをコピーします。
Google Play Consoleで限定公開するアプリの managed Google Playを有効にします。 設定 > 詳細設定 > managed Google Play にて1でコピーした顧客IDを登録します。
Androidの端末設定で仕事用プロファイルを有効に設定する Google Workspace のデバイス > モバイルとエンドポイント >設定 >Android設定で仕事用プロファイルを有効にします。この設定を行うことで社用アドレスをAndroid端末に追加すると「仕事用プロファイル」の追加を求められるようになります。
開発ビルドアプリを managed Google Play で入手する
Android端末からGoogle Workspace アカウント(社用アドレス)を一旦削除後、再度アカウントを追加
Android Device Policyを削除して、再度Android Device Policyをインストール します Android Device Policyをインストールすると自動的に仕事用プロファイルが追加されます
仕事用プロファイル削除はここを見てね! - 設定>パスワードとアカウント>仕事用 >仕事用プロファイルを削除 仕事用のペインを開き、鍵アイコンのついたPlayストアで開発用アプリを検索してインストールします。GooglePlayの購入ダイアログを起動すると価格情報が取得できます。
まとめ
最後まで読んでいただきありがとうございます! iOSで先駆けてアプリ内課金実装してくれたためほぼほぼ機能の詳細設計もつまずくことなく実装できたのですが、今回の記事にした内容はGoogleの中の人に問い合わせたりWorkspaceの担当者に聞いたり、ストアの設定がアプリに反映されるまでラグがあったりと大変時間を要してしまい、予定していた工数を大幅にオーバーしてしまいました。
これから同じように開発ビルドでしっかりと課金フローを確認したい方の一役変えれば嬉しいです。