4

JellyBeanデバイス。

これに従って、oauth2トークンをリクエストします。例:

AccountManager am = AccountManager.get(getActivity());
am.invalidateAuthToken(MY_AUTH_TOKEN_TYPE, null);
am.getAuthToken(aGoogleAccount, MY_AUTH_TOKEN_TYPE, null, this, 
    new OnTokenAcquired(), new Handler(new OnError()));

次に、後のコードサンプルに従ってチェックを行います。

private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
@Override
    public void run(AccountManagerFuture<Bundle> result) {
        Bundle bundle = result.getResult();
        ...
        Intent launch = (Intent) bundle.get(AccountManager.KEY_INTENT);
        if (launch != null) {
            startActivityForResult(launch, 0);
            return;
        }
    }
}

KEY_INTENTを取得することはありません。私は次のことを理解しています。

オーセンティケーターがインテントを返す理由はたくさんあります。ユーザーがこのアカウントにログインするのはこれが初めての場合があります。ユーザーのアカウントの有効期限が切れており、再度ログインする必要があるか、保存されている資格情報が正しくない可能性があります。アカウントに2要素認証が必要な場合や、網膜スキャンを実行するためにカメラをアクティブ化する必要がある場合があります。理由は関係ありません。有効なトークンが必要な場合は、それを取得するためにインテントを起動する必要があります。

ただし、常に、トークンが有効な時点でgetAuthTokenコードがメソッドにヒットする前に、許可画面またはログイン画面が表示されます。run私はもう試した:

  1. 2ステップ認証をオンにします。アカウントのログインは前に要求されるrunため、常にトークンをに入れてrunください。
  2. サーバーのパスワードを変更します。繰り返しになりますが、アカウントのログインは前に要求されるrunため、常にトークンをに入れてrunください。

網膜スキャンを試す能力がないので、少し途方に暮れています。

編集1私が抱えている問題は、私が取得する状況があるかもしれないということですKEY_INTENT。そのため、フィールドに出ているときではなく、今すぐこのコードパスをテストしたいと思います。

前もって感謝します。

ピーター。

4

3 に答える 3

4

プロジェクトで同様のことをする機会がありました。これはあなたのコードとまったく同じではありません、そして私はまだコールバックドキュメントがそれがどのように働くべきかを確実にするためにあまりにも多くの「多分」を持っていると言います、しかしあなたがのために渡すこのメソッドを使うなら、あなたは-パスワードを変更するか、2FAを有効にした場合のログイン画面。これはClientLogin用ですが、OAuth 2でも同様に機能するはずです(ただしテストされていません)。何かのようなもの:falsenotifyAuthFailure

// using Calendar ClientLogin for simplicity
Bundle authResult = am.getAuthToken(account, "cl", false, null, null).getResult();
if (authResult.containsKey(AccountManager.KEY_INTENT)) {
  Intent authIntent = authResult.getParcelable(AccountManager.KEY_INTENT);
  // start activity or show notification
}
于 2012-10-27T15:51:59.123 に答える
1

次のように を呼び出す必要があると思いますgetResult()

Intent launch = (Intent)result.getResult().get(AccountManager.KEY_INTENT);
于 2012-10-24T15:15:43.040 に答える
0

アクティビティを使用してアクセス認証プロンプトを呼び出す getAuthToken のバージョンを使用しています。提供されたアクティビティが対応するインテントを起動するために使用されるため、そのバージョンの getAuthToken はインテントを返しません。インテントを手動で起動する場合は、API レベル 14 で廃止されたバージョンの getAuthToken を使用してください。詳細については、http: //developer.android.com/reference/android/accounts/AccountManager.html#getAuthTokenを参照してください。 %28android.accounts.Account,%20java.lang.String,%20boolean,%20android.accounts.AccountManagerCallback%3Candroid.os.Bundle%3E,%20android.os.Handler%29

于 2014-10-02T16:19:19.743 に答える