Android アプリまたはプログレッシブ ウェブアプリに Google Play 請求サービスを実装したばかりで、ユーザーがデジタル アイテムを購入できるようになりました。バックエンド サーバーに Google Play 請求サービスの主要コンポーネントを実装します。
Google Play Developer API
Google Play Developer API には、Subscriptions and In-app Purchases API と Publishing API の 2 つのコンポーネントがあります。Subscriptions and In-app Purchases API は、プロダクトと購入の管理に役立つ次の REST リソースで構成されています。
inappproducts: アプリ内アイテムと定期購入のカタログ管理purchases.products: アプリ内アイテムの購入ステータスpurchases.subscriptions: サブスクリプションの購入ステータスと管理
Google Play Developer API は REST API として直接使用することも、クライアント ライブラリを使用して開発をすぐに開始することもできます。サポートされているすべての言語のクライアント ライブラリについては、こちらをご覧ください。Google Play Developer API のスタートガイドに沿って、API プロジェクトをリンクし、API アクセス クライアントを設定します。
すべてのアプリ内アイテムを一覧表示する
フロントエンド(Android アプリまたはプログレッシブ ウェブアプリ)で利用可能な商品の詳細をクエリするときは、商品 ID のリストを指定する必要があります。この処理は、Google Play Console で作成したすべてのアプリ内アイテムと定期購入を一覧表示する Google Play Developer API の inappproducts.list メソッドを使用してバックエンド サーバーに実装できます。各プロダクトの status を確認し、active のみをアプリ クライアントに送信してください。
利用権を付与する前に購入を確認する
Android アプリまたはプログレッシブ ウェブアプリで Google Play 請求サービスを実装するうえで重要なのは、ユーザーに利用権を付与する前に購入を確認することです。利用資格をユーザーに付与すると、購入したアイテムに関連付けられている特典やコンテンツにアクセスできるようになります。機密データの処理が必要になるため、バックエンド サーバーで処理する必要があります。
Google Play Developer API には、purchases.products:get メソッドと purchases.subscriptions:get メソッドが用意されています。アプリ内で取得した購入トークンやバックエンド サーバーに保存した購入トークンとともに使用して、購入が正当であることを確認します。追加購入とユーザー利用資格の確認のために、バックエンド サーバーで購入トークンを追跡する必要があります。必要な手順について詳しくは、購入の確認に関する Google Play 請求サービスのドキュメントをご覧ください。
アプリ内購入
クライアントから購入トークンを受け取ったら、バックエンドで Google Play Developer API を呼び出し、まだ使用されていないことを確認する必要があります。有効な購入の purchaseState フィールドは 1 です。
購入が有効な場合、クライアントはサーバーからレスポンスを受け取った後、購入を承認して利用権を付与する必要があります。
定期購入
アプリ内購入の検証と同様に、バックエンド サーバーはクライアントから購入トークンを受け取った後、Google Play Developer API を呼び出して、定期購入がまだ有効であることを検証する必要があります。
定期購入の expiryTimeMillis フィールドが現在時刻よりも大きい場合、クライアントは利用資格を付与する必要があります。
また、このタイミングで linkedPurchaseToken フィールドを確認し、アップグレード、ダウングレード、その他の定期購入フローに対応するように定期購入データベースを適切に更新することをおすすめします。このページの残りの部分では、詳細について説明します。
バックエンドの状態を最新の状態に保つ
アプリがさまざまなプラットフォームで利用できる場合(異なるお支払い方法が使用される場合もあります)、バックエンド サーバーでユーザーとその購入を追跡することで、ユーザーはアプリを使用するデバイスやプラットフォームを問わず、同じ利用資格にアクセスできるようになります。
これは、ユーザーとその現在の利用資格の記録を保持するデータベースを用意するだけで済みます。その後、ユーザーが購入したり利用資格を使用したりするたびに、それに応じて更新します。ユーザーが別のプラットフォームからアプリにアクセスしたときに、バックエンドから適切な利用資格を取得して、ユーザーがアクセスできるようにします。
定期購入のステータスの変更を処理する
定期購入のステータスはライフサイクルを通じてさまざまに変化することがありますので、アプリはこうした変化に対応する必要があります。定期購入ライフサイクルを処理する方法について詳しくは、バックエンドを常に最新の状態に保つ方法をご覧ください。
Subscription linkedPurchaseToken
定期購入に関するドキュメントで説明されているように、Google Play の新しい購入フロー(初回購入、アップグレード、ダウングレード)ごとに新しい購入トークンが生成されます。linkedPurchaseToken フィールドを使用すると、複数の購入トークンが同じ定期購入に属している場合を認識できます。
定期購入を確認するたびに、バックエンドで linkedPurchaseToken フィールドが設定されているかどうかを確認する必要があります。その場合、そのフィールドの値は、置き換えられた以前のトークンを表します。ユーザーがそのトークンを使用してコンテンツにアクセスできないように、以前のトークンを直ちに無効にする必要があります。
たとえば、バックエンドが最初の購入の購入トークン A を受け取ったときに、linkedPurchaseToken フィールドが空の場合、そのトークンの利用資格が有効になります。その後、アップグレード後にバックエンドが新しい購入トークン B を受け取ると、linkedPurchaseToken フィールドを確認して A に設定されていることを確認し、購入トークン A の利用資格を無効にします。

linkedPurchaseToken の実装に関する詳細については、Implementing linkedPurchaseToken correctly to prevent duplicate subscriptions をご覧ください。
リアルタイム デベロッパー通知
Google Play Developer API の purchases.subscriptions:get メソッドは、ユーザーの定期購入を管理するための唯一の情報源です。安全なバックエンド サーバーで定期購入者の状態を管理している場合は、その状態を Google サーバーと同期する必要があります。ただし、Google Play Developer API のポーリングを頻繁に行うと、API の割り当て制限に達し、重要なユーザー アクション(定期購入の解約やアップグレードなど)の通知の受信が遅れる可能性があります。
リアルタイム デベロッパー通知(RTDN)は、定期購入者の利用資格のステータスが変更されたとき(定期購入の購入、定期購入の解約、定期購入の保留など)に、サーバーにインスタント通知を送信する Google Play 請求サービスの機能です。RTDN を使用すると、Google Play Developer API を定期的にポーリングする代わりに、これらの通知に応答するだけで定期購入者データベースを同期できます。
更新や解約など、定期購入のステータスに影響するイベントに対しては、バックエンド サーバーが SubscriptionNotification を受信します。次に、通知に含まれている購入トークンを使用して Google Play Developer API を呼び出し、完全なステータスを取得してバックエンド ステータスを更新します。
こちらの手順に沿って、アプリの RTDN を構成できます。次に、これらのメッセージを消費するようにバックエンド サーバーを設定する必要があります。
詳しくは、RTDN リファレンスをご覧ください。