アプリ内課金による「管理された」購入を使用して、アプリのさまざまな機能をアップグレード/ロック解除するためのシステムを実装しようとしていますが、詳細なドキュメントや例が不足しているため行き詰まっています。
私のアプリの目的は、自分のサーバーからデータを取得/解析して表示することであり、http : //developer.android.com/guide/market/billing/billing_best_practices.html のドキュメントには次のように記載されています。
リモート サーバーを使用してコンテンツを配信または管理している場合は、ユーザーがコンテンツにアクセスするたびに、ロック解除されたコンテンツの購入状態をアプリケーションで確認します。
私の質問は、実際のワークフローに関してこれを行うための最良の方法は何ですか?
私の知る限り、購入が成功すると、購入情報をサーバーとアプリのローカルに保存します。アプリが実行されると、注文 ID をサーバーに送信し、サーバーは注文が有効かどうかを確認します (最初に注文がサーバーのデータベースに存在することを確認し、次に注文を手動で取り消していないかどうかを確認します)。理由はどうあれ)。
それが確認された場合、サーバーは要求された機能が「ライセンスされている」という応答をアプリに送信し、アプリはロック解除された機能/コンテンツをユーザーに提供します。
これで私が見ることができる明らかな問題は次のとおりです。
- ルート化されたユーザーは、ローカル アプリの SQLITE データベース (または注文情報を保存するために使用するその他の方法) を簡単に変更して、有効な注文 ID を挿入することができます。
- ネットワーク アクセスがダウンした場合、またはサーバーがダウンした場合でも、ユーザーが購入したすべての機能を使用してアプリを (キャッシュ データを使用して) 実行できるようにしたいと考えています。
確認できる最初の問題を回避する潜在的な方法には、検証要求である種のデバイス識別子を送信し、サーバー側でそれを監視することが含まれます-多数のデバイスが短時間で注文にアクセスしている場合は注文を取り消します.
2 番目の問題については、適切な解決策がわかりません。最初は、検証が成功するたびに、この検証が行われた時刻が保存されると思っていました。その後、アプリはロック解除された機能を使用して、たとえば最後の検証が成功してから 48 時間実行し続けます。問題は、この時間の値を安全に保存するにはどうすればよいかということです。繰り返しになりますが、root 化されたユーザーが単に値を変更するだけで、アプリはまったく賢明ではなくなります。
アプリ内課金の購入を管理するためのサーバーベースのシステムを設計した人はいますか?提案を提供できますか?