Android 使用相同的AccountType在AccountManager中跨多个具有不同签名证书的应用存储凭据

Android 使用相同的AccountType在AccountManager中跨多个具有不同签名证书的应用存储凭据,android,accountmanager,securityexception,Android,Accountmanager,Securityexception,我们正在开发一个库,用于处理具有不同签名证书的多个应用程序的身份验证。这个库公开了几种调用服务器的方法(创建用户、删除用户、更新数据等) 该库还负责与AccountManager交互以存储凭据,这些凭据是用户名、authtoken和刷新令牌。当发出请求时,它正在侦听“401 Unauthorized-token expired”,在这种情况下,将使该令牌无效并从AccountManager获取一个新令牌(AccountManager已使用存储的刷新令牌从服务器获取一个新令牌) AccountMa

我们正在开发一个库,用于处理具有不同签名证书的多个应用程序的身份验证。这个库公开了几种调用服务器的方法(创建用户、删除用户、更新数据等)

该库还负责与AccountManager交互以存储凭据,这些凭据是用户名、authtoken和刷新令牌。当发出请求时,它正在侦听“401 Unauthorized-token expired”,在这种情况下,将使该令牌无效并从AccountManager获取一个新令牌(AccountManager已使用存储的刷新令牌从服务器获取一个新令牌)

AccountManager具有以下功能。当多个帐户共享同一帐户类型时,将使用第一个安装的应用程序的AccountAuthenticator(保存AccountAuthenticator所有逻辑的类)类

为了给它起一些名字,我们让AppA和AuthA(AccountAuthenticator类)用certificateA签名,AppB用AuthB用certificateB签名。两者都使用accountType“sharedname” 首先安装AppA,以便AuthA与帐户类型“sharedname”关联。然后安装AppB,因为已经有一个AccountAuthenticator与accountType“sharedname”关联,从AppB调用AccountManager时将使用AuthA

自API 22以来,AccountManager中的某些方法在从使用不同于所用AccountAuthenticator的证书签名的应用程序调用时引发SecurityException

问题来了(最后!): 我们在库中获得了一个createUser方法,该方法在服务器中创建用户,如果成功,则在AccountManager中插入新帐户。从AppB调用createUser时,将完成对“AccountManager.get(mContext).addAccountExplicity(…)”的调用,并生成SecurityException,因为使用的身份验证器是AuthA

AddAccount不是一个选项(据我所知),因为不同应用程序的登录活动正在调用
createUser

?如何在不使用活动的情况下从AppB向AccountManager添加帐户

我们在使用AccountManager.get(mContext.removeAccount(…)删除帐户时遇到了相同的问题

我希望它是清楚的,让我知道如果你需要一个更好的解释,这是可能的


谢谢

你最终找到了答案吗?还是你最终使用了其他解决方案?