- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我通过扩展 AbstractAccountAuthenticator
创建了自己的 Android 帐户 validator 并实现 addAccount()
和 getAuthToken()
.其中的一些方法被AccountManager
调用了,但其他人不是。
AccountManager accountManager = AccountManager.get(activity);
accountManager.addAccount(MyAccountAuthenticator.ACCOUNT_TYPE,
MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null, null,
activity, callback, null);
问题发生在我调用 AccountManager#getAuthToken()
时在我的 Activity
中。 AccountManager 不会调用我在 AccountAuthenticator
中定义的 getAuthToken()
方法。它调用一些其他默认方法,该方法仅在启动 AuthenticatorActivity
之前检查是否存在 authToken
。
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;
}
编辑:在应用为用户取回授权 token 后,我在 MyAuthenticatorActivity
中调用 addAccountExplicitly
。
来自类 MyAuthenticatorActivity extends AccountAuthenticatorActivity
的 fragment :
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);
}
最佳答案
您的评论极大地解决了问题——如果您为帐户设置了身份验证 token ,那么您的 getAuthToken
方法将不会被调用,直到 token 失效。您通常通过调用 invalidateAuthToken 来完成此操作在收到 401 或 403 或您从网络服务得到的结果时。
来自 getAuthToken
方法的 Javadoc:
If a previously generated auth token is cached for this account and type, then it is returned. Otherwise, if a saved password is available, it is sent to the server to generate a new auth token. Otherwise, the user is prompted to enter a password.
由于您的 token 在缓存中,因此它会直接返回,不会咨询您的身份 validator 。
关于java - 为什么不调用 AccountAuthenticator#getAuthToken()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985094/
我正在使用 getAuthToken() 获取 token ,然后登录 Google App Engine 应用程序。 它曾经有效,直到今天,我不知道为什么 getAuthToken() 返回 nul
我有几个关于 AccountManager 类的 getAuthToken() 方法的问题。 “authTokenType”可以取什么值?到目前为止,我只看到它取值“啊”。 getAuthToken(
我正在尝试获取 Google 帐户的授权 token ,因为我正在使用以下代码: AccountManager acoountManager = AccountManager.get( getCon
我正在使用 AbstractAccountAuthenticator 的自定义实现,并且我已经按照文档实现了 getAuthToken。我一直在关注本教程:http://blog.udinic.com
我正在 Android 中制作一个简单的 REST 客户端:我创建了一个负责 REST 调用的服务,但它需要用户名和密码才能运行。用户名和密码存储在常规帐户注册表中,所以我想做的是在服务中检索用户名和
一旦用户验证我的应用程序以查看和管理邮件,我的代码就可以工作。 或者看起来像这样: 然而,对于第一次(对于第一个请求),谷歌的对话框出现(上方)并要求用户进行身份验证,然后即使用户选择“确定”(即使“
我的应用程序使用客户管理器共享身份验证 token ,它在 4.0 早期运行良好。但是当我在我的 Nexus S (4.0.3) 中试用该应用程序时,每次我调用 getAuthToken 方法时都会发
在使用 Android 的 AccountManager 获取 Google 帐户的授权 token 时,我遇到了一个奇怪的行为。 应用启动时,第一次调用 getAuthToken 会返回一个包,其中
我通过扩展 AbstractAccountAuthenticator 创建了自己的 Android 帐户 validator 并实现 addAccount()和 getAuthToken() .其中的
当我调用 AccountManager.get(this).getAuthTokenByFeatures(Constants.ACCOUNT_TYPE, Constants.AUTHTOKEN_TYP
我在 Android 中有一个应用程序,我正在尝试使用 AccountManager 获取 AuthToken 并使用 Facebook 或 Twitter 进行操作。所以我得到了这个: Accoun
我的代码: Account[] accts = mgr.getAccountsByType("com.google"); Account acct = accts[0]; System.out.pri
我的印象是在使用 chrome.identity.getAuthToken 和 gapi.auth.authorize({immediate: true...}); token 将在后台刷新。 但它显
我已经扩展了 AbstractAccountAuthenticator 并覆盖了 getAuthToken。一切都适用于我的 getAuthToken,除非缓存的 authtoken 有效,在这种情况
在 JellyBean 设备上。 我正在关注 this请求 oauth2 token ,例如 AccountManager am = AccountManager.get(getActivity())
使用 Eclipse 创建了一个测试应用程序,以从我设备上的一个 Google 电子邮件帐户获取 authToken。 执行此操作会提示我允许访问对话框,我在其中按允许访问: accountManag
我正在使用 Chrome Identity API,在我的 Chrome 扩展程序上为用户提供 Google 身份验证。 我跟着谷歌的官方教程:link Chrome Identity API 我为
ChromeOS 版本 63.0.3239.140(官方版本)(64 位) 你好, 我在使用 https://developer.chrome.com/apps/identity#method-get
我为我想在具有不同签名的其他应用程序中使用的 Web 服务构建了一个 AccountAuthenticator。我想立即显示全屏访问请求对话框(这个:http://i.imgur.com/gcndGZ
我在一个 Multi-Tenancy 团队应用程序中工作,并想使用 SSO 向机器人添加一个选项卡。在我的开发环境中,这一切正常,我可以毫无问题地登录。当我将其部署到 QA 环境时,出现以下错误 AU
我是一名优秀的程序员,十分优秀!