如何将loginBundle从loginActivity(授权用户时)传递回AccountManager回调

时间:2013-06-27 07:16:14

标签: android oauth accountmanager

我在Android中实现AbstractAccountAuthenticator时出现问题。 首先请告诉我,如果我做对了它应该如何工作.. 当我在我的应用程序的某处调用特定Account和AuthTokenType的getAuthToken方法时,Android会尝试在系统钥匙串中找到该令牌。如果它在那里,它只是调用回调a将令牌放入提供的Bundle中。 如果没有这样的令牌(并且只在那种情况下),它会实例化我自己的AbstractAccountAuthenticator实现并从那里调用getAuthToken方法?

这就是我得到的......

以下是我在Authenticator中的getAuthToken方法的实现

@Override
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
                           String authTokenType, Bundle loginOptions) throws NetworkErrorException {
    Log.v(TAG, "getAuthToken()");


    if (!authTokenType.equals(AuthenticatorConfig.AUTH_TOKEN_TYPE)) {
        final Bundle result = new Bundle();
        result.putString(AccountManager.KEY_ERROR_MESSAGE, "invalid authTokenType");
        return result;
    }
    final Intent intent = new Intent(mContext, LoginActivity.class);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
    final Bundle bundle = new Bundle();
    bundle.putParcelable(AccountManager.KEY_INTENT, intent);
    return bundle;
}

在LoginActivity中我有一个WebView,我在其中加载OAuth登录表单,让用户填写他们的凭据并授权该应用程序。 获得令牌后,我随后调用此代码

KosAccount.getInstance(getApplicationContext()).addAccount(getUserDataResponse);
            Intent returnIntent = new Intent();
            final Bundle result = new Bundle();
            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
            result.putString(AccountManager.KEY_ACCOUNT_TYPE,    AuthenticatorConfig.ACCOUNT_TYPE);
            result.putString(AccountManager.KEY_AUTHTOKEN, authToken);

           //Here I need to put the result into the intent as an extra?

            setResult(RESULT_OK, returnIntent);
            finish();

正如您所见,我正在为帐户添加新帐户(只有在没有此类帐户时才需要重构和完成,否则我只需要更新当前帐户)

最后有我的主要问题..我不知道如何将结果包传递回AccountManager ....我应该把它作为额外的结果放在resultIntent中?整个事情似乎记录不清,我花了很多时间来到这里:)

目前,当我尝试从AuccountManagerCallback中提供的AccountManagerFuture中获取令牌时,我得到了NullpointerException,但令牌不在那里..

你能帮我解决一下如何在那里提供令牌,或者告诉我如何更好地实现这一点吗?

0 个答案:

没有答案