0

奇妙な問題があります。私はグーグル認証を使用しています、そしてこれはアンドロイド>3.xで動作します

しかし、Samsung Handled(androidバージョン2.3.3)でテストしたところ、userinfo.emailスコープが機能しませんでした。

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

しかし、いくつかの試行の後、私はそれを機能させる方法を見つけました。スコープを交換する必要があります:

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

これは、Android2.3.5バージョンにアップグレードするまで機能しました。その後、ユーザーのメールを取得する権利を持つトークンを取得できませんでした。メールだけでスワップしてみましたが、うまくいきませんでした。

私のコード:

private static final String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email";

    am.getAuthToken(account, SCOPE, null, this, new AccountManagerCallback<Bundle>() {
        public void run(AccountManagerFuture<Bundle> future) {
            try {
                Bundle result = future.getResult();                 
                String token = result.getString(AccountManager.KEY_AUTHTOKEN);
                Log.d(TAG, "Google tokenas: " + token);


                authWithToken("google", token); //here I get working token, but this token don't have rights to grab user email
            } catch (OperationCanceledException e) {
                unsuccess();
            } catch (AuthenticatorException e) {
                unsuccess();
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }, new Handler(new Handler.Callback() {

        public boolean handleMessage(Message msg) {
            Log.d(TAG, "on error: " + msg.what);
            return false;
        }

    }));

この方法は、Android4.0.4および4.1.xでも引き続き機能します。

4

1 に答える 1

1

問題が見つかりました。問題はキャッシュされたアクセストークンです。Androidはアクセストークンの検証をチェックしません。アクセストークンが無効な場合は、キャッシュをクリアして認証を再試行します。

        am.invalidateAuthToken("com.google", token);
        auth(lastAccount);
于 2013-01-03T17:38:42.623 に答える