Android API 21上的AccountManager getAuthToken安全性异常(23+;正在工作)

Android API 21上的AccountManager getAuthToken安全性异常(23+;正在工作),android,accountmanager,Android,Accountmanager,我正在尝试将AccountManager.getAuthToken()与我自己的验证器一起使用(但在具有不同签名的不同应用程序中)。我知道我需要权限GET\u ACCOUNTS和USE\u CREDENTIALS。这些都是添加和工作 但是我在第一次通过getAuthToken()-变量调用getAuthToken()时遇到了一个问题,该变量使用activity-参数显示一个对话框,要求用户授予对验证器的访问权(GrantCredentialsPermissionActivity) 这在API 2

我正在尝试将
AccountManager.getAuthToken()
与我自己的验证器一起使用(但在具有不同签名的不同应用程序中)。我知道我需要权限
GET\u ACCOUNTS
USE\u CREDENTIALS
。这些都是添加和工作

但是我在第一次通过
getAuthToken()
-变量调用
getAuthToken()
时遇到了一个问题,该变量使用
activity
-参数显示一个对话框,要求用户授予对验证器的访问权(
GrantCredentialsPermissionActivity

这在API 26+上运行良好。显示该对话框,在授予访问权限后,我获得一个令牌

但这在API 21-26上不起作用。此处不显示对话框,获取
getAuthToken()
结果失败,出现
OperationCanceledException
,logcat显示:

java.lang.SecurityException:以密钥\u意图启动的活动必须共享验证器的签名

在API 24上,消息有一点更详细:

java.lang.SecurityException:KEY_INTENT解析为包(android)中的活动(android.accounts.GrantCredentialsPermissionActivity),该活动不与提供的验证器(my.package.name)共享签名


但是当使用带有布尔值的
notifyAuthFailure
而不是
活动的
getAuthToken()
-变量时,会显示一个触发“访问请求”对话框的通知。授予后,即可获得代币


所以看起来有点奇怪。提到的对话框来自系统,而不是我的验证器,也不是调用应用程序。在用户通过此对话框授予对验证器的访问权限之前,甚至不会调用验证器

我认为这是一个类似的问题,但没有答案


这是我正在谈论的对话(摘自):


这似乎是KitKat之后的一项安全功能,而不是一个bug(但现在在Oreo中有所改进)。但是仍然没有解决方案für API<26更多的测试表明,即使是
notifyauthfilure
-通知也没有出现在API 24和25上。所以当前的状态是API 21-23显示了通知,但没有显示活动,API 24-25根本不起作用,API 26+正在按预期显示活动。当请求
com.google
-帐户时,我希望系统显示
GrantCredentialsPermissionActivity
,因此崩溃时出现相同的
安全异常
,但事实并非如此。用户将看到一个自定义的“访问请求”——来自google authenticator而非系统的对话框。谷歌如何绕过
GrantCredentialsPermissionActivity
并显示自己的屏幕?