【发布时间】:2015-05-07 13:47:53
【问题描述】:
我(假设应用程序“C”)正在尝试通过 Android 的 AccountManager 的 getAuthToken 函数获取已安装应用程序(例如“S”)的身份验证令牌。
这个函数没有按预期工作,它没有返回任何结果(run 函数永远不会被调用)
AccountManagerFuture<Bundle> future1 = AccountManager.get(Main2.this).getAuthToken(account,account.type,null,false, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
Bundle result = null;
try {
result = future.getResult();
String check = "";
}
catch (OperationCanceledException e){ }
catch (IOException e1){}
catch (AuthenticatorException e2){}
}
} , new Handler(Looper.getMainLooper()));
当我看到设备 ADB 日志时,我看到以下内容
java.lang.SecurityException: Activity to be started with KEY_INTENT must share Authenticator's signatures
at com.android.server.accounts.AccountManagerService$Session.onResult(AccountManagerService.java:2580)
at com.android.server.accounts.AccountManagerService$6.onResult(AccountManagerService.java:1677)
at com.android.server.accounts.AccountManagerService$6.onResult(AccountManagerService.java:1652)
at android.accounts.IAccountAuthenticatorResponse$Stub.onTransact(IAccountAuthenticatorResponse.java:59)
上述应用程序“C”和“S”是不相关的,因此它们使用不同的证书进行签名。
我猜该功能应该在上述情况下工作(这是 AccountManager 的主要目的之一 - 跨应用程序共享帐户访问令牌)以及(向用户抛出一个关于他是否应该允许的安全对话框' C'访问'S'),它不工作的原因是什么?我在这里有什么遗漏吗?
谢谢
【问题讨论】:
-
你提到的场景有什么解决方案吗?因为我也被困在这里。如果您已修复,请提供您的解决方案。谢谢
-
您找到解决方案了吗?我想我遇到了类似的问题:对我来说,
GrantCredentialsPermissionActivity没有显示在 API getAuthToken()-variant 而不是带有活动的变体时。