如何将一个帐户用于多个应用程序(AccountAuthenticator、sharedUserId、Google Play App Signing)?

How to use one account with multiple apps (AccountAuthenticator, sharedUserId, Google Play App Signing)?

我正在尝试创建一个 AccountAuthenticator 以与我们的多个应用程序一起使用(因此 一个 系统设置中的帐户被多个应用程序使用)。就像所有 Google-apps 在系统上使用相同的帐户一样。

问题是:我如何设置只需要安装一个应用程序(我们不知道它会是哪个),当安装第二个应用程序时,它可以重新使用现有的帐号?


我使用这个 tutorial 创建了我的 AccountAuthenticator 并嵌入到一个库项目中,该项目包含在我们所有的应用程序中。这在只安装一个应用程序时工作正常。

一旦安装了第二个应用程序并且用户尝试登录,系统就会显示意图选择器对话框,他可以在其中选择我们的两个应用程序(因为它们都使用具有相同意图的相同身份验证器库-筛选)。这应该也是问题(但我还没有验证它)。


通过一些研究,您会偶然发现 sharedUserId and this tutorial。但是这个 "solution" 有问题,你需要某种始终优先安装的应用程序,其中包含身份验证器。另外,使用新的 Google Play App Signing sharedUserId 似乎是不可能的,因为每个应用程序都将 使用不同的签名 .

可能有一种方法可以授予其他应用程序访问身份验证器的权限,但仍然存在需要先安装身份验证器应用程序的问题(按照建议 here)。


我该如何解决这个问题?如何在不先安装应用程序的情况下与多个应用程序共享 AccountAuthenticator? Google是怎么做到的?他们在 Play 服务中有他们的身份验证器吗?

Google Play 应用签名允许您 re-use 跨多个应用使用相同的签名,正是为了解决这类问题。

当您看到此屏幕时,只需选择 "Reuse signing key":