【Android】開発ビルドアプリで課金テストするためにやること

経緯

開発ビルドアプリでGoogle play アプリ内課金のテストをする上で躓くことがありポイントをまとめました。

公式ドキュメント

結論

  • 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)を渡します。

開発ビルドアプリで、ライセンステスターを使用してアプリ内課金のテストを行うと、以下のような表示になります。

error dialog
課金ダイアログでエラー
開発環境では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

managed Google Play でアプリを公開し開発ビルドアプリで課金テストを行うには

  1. Google Workspace(旧G suite)にログインし、組織を追加後顧客IDをコピーします。

  2. Google Play Consoleで限定公開するアプリの managed Google Playを有効にします。 設定 > 詳細設定 > managed Google Play にて1でコピーした顧客IDを登録します。

  3. Androidの端末設定で仕事用プロファイルを有効に設定する Google Workspace のデバイス > モバイルとエンドポイント >設定 >Android設定で仕事用プロファイルを有効にします。この設定を行うことで社用アドレスをAndroid端末に追加すると「仕事用プロファイル」の追加を求められるようになります。

  4. 開発ビルドアプリを managed Google Play で入手する

Android端末からGoogle Workspace アカウント(社用アドレス)を一旦削除後、再度アカウントを追加

Android Device Policyを削除して、再度Android Device Policyをインストール
します Android Device Policyをインストールすると自動的に仕事用プロファイルが追加されます


仕事用プロファイル削除はここを見てね!
- 設定>パスワードとアカウント>仕事用 >仕事用プロファイルを削除
 仕事用のペインを開き、鍵アイコンのついたPlayストアで開発用アプリを検索してインストールします。GooglePlayの購入ダイアログを起動すると価格情報が取得できます。

仕事用ファイルを追加した端末の アプリ一覧

まとめ

最後まで読んでいただきありがとうございます! iOSで先駆けてアプリ内課金実装してくれたためほぼほぼ機能の詳細設計もつまずくことなく実装できたのですが、今回の記事にした内容はGoogleの中の人に問い合わせたりWorkspaceの担当者に聞いたり、ストアの設定がアプリに反映されるまでラグがあったりと大変時間を要してしまい、予定していた工数を大幅にオーバーしてしまいました。

これから同じように開発ビルドでしっかりと課金フローを確認したい方の一役変えれば嬉しいです。

speakerdeck.com

iOS/Android別々で開発しているVoicyアプリの処理を揃えるために始めたこと

この記事はVoicyアドベントカレンダー14日目の記事です。
誰がなんと言おうと14日目の記事です。

いよいよ寒くなってきましたね!みなさまいかがお過ごしでしょうか。
私はBiSHの解散を聞いて数日落ち込んでいます。
Voicyはオフィスが道玄坂にあり、BiSHの所属事務所も道玄坂にあるので、いつかばったり出会してしまうのではないかと通勤時はいつもそわそわしてしまいます。

というわけで本日の記事は私ほーりー(@horitamon)の担当です!
VoicyのAndroid版アプリの開発を担当しています。
最近は社内でバンドを組んだり?、そのTシャツが制作されたり?と、精力的に音楽活動も行っています。

今年のVoicyアプリも新機能のリリースが盛りだくさんだったわけですが、その中で私がVoicy4つのアプリの処理を揃えるためにはじめたことについて語っていきます!
技術的な細かい点については別記事で語ることにして、今回はそれぞれの目的や、やってみての気付きを中心にまとめていきます。

続きを読む

DynamoDBの設計において注意したいポイント

Voicyアドベントカレンダー 25日目の記事です。

今日は12月25日クリスマス、もう直ぐ今年も終わりですね。

このアドベントカレンダーも今日で最後となります。25日間のブログぜひ再度目を通していただけますと幸いです。

qiita.com

またVoicyではvoi-chordという声で届けるテックチャンネルもやっておりますので、ぜひそちらもお聞きください。

voicy.jp

前置きが長くなりましたが、本題に入ります。

近頃データストアとしてRDBMSではなくNoSQLという選択をすることが自分やチームにおいて増えてきました。

しかし、DB設計にあたってRDSと構造が大きく異なることから、様々な壁にぶち当たってきました。

今回はそのNoSQLの代表格であるAWSDynamoDBをテーマに、その設計で得た知見を共有していきたいと思います。

続きを読む

GoのSQLBoilerでDistinctを利用する方法とその問題点

Voicyアドベントカレンダー 23日目の記事です。

こんにちは!株式会社Voicyでバックエンドエンジニアをしているたーふーと申します。
簡単に自己紹介をさせていただくと、自分は今年の9月にVoicyに入社したので、まだ入社して3ヶ月ちょっとの新参者になります!

全然関係ないですが、クリスマス前の今皆さんいかがお過ごしでしょうか。
Voicyでは明日クリスマス会があるようなので、自分は楽しみにしている最中です!

では本題に戻りまして、、

今回はGoのSQLBoilerでDistinctを利用する方法とその問題点についてお話しできればと思います!

自分自身Goを実務で利用したのはVoicyに入社してからなので歴は浅いのですが、、
その中でSQLBoiler関連の情報が少ないように感じた経緯があり、今回この記事を書かせていただきます。

なので同じような方の参考になれば幸いです!もし興味があれば是非ご覧ください!!

続きを読む

EMの定義から考えてEM始めました

こんにちはエンジニアリングマネージャの山元です。

この記事はVoicyアドベントカレンダー 23日目の記事です。

最近社内の特にPMチームで自分の役職を説明している記事が増えていて、 確かにマネジメントって言語化しないとわからないよなあ〜と思って 影響されて自分も書き出してみたいと思いました。 ぜひプロダクトチームのみなさんの記事も見てください (文面真面目人間なので、キャッチーな文章かけて羨ましいです!)

PMの長のぶんたさんの記事

note.com

PMMのDさんの記事

note.com

この記事ではEM歴6ヶ月の自分が、「EMってなんだ?」から「こういうことやってるよ〜」となった思考のプロセスをつらつら書いています ぜひ以下のような人にぜひ!

  • EMになりたいエンジニア
  • EMのことを理解したい人
  • EMやっていて他社事例を知りたい人
続きを読む

パーソナリティダッシュボードを改善した話

自己紹介

こちらは Voicy Advent Calendar 2021 16日目の記事です。

初めまして、株式会社Voicyでデータアナリストをしている翔斗です。 Voicyでは、パーソナリティやリスナーが楽しく継続して発信・聴取するために行っている施策の分析や社員がより楽に正しく意思決定を行えるように現状の分析や行動のサポートを行なっています。

本日はVoicyがパーソナリティ向けに提供している分析用のダッシュボードを改善した話をしていきます。

続きを読む