WebViews を使用して Google から OAuth トークンを取得することは避けたいと考えています。(連絡先、プロフィール情報などを共有するようにユーザーに依頼します)。そのためにGoogle Play Services APIを使用しました。
私のアプリはクラウド ベース (ロジックはクラウドで発生する) であるため、これらのトークンをクラウドに保存する必要があります。また、ユーザーが複数のデバイスからサインインできるようにする必要があります (新しいデバイスからログインするたびに Google のアクセス許可を要求する必要はありません)。
このGoogle ブログに記載されている手法を実装しようとしました。
ブログに書いてある方法を実践してみました。思い通りにはいきませんでした。+Tim Bray の Google Code プロジェクト (favcolor-accountchooser) も確認したところ、次のコードがありました。
try {
// if this works, token is guaranteed to be usable
token = GoogleAuthUtil.getToken(FavColorMain.this, mEmail, SCOPE);
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult(userAuthEx.getIntent(), AUTHUTIL_REQUEST_CODE);
token = null;
}
ブログで言及されている概念と矛盾します。取得された「トークン文字列」はサーバーに送り返されず、例外ブロックでユーザーからさらに権限 (スコープ) が求められます。このスニペットは何を意味していますか?
また、これまでの「Web アプリ」の役割は何ですか? scope パラメーターで言及されている以外に、それが何の役にも立たないと思います。
もう一つの大きな問題
たとえば、私のアプリは複数の Google ID から連絡先のアクセス許可を取得し、重複をマージして統合された連絡先リストを提供します。これで、すべての魔法がサーバーで発生し、サーバーがトークンを必要とするサーバーになります。
私の Android アプリは Google Play サービス API を使用し、複数の Google アカウントのユーザー権限を取得します (連絡先を読み取るため)。そこにあるトークンを Web アプリに渡すにはどうすればよいですか (https 接続のみを使用しますか?)。ユーザーが (同じプロジェクトの下で) Android アプリのアクセス許可を付与すると、同じプロジェクトの下の Web アプリはこれらのトークンを取得できませんか?
同じアプリを別の Android フォンにインストールすると、各アカウントの連絡先にアクセスする許可をユーザーに再度求める必要があります (以前に許可を与えたとしても)。実際の概念がないためです。 'ここでログイン。すべてのトークンをモバイルからサーバーに送信する必要があります。
代替手段: Google Play Services SDK を使用する代わりに、Web ビューを使用してクラウド アプリのトークンを直接取得する必要がありますが、これは直感的ではありません。(+Friday アプリでは、最大のユーザー ドロップ アウトは Web ビュー画面で発生します)。