10

Androidアプリケーションのアプリ内課金を実装しているときに、問題が発生しました。

最初にシナリオを説明しましょう
。製品のリストを含むコンテンツサーバー(データサーバー)があります。
ユーザーがリストから1つを選択すると、それを購入できるようになります。
テストアカウントを使用してクレジットカードの詳細を入力すると、購入ロジックは完全に実行されます。
返品では、Androidデバイスで署名されたデータを取得しています。

私の質問は
1です。Androidデバイスで署名されたデータを確認してから、情報またはデータをコンテンツサーバーに送信する必要があります。コンテンツサーバーは製品を送信します(サーバー側にフローがないため、これは適切ではない可能性があります)リクエストが有効かどうか、またはより正確に確認するには、署名データがGoogleマーケットによって生成されているかどうかを確認します)?
2.サーバー側でデータを検証する必要がある場合、どうすればよいですか?それをGoogleマーケットに送信する必要がありますか(はいの場合、どのWebサービスまたはAPIを使用しますか)?

これを修正するのを手伝ってください。
前もって感謝します。

4

2 に答える 2

3

2番目の質問では、データをハッシュ(MD5、SHAなど)し、データと一緒にサーバーにハッシュを送信します。サーバーで、データのハッシュを作成し、ハッシュを比較して検証します。

于 2011-11-09T11:42:14.370 に答える
2

質問に答えるには、最初にある種のIDを使用してアプリ内製品を作成する必要があります。次に、このIDをサーバー上にあるデータベースに関連付けます。次に、Webサービスを使用して、データベースにクエリを実行し、アプリ内IDが製品データベースのIDと一致するかどうかを確認します。さらに、セキュリティナンスと署名を使用して検証できます。ほとんどの場合、Googleに製品を処理させるため、DBを基にアプリ内製品をモデル化する必要があります。製品が多すぎる場合は、モバイルWebサイトを作成する標準的な方法で処理する必要があります。

編集:リクエスト、つまり購入を行うときは、最初にREQUEST_PURCHASEを実行してから、マーケットから返されるPendingIntentを起動します。次に、Marketから送信されるブロードキャストインテントを処理します。リクエストで4つのキーを指定してから、購入リクエストを作成します。

  Bundle request = makeRequestBundle("REQUEST_PURCHASE");
  request.putString(ITEM_ID, mProductId);

  // Note that the developer payload is optional.
  if (mDeveloperPayload != null) {
      request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
      Bundle response = mService.sendBillingRequest(request);
      // Do something with this response.
  }

次に、PendingIntentを使用してcheckoutUIを起動する必要があります(1.6と2.0の違いに注意してください。ここで、1.6ではアクティビティとは別に起動する必要があります)。Googleの例でPurchaseObserver.javaを見てください。

「Androidマーケットアプリケーションは、リクエストに関するエラー情報を提供するRESPONSE_CODEブロードキャストインテントを送信します。リクエストでエラーが発生しない場合、RESPONSE_CODEブロードキャストインテントはRESULT_OKを返します。これは、リクエストが正常に送信されたことを示します。 RESULT_OK応答は、リクエストされた購入が成功したことを示すものではなく、リクエストがAndroidマーケットに正常に送信されたことを示します。)」

于 2011-11-09T17:09:10.017 に答える