我正在尝试将AccountManager.getAuthToken()
与我自己的身份验证器一起使用(但在具有不同签名的其他应用程序中)。我知道我需要权限GET_ACCOUNTS
和USE_CREDENTIALS
。这些已添加并且可以正常工作。
但是当我第一次通过getAuthToken()
变量调用getAuthToken()
时遇到问题,该变量使用activity
参数显示一个对话框,要求用户授予访问权限身份验证者(GrantCredentialsPermissionActivity
)。
这在API 26+上正常工作。显示对话框,在授予访问权限后,我得到一个令牌。
但是这在API 21-26上不起作用。在这里,没有显示对话框,并且无法获取result
的{{1}}的{{1}}并显示logcat:
java.lang.SecurityException:以KEY_INTENT开始的活动必须共享Authenticator的签名
在API 24上,该消息有更多细节:
java.lang.SecurityException:KEY_INTENT解析为与提供的身份验证器(my.package.name)不共享签名的程序包(android)中的活动(android.accounts.GrantCredentialsPermissionActivity)。
但是,将getAuthToken()
变量与布尔值OperationCanceledException
而不是getAuthToken()
一起使用时,会显示一条通知,该通知会触发“访问请求”对话框。并且在授予之后,可以获得令牌。
所以看起来有点奇怪。提到的对话框来自系统,而不是我的身份验证器而不是调用应用程序。在用户通过此对话框授予对身份验证器的访问权之前,甚至不会调用该身份验证器。
我认为这是类似Android AccountManager's getAuthToken SecurityException的问题,但没有答案。
这是我正在谈论的对话框(取自http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator):