私はAndroid 開発者ガイドのすべてのドキュメントを何度か読み 、素晴らしい Google プレゼンテーションEvading Pirates and Stopping Vampiresに慣れました。
最後に、上記のプレゼンテーションに従って、独自の Web サーバーを含むアプリ内課金シナリオを実装しようとしました。サーバーとのやり取りの主なポイントは次のとおりです。
- Google に REQUEST_PURCHASE リクエストを送信する前に、Web サーバーに新しい購入を登録するリクエストを送信します。リクエストが成功すると、サーバーから nonce を取得します。
- トランザクションが終了すると、通知 ID の配列を受け取り、GET_PURCHASE_INFORMATION リクエストに渡します。この時点で、ステップ 1 でサーバーから受け取った nonce を使用する必要があります。<-ここで立ち往生!
- GET_PURCHASE_INFORMATION が成功すると、自分のサーバーに渡す signedJson と署名を取得します。購入を確認し、サーバー上でトランザクションをコミットします。
今のところ理解できないのは、次の 2 点です。
- 私の場合、着信 IN_APP_NOTIFY インテントによって以前に生成されたナンスを識別する方法は? 私の知る限り、現在の購入の完了または別の購入の払い戻しのいずれかに対応できます。私が見たところ、REQUEST_PURCHASE リクエストとは関係のない通知 ID しかありません。
- サーバーがこのイベントについて 100% 認識されるように、払い戻しを安全に処理するにはどうすればよいですか? 最も自然な方法は、サーバーから Google サーバーに定期的にリクエストして、注文の実際のステータスを取得することです。残念ながら、私の国の開発者は Google Checkout API を使用できません。もう 1 つの方法は、既知の通知 ID と新しいナンスを渡す GET_PURCHASE_INFORMATION リクエストを使用して、デバイスを介して注文状態を定期的にチェックすることです。ある期間中にチェックが失敗した場合、最初の注文状態の確認が成功するまで、購入は自動的に期限切れになります。このシナリオは可能ですか?注文の CONFIRM_NOTIFICATIONS リクエストの後に、既知の通知 ID を使用して GET_PURCHASE_INFORMATION リクエストを行うことはできますか?
編集:払い戻し (ポイント 2) については、関連するトピックAndroid アプリ内課金のセキュリティの問題がありますか? . アプリ内購入の払い戻しを開発者に依頼するための組み込みのエンド ユーザー機能が Google Play にないというのは正しいですか? その場合、アプリケーション内にボタンを実装して、検証済みのユーザー資格情報などの必要なすべての情報を含む払い戻しリクエストをサーバーに送信し、Google マーチャント アカウントとサーバーのデータベースの両方で払い戻しを手動で処理します。