3

私はAndroid 開発者ガイドのすべてのドキュメントを何度か読み 、素晴らしい Google プレゼンテーションEvading Pirates and Stopping Vampiresに慣れました。

最後に、上記のプレゼンテーションに従って、独自の Web サーバーを含むアプリ内課金シナリオを実装しようとしました。サーバーとのやり取りの主なポイントは次のとおりです。

  1. Google に REQUEST_PURCHASE リクエストを送信する前に、Web サーバーに新しい購入を登録するリクエストを送信します。リクエストが成功すると、サーバーから nonce を取得します。
  2. トランザクションが終了すると、通知 ID の配列を受け取り、GET_PURCHASE_INFORMATION リクエストに渡します。この時点で、ステップ 1 でサーバーから受け取った nonce を使用する必要があります。<-ここで立ち往生!
  3. GET_PURCHASE_INFORMATION が成功すると、自分のサーバーに渡す signedJson と署名を取得します。購入を確認し、サーバー上でトランザクションをコミットします。

今のところ理解できないのは、次の 2 点です。

  1. 私の場合、着信 IN_APP_NOTIFY インテントによって以前に生成されたナンスを識別する方法は? 私の知る限り、現在の購入の完了または別の購入の払い戻しのいずれかに対応できます。私が見たところ、REQUEST_PURCHASE リクエストとは関係のない通知 ID しかありません。
  2. サーバーがこのイベントについて 100% 認識されるように、払い戻しを安全に処理するにはどうすればよいですか? 最も自然な方法は、サーバーから Google サーバーに定期的にリクエストして、注文の実際のステータスを取得することです。残念ながら、私の国の開発者は Google Checkout API を使用できません。もう 1 つの方法は、既知の通知 ID と新しいナンスを渡す GET_PURCHASE_INFORMATION リクエストを使用して、デバイスを介して注文状態を定期的にチェックすることです。ある期間中にチェックが失敗した場合、最初の注文状態の確認が成功するまで、購入は自動的に期限切れになります。このシナリオは可能ですか?注文の CONFIRM_NOTIFICATIONS リクエストの後に、既知の通知 ID を使用して GET_PURCHASE_INFORMATION リクエストを行うことはできますか?

編集:払い戻し (ポイント 2) については、関連するトピックAndroid アプリ内課金のセキュリティの問題がありますか? . アプリ内購入の払い戻しを開発者に依頼するための組み込みのエンド ユーザー機能が Google Play にないというのは正しいですか? その場合、アプリケーション内にボタンを実装して、検証済みのユーザー資格情報などの必要なすべての情報を含む払い戻しリクエストをサーバーに送信し、Google マーチャント アカウントとサーバーのデータベースの両方で払い戻しを手動で処理します。

4

1 に答える 1

1

プログラムで払い戻しをリクエストする方法はありません。ユーザーは (電子メールなどで) あなたに連絡する必要があり、開発者コンソールで購入を払い戻すことができます。払い戻しが処理されると、アプリはPURCHASE_STATE_CHANGED新しい注文ステータス (払い戻し済み) を含む署名付き通知 (ブロードキャスト) を受け取ります。新規購入の場合と同様に、検証のためにこれをサーバーに転送し、それに応じて注文ステータスを変更できます。ノンスがどのリクエストに結び付けられているかは気にする必要はありません。それが実際に生成されたものであることを確認してください (Dungeons サンプルを参照)。サーバー上でこれを行っている場合は、通常、DB を検索して、以前に生成した nonce があるかどうかを確認します。

于 2012-10-10T02:33:36.477 に答える