我通过扩展AbstractAccountAuthenticator
并实现addAccount()
和getAuthToken()
创建了自己的 Android 帐户验证器。其中一些方法被AccountManager
调用,但其他方法不会。
这很好用:
AccountManager accountManager = AccountManager.get(activity);
accountManager.addAccount(MyAccountAuthenticator.ACCOUNT_TYPE,
MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null, null,
activity, callback, null);
当我在我的Activity
中调用AccountManager#getAuthToken()
时出现问题。 AccountManager没有调用我在AccountAuthenticator
中定义的getAuthToken()
方法,而是调用一些默认方法,该方法仅检查authToken
的存在性,然后才启动AuthenticatorActivity
。
这不起作用。 它没有调用我的getAuthToken()
方法:
AccountManager accountManager = AccountManager.get(activity);
accountManager.getAuthToken(
mAccount, MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null,
activity, callback, handler);
认证服务
我创建了我的服务并定义了onBind()
。否则,addAccount()
将无法正常工作。
public IBinder onBind(Intent intent) {
return intent.getAction().equals(ACTION_AUTHENTICATOR_INTENT) ? new MyAccountAuthenticator(this).getIBinder() : null;
}
编辑:在应用程序获得用户的身份验证令牌之后,我会在MyAuthenticatorActivity
中调用addAccountExplicitly
。
MyAuthenticatorActivity
类的片段,扩展自AccountAuthenticatorActivity
:
if (getIntent().getBooleanExtra(KEY_IS_ADDING_NEW_ACCOUNT, false)) {
// Creating the account on the device and setting the auth token we recieved
accountManager.addAccountExplicitly(account, null, null);
}
addAccountExplicitly
吗? - Thorn GAccountAuthenticatorActivity
子类中调用它。我已经将其添加到问题的编辑中。 - Austyn MahoneygetAuthToken
的结果是启动了您的登录活动,则表示正在调用您的验证器 -- Android 没有其他方法来确定要启动的活动,除非您返回一个 Intent。我注意到您正在使用空密码添加帐户。也许如果找到空密码,您的实现会短路?请在您的验证器中发布getAuthToken
的正文。 - Thorn GgetAuthToken()
甚至不会被调用。它绕过了调用并直接返回身份验证令牌,这不是我期望它做的。根据我的理解文档,它应该仍然调用我的方法。然后我可以决定是否要返回现有的令牌或获取一个新的令牌(在返回令牌之前,我会检查身份验证令牌是否已过期)。 - Austyn MahoneygetAuthToken
方法时,它非常有效,无需查看源代码。 - Austyn Mahoney