私は次の記事に従っていました: Android アプリからのバックエンド コールの検証とライセンス検証ライブラリを使用した吸血鬼の停止 (24:57 から 25:34)で、Android アプリのアプリ内購入検証システムを実装します。
これがエンド ツー エンドでどのように機能するか、および最初に見つかったメール アドレスでGoogleAuthUtil.getToken()を呼び出して生成されたトークンについて想定できること (AccountManager が複数のアカウントを返す場合) について少し混乱しています。私の質問は次のとおりです。
ユーザーがアプリを購入するために使用する電子メール アドレスはすべて同じトークン (つまり、同じユーザー + アプリ ==> 同じトークン) を生成すると仮定する必要がありますか?
質問 1 の答えが「いいえ」の場合、特定のアカウント/メールでアプリ内購入を開始する方法はありますか?
Google は、アプリ内購入ダイアログ用に AccountManager から返された最初の電子メール アドレスを選択しているようです。アプリ内購入ダイアログが起動された後、ユーザーがこれを変更しないと仮定できますか? アプリ内購入が戻った後にこれが変更されたかどうかを確認するにはどうすればよいですか?
このユーザーを識別するために、データベースに何を保存する必要がありますか? メールアドレスやトークンは許可されていますか? トークンの有効期限はいつですか?
java-client ライブラリは、最初に読むと非常に有望で強力に見えます。しかし、多くのことが紛らわしいままです。エンド ツー エンドのシナリオを説明する記事はありますか? アプリからバックエンド サーバーへの呼び出しを開始し、アプリ内購入ダイアログを起動して、結果を取得し、サーバー上でコミットして終了しますか?
Android でこれを達成するために最も役立つ記事は何ですか?
私たちが解決しようとしている主な問題は、全体像を把握することです。
Java クライアント機能とトークンを使用することで、ユーザー ID/パスワードの要求を回避できるという考えが得られました。Google API コンソールの手順に従って、プロジェクト (同じプロジェクトの Web アプリと Android アプリの両方) を登録しました。バックエンド サーバーには、Google Play Service 用の php java-client があります。Android アプリで最初のメール アドレスを使用してトークンを生成し、アプリ内購入ダイアログを呼び出して、ダイアログの最後でユーザーの応答を処理するようにしました。部品は揃っています。ここで、すべてを接着する必要があります。バックエンドサーバーと統合するところです。たとえば、Redirect URi はサーバーで何を指しているのでしょうか? サーバーアプリ用に http 投稿メッセージを送信する php url があります。クライアント ID、シークレット、単純な API キーなどを入力します。php へのインクルードとして。しかし、リダイレクト URI には何を入力すればよいでしょうか (サンプル コードの使用説明がありません)。
また、アプリ内購入に使用される電子メールが、ユーザーがアプリを購入するために使用したアドレスとしてサーバー データベースにログオンするものと異なることを避けたいと考えています。住所が追跡するのに正しいものである場合、購入に使用されたものと同じであることを望みます. この間違いを犯して、ユーザーが支払った機能を使用できないようにすると、ユーザーがイライラする可能性があります。この間違いを犯したくないので、Google Play サービスの仕組みについて明確にする必要があります。ワークフローのサーバー部分を開始して、Android デバイスの最初の電子メール アドレスのアプリ Nonce / ペイロード / 資格情報を取得する場合、そのアドレスをワークフロー全体で使用する必要があります。ユーザーが途中でこれを変更した場合は、これを認識して正常に回復する必要があります。これまでのところ、記事は役に立ちましたが、不完全です。