アプリ内課金

【2021年版】Googleアプリ内課金の導入と運用方法(GooglePlayBilling)

2020 年の 10 月から 11 月にかけて、Google Play Billing の公式ドキュメントページが大幅に更新されました。

各ページが整理され、実装のベストプラクティスや仕様がわかりやすくまとまっています。

これまで、消費型アイテムや定期購入アイテム(サブスクリプション)について実装方法や運用ノウハウ的なものを TIPS として書き残してきましたが、変更点を追記していくのが辛くなってきたのも事実・・・。

【Google都度課金】レシート検証をPHPとKotlinで実現するスマホのアプリ内課金は、ゲームのポイントのような都度課金(都度決済)や、音楽聞き放題のような月額のサブスクリプション(定期購読、継続課金...
【Googleサブスク】レシート検証をPHPとKotlinで実現する前回、GooglePlayBilling(Android)の都度課金についてまとめてみましたが、最近は月額課金のサービスが多くなり、都度...

ここで新たに最新のドキュメントを読み直しながら、経験を交えて復習していきたいと思います。

相変わらず、日本語ドキュメントは更新タイミングが遅いので、公式ドキュメントのページ内で表示言語を英語に切り替えて目を通しておくことをオススメします。

アプリ内課金の準備

アプリ内課金を始めるにあたって、Google 関連で必要な設定がいくつかあります。

デベロッパーアカウントや、Android アプリの開発・公開方法、GCP の契約有無など、目的のシーンに合わせて確認しておきましょう。

・Google Play Console
・Google Play Billing Library
・GCP

また、運用の中で推奨される設定もありますので、最初に公式ドキュメントの「準備する」ページに目を通すことをオススメします。

Google Play Billing Library

Android アプリに Google Play Billing Library を追加することで、Google Play に接続するための API アクセスが可能になります。

この API を利用して、アイテムの購入情報を操作しながら決済処理を行うことができます。

ライブラリは定期的にアップデートされていますが、メジャーバージョンアップはインパクトが大きいので、リリースノートを確認しておくことをオススメします。

2020 年 12 月現在の最新バージョンは 3.0.2 になります。今から導入する場合は 3.x 系を使っておくといいでしょう。

Google Play Billing Library の使用方法や機能については、以下のドキュメントページが参考になります。

Google Play Console

Google Play でアプリを公開するには、デベロッパーアカウントを登録して Google Play Console にログインする必要があります。

デベロッパーアカウントの登録には 25 ドル必要(最初に 1 回払うだけで更新費用は不要)で、アカウントを作成すると Google Play Console でアプリの登録や公開が可能となります。

Google Play Console では多くのメニューが存在しますが、その中で主な機能を紹介します。

・Google Play Developer API のアクセス設定
・消費アイテムの管理
・定期購入アイテムの管理
・リアルタイムデベロッパー通知の設定

Google Play Developer API のアクセス設定

Google Play Developer API を利用可能にすることで、消費型アイテムや定期購入アイテムの状態確認ができます。

Google Play Console で「新しいプロジェクトを作成」すると、Google Play Console にリンクされた API プロジェクトが生成されます。

詳しくは Google Play Developer API のドキュメントを参考にしてください。

アイテムの作成

Google Play Console ではストアで提供するアイテムの管理をすることができますが、消費型アイテムに比べ、定期購入アイテムの設定は少し複雑になります。

新しい機能が定期的に追加されている影響もありますが、その影響は Android アプリとサーバサイド(バックエンド側)の両方に出てくるので、新機能の発表にも目を向けておくといいでしょう。

必須の機能、任意の機能など様々ですが、主に以下の設定に注目しておくことをオススメします。

・決済不備時の猶予期間
・決済不備時の保留期間
・ユーザの一時停止期間
・無料トライアル期間

すぐに利用しなくても、任意だった機能が必須に変わることもあるので、どのような機能が提供されているのか把握しておく必要があります。

情報源は公式ドキュメントが主となりますが、Google の開発者ブログでも決済関連の記事がアップされることがあるので、定期的にチェックしておくといいかも。
(こちらは日本語版も英語版と時差程度です)

リアルタイムデベロッパー通知

Google では、ユーザの購入状態の変更タイミングで、その時の状態を通知してくれる機能が用意されています。

消費型アイテムの場合は購入の保留状態の変化(後決済)、定期購入アイテムの場合は購読状態や購読期間に変更があった場合に通知されます。

この通知を受けるためには、以下の設定が必要になります。

・GCP の Cloud Pub/Sub
・Google Play Console に Pub/Sub のトピックを設定

リアルタイムデベロッパー通知のハンドリング方法については、過去にまとめたので以下をご覧ください。

【Googleサブスク】リアルタイムデベロッパー通知の種類とハンドリング「Google(Androidサブスク)のレシート検証について」で書いたように、Google Play Billing のサブスクリプシ...

定期購入(サブスクリプション)

アイテム購入のところで「定期購入アイテムの設定は少し複雑」と書きましたが、状態(ステータス)の遷移もパターンが増え続けています。

サーバサイドで定期購入の状態を確認するには、Google Play Developer API の Purchases.subscriptions:get を使用してください。

状態別のライフサイクルについては公式ドキュメントの表がわかりやすいので、下記を参考にするといいと思います。

過去にまとめたものも参考にしてもらえると幸いです。

【Googleサブスク】購入レシートをステータス別にハンドリングするこれまで、Google Play Billing のサブスクリプションの実装について情報をまとめてきました。 https://it...

また定期購入のライフサイクルを、「テスターライセンス」を使って試すことができます。

GooglePlay アプリから決済状態を変えたり(正常、異常)、解約や再購入のフローを再現できます。

定期購入のライフサイクルの時間も短くなっているため、短時間で状態遷移が確認できるので便利ですよ。

詳しくは公式サイトの以下のドキュメントを確認してみてください。

不正行為や不正使用に対処する

「不正行為や不正使用に対処」と書かれていますが、今回作成されたページの中で必ずチェックしておくべき情報です。

機密性の高いロジックをバックエンドに移動する

Android アプリ自体は改竄のリスクがあるので、機密性の高いロジックはサーバサード側に任せるのは一般的です。

ただし、このドキュメントにはアプリ側でアイテム購入時に取得できる「署名(Signature)」についての説明がありません。

以前は、以下の 3 つの情報を使って、アプリからサーバサイドに送った情報が正しいものかチェックすることが推奨されていました。

・署名
・レシート情報
・公開鍵

もう少し、この項目についての情報が欲しいところです。

次の「利用権を付与する前に購入を確認する」とも絡んできますが、以前は、署名チェックが通ればアプリ側のレシートの内容を完全に信用しても良く、Google Play Developer API でレシート検証をしなくても良かったという解釈になるんですかねぇ。

通常は、署名チェックをした上で Google Play Developer API でレシート検証して、その結果で状態を判断していると思いますが。

利用権を付与する前に購入を確認する

消費型アイテムにしても、定期購入にしても、Google Play Developer API でレシート検証してねというお話です。

その中でも、purchaseToken がグローバルに一意になるので、これをユニークなキーとして扱ってくれと説明されています。

purchaseToken は過去のドキュメントで最大で 1000 バイトという記載がありましたが、主キーとして扱うならハッシュすると良さそうですね。
(なぜかその記載がなくなってしまいましたが)

消費型アイテムの場合は特に、OrderId がユニークになるイメージもありましたが、プロモーションコードを利用した購入ではレシートに含まれないケースがあるそうなので、ここは要注意ですね。

まとめ

新しくなった「Google Play Billing の公式ドキュメントページ」について重要そうな部分をピックアップしてみました。

公式ドキュメントの仕様についてはキレイにまとめられていますが、実装方法については詳細な説明がないところもありますので、下記のページも参考にしてください。

【Google都度課金】レシート検証をPHPとKotlinで実現するスマホのアプリ内課金は、ゲームのポイントのような都度課金(都度決済)や、音楽聞き放題のような月額のサブスクリプション(定期購読、継続課金...
【Googleサブスク】レシート検証をPHPとKotlinで実現する前回、GooglePlayBilling(Android)の都度課金についてまとめてみましたが、最近は月額課金のサービスが多くなり、都度...
【Googleサブスク】リアルタイムデベロッパー通知の種類とハンドリング「Google(Androidサブスク)のレシート検証について」で書いたように、Google Play Billing のサブスクリプシ...

2021 年以降も、Google はユーザが利用しやすくなるような施策を導入してくると思うので、そこに対応しやすいように柔軟な設計を心掛けていきたいですね。