技術系TIPS
PR

【Google】アプリ内課金の購入ライフサイクルと通知(RTDN)

saratogax
記事内に商品プロモーションを含む場合があります

GooglePlay のアプリ内課金には、大きく以下の機能があります。

  • 1回限りの購入(消費型、非消費型などの都度課金)
  • 定期購入(サブスクリプション)

また、上記ライフサイクルサービスの他に、ユーザの購入状態の変化をリアルタイムタイムデベロッパー通知(RTDN)で知らせてくれる機能も提供されています。

ここでは、ライフサイクルの処理とリアルタイムタイムデベロッパー通知の概要について紹介します。

これまで GooglePlay のアプリ内課金について、TIPS 的なことを記事にしてきました。

Google 側で API のバージョンアップや機能追加など、ここ数年で変化のあった部分もあるので、2025 年からは GooglePlay の公式ドキュメントをベースに要点をまとめ、そこに実運用で得た TIPS 的な内容を追記していこうと思います。

購入ライフサイクルの処理

「1回限りの購入」と「定期購入」は、それらに影響を与える可能性のあるさまざまな状態とイベントに基づいて、異なるライフサイクルを持ちます。

特に定期購入では、常にユーザの購読状態を管理する必要がありましたが、RTDN のおかげで、状態遷移を確認するためのロジックを構築する必要がなくなりました。

よって、バックエンドが通知を受信した時に、通知タイプを見てどうすれば良いのかのハンドリングを定義するだけで済みます。

具体的な購入のシナリオついては、以下の記事を参照してください。

あわせて読みたい
【Google】アプリ内課金の1回限りの購入ライフサイクル
【Google】アプリ内課金の1回限りの購入ライフサイクル

ただし、RTDN の処理漏れや RTDN が届かない自体に備えて、更新がされていないデータを救済するためのバッチ処理などは用意しておいた方が良いと思います。

実際に、Android アプリで商品購入はできたが、GooglePlay Console で RTDN の設定をミスしていたといった運用上のミスや、Google 側の RTDN の処理がおかしいといった状況が発生したことがありました。

リアルタイムタイムデベロッパー通知(RTDN)とは

リアルタイムデベロッパー通知(以降、RTDN)は、ユーザーの購入状態が変化したときにバックエンドに即時に通知を送信する「Google Cloud Pub/Sub」を使用して構築された機能です。

Pub/Sub システムは、通知を送信するパブリッシャーと、それらの通知を購読するクライアントで構成されています。

RTDN を実装することで、ユーザーの権利状態のすべての変更をリアルタイムで追跡し、迅速に対応できます。

Google Cloud Pub/Sub を利用するために、GCP(Google Cloud Platform)のアカウントを取得する必要があります。

RTDN パブリッシャーの設定

アプリの RTDN を設定するには、セットアップガイドの手順を確認してください。

この設定により、Google Play の課金システムがアプリの RTDN のパブリッシャーとして機能できるようになります。

この設定を完了するには、Google Cloud Platform Console の基本的な Pub/Sub 構成を設定する必要があります。

RTDN サブスクライバーの実装

パブリッシャーを設定したら、RTDN を消費するようにバックエンドの準備をします。

これを行うには、Google Cloud Pub/Sub メッセージを受信するクライアントの構築が必要です。

RTDN クライアントの基本的な機能は、登録されたエンドポイントでの HTTPS リクエストを介して、または Cloud Pub/Sub クライアントライブラリを使用して、PubSubMessage のインスタンスを受信することです。

プッシュまたはプル、どちらの方式を選択かについては、Pub/Sub のドキュメントを参照してください。

Pub/Sub のサブスクライバでプル(pull)を選択した場合は、バックエンド側から定期的に Pub/Sub のメッセージを取得しに行く必要があります。認証やメッセージ取得の設計など、検討することも増えそうです。

プッシュ(push)を選択した場合は、メッセージの中身を解析するだけなので楽ですが、セキュリティ面を考えると認証有りにして、通知元が信頼できるかどうかを JWT を利用してチェックするのがベターです。

バックエンド側の実装

受信した各メッセージに対して、バックエンドは以下を実行する必要があります。

  • RTDN オブジェクトを含む base-64 エンコードされたデータフィールドを解凍
  • RTDN イベントによって通知された権利変更に関連する必要なバックエンドプロセスをトリガーする

Pub/Sub からのメッセージを https で受信でき、そのメッセージの解析ができれば問題ありません。

Web アプリで構築してもいいですし、AWS のようなクラウドサービスで受けたい場合は API Gateway を経由させてバックエンド側の Lambda に処理させてもいいですね。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました