2

(Android アプリケーションから) 2 つのスコープのアクセス トークンを要求する必要がある状況にありhttps://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/userinfo.userinfo

への 1 回の呼び出しで両方のアクセス許可を取得したいのですが、パラメーターgetAuthTokenに渡す文字列がわかりません。authTokenType私はいくつかの合理的な組み合わせを試しましたが、肯定的な結果はありませんでした:(

誰かがこの問題を解決しましたか? 出来ますか?

4

2 に答える 2

10

私は同じ問題を抱えていました。シャーはほぼ正しいですが、彼のスコープ文字列は間違っています。そのはず

"oauth2:<scope_url> <scope_url>"

いいえ

"oauth2:<scope_url> oauth2:<scope_url>"
于 2012-09-04T17:22:29.050 に答える
6

複数の OAuth 2.0 スコープが必要な場合は、スペース区切りのリストを使用します

oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.userinfo

サンプル コードを求められたので、Google Docs Upload Sampleアプリケーションを見てください。このアプリケーションでは、このサンプルの Android 画面で行われる認証フローを見てください(Google Docs に関するものであることは無視してください。それでも最初に承認します)。アプリケーション全体を取得して、Google API が存在するエミュレーターで実行するか、携帯電話で実行できます。認証ワークフローは、buttonAuthorize のクリック、Authorize() で始まります。このメソッドに特に関心があります。

private void gotAccount(Account account)
{

    Bundle options = new Bundle();

    accountManager.getAuthToken(
            account,                     // Account retrieved using getAccountsByType()
            "oauth2:https://www.googleapis.com/auth/userinfo.email oauth2:https://www.googleapis.com/auth/userinfo.userinfo",            // Auth scope
            //"writely",            // Auth scope, doesn't work :(
            options,                        // Authenticator-specific options
            this,                           // Your activity
            new OnTokenAcquired(),          // Callback called when a token is successfully acquired
            null);    // Callback called if an error occurs
}

ユーザーは次のアクセス要求画面を取得します。

ここに画像の説明を入力

これは「ローカル」の OAuth2 メカニズムを使用していることに注意してください。Web ブラウザーを開くのではなく、Android フォンを最初にアクティブ化したときに提供された認証を使用しています。

また、ユーザーにはわかり やすい名前ではなく、スコープの完全な URL が表示されることに注意してください。

于 2012-07-14T16:45:49.263 に答える