2

Google Checkout API を使用して、サーバーからの Android アプリ内購入を確認しようとしています。この他のクエリ ( Android マーケットのアプリ - HTTP 通知が来ない) によると、コールバックが得られないため、ポーリング API を使用しています。

すべての情報はブラウザでマーチャント アカウントにログインしているユーザーにすでに表示されているにもかかわらず、ポーリングが購入に関する通知を受け取る前に 5 ~ 6 分の遅延が発生することを除いて、正常に動作しています。APIドキュメントを確認すると、「Polling APIを使用すると、180日未満で少なくとも30分経過したすべての通知を取得できます」と記載されているため、さらに時間がかかる可能性があることが示唆されています.

この遅延は典型的なものですか (私は英国にいます)? ポーリング API は、Android のアプリ内購入を確認するための推奨される方法ですか?

4

1 に答える 1

3

私の意見では、サーバーで Google Checkout Polling API を介して GP LVL や IAB 情報を検証しようとするのは最善の方法ではありません。とにかくサーバーがある場合は、はるかに優れたオプションが利用可能です.

記事Securing Android LVL Applicationsで述べたように、最善の方法は、信頼できるサーバーでライセンス情報を検証することです。こんなふうになります:

  1. Google デモ コードは使用しないでください。堅牢ではなく (すべてのエラー状態をチェックするわけではありません)、応答を偽造するなどのスクリプトに置き換えることもできます (ただし、以下のようにサーバー側のチェックを実装する場合、それは関係ありません)。com.android.vending.licensing直接使用してください。Google デベロッパー コンソールのアプリ キーをアプリに含めないでください。アプリには必要ありません。
  2. アプリはサーバーに呼び出しのノンスを要求しますILicensingService.checkLicense()。サーバーは安全なランダムナンスをアプリに提供します。アプリはILicensingService.checkLicense()そのノンスで呼び出します。
  3. Android GP LVL サービスはILicenseResultListener.verifyLicense()、署名付きデータと署名を提供する を介してアプリをコールバックします。(ヒント: 署名されたデータにはノンスが含まれているため、ここではリプレイ攻撃も不可能です。)
  4. アプリは、署名されたデータを署名と共にサーバーに渡します。
  5. サーバーは、Google デベロッパー コンソールのアプリ キーを認識している唯一のインスタンスです。署名されたデータに対して署名を検証します。
  6. 検証結果は、サーバー データへのアクセスに関する認証の決定に役立ちます。
  7. ライセンスをあまり頻繁にチェックしないようにしてください。Google は、ライセンス応答で提供された有効タイム スタンプに従うことを望んでいます (さらに、15 分間の払い戻し期間が反映されていると主張しています)。明らかに、これはサーバー側に有効性を保存し、サーバーがアプリがステップ 2 のテストをスキップできる場合にのみ安全です。

1 つの違いを除いて、同じことが IAB にも当てはまります。残念ながら、IAB V3 は の nonce では機能しませんgetPurchases()。その理由はおそらく、IAB サービス自体 (Google アプリ側の参照コードだけでなく) がキャッシュを広範囲に使用しているためです。それでも、購入の場合は、返される署名付きデータに含まれるdeveloperPayloadtoを渡すことができます。したがって、有効期限の基準がないか、ある種の暗黙的(時間ベース) またはサーバー管理の明示的である限り、com.android.vending.billing.IInAppBillingService.getBuyIntent()getPurchases()アプリ内購入の有効期限の基準はありませんが、API はまだ十分に安全です。サーバーは期限切れのアイテムを消費するようにアプリに要求しますが、それが失敗してもサーバーはそれを認識しており、アイテムを何度も消費するようにアプリに要求できるため、問題はありません。

このトピックについて少し光を当てることができれば幸いです。

于 2013-04-16T06:41:03.490 に答える