lot*_*tte 7 android single-sign-on accountmanager
我们想要实现的目标:跨app单点登录
我们有2个应用程序(应用程序A和应用程序B),我们希望共享相同的用户帐户.也就是说,当用户登录到应用程序A时,他们将自动登录应用程序B,反之亦然.
我们所做的
我们创建了一个自定义身份验证器(扩展AbstractAccountAuthenticator等)以从我们的服务中检索身份验证令牌,以确保用户登录到我们的应用程序.
我们将验证者拉到了两个不同的应用程序(应用程序A和应用程序B),我们想要共享帐户.
我们安装了应用程序A并登录.然后我们安装了应用程序B,并看到我们已自动登录.是的!
但是,当我们卸载应用程序A(我们安装的第一个应用程序)时,我们看到以下消息:
03-20 16:43:27.057 862-862/? W/AccountManagerService: deleting account username@blah.com because type com.example.app.a's registered authenticator no longer exist.
并且看到我们已经退出应用程序B,帐户已从帐户中消失.
问题是:唯一注册的帐户验证者是否是第一个安装的验证者?如果卸载了应用A,是否无法回退到应用B中的帐户身份验证器?
(fyi:我们已经看到设置sharedUserId解决了这个问题,但我们的应用程序目前正在运行,因此更改其userId不是一个选项)
小智 1
您可能想探索一个解决方案Google 在本文中建议的解决方案,其中包括将身份验证器作为单独的 APK 进行分发:
\n\n\n\n\n如果只有一个应用程序会访问 [account] 服务,那么这并不是一件大事\xe2\x80\x94,只需将服务捆绑到应用程序中即可。但如果您希望您的帐户\n服务被多个应用程序使用,事情就会变得更加棘手。您不希望将该服务与所有应用程序捆绑在一起,并且该服务的多个副本会占用用户设备上的空间。
\n\n一种解决方案是将服务放置在一个小的、特殊用途的 APK 中。当应用希望使用您的自定义帐户类型时,它可以检查设备以查看您的自定义帐户服务是否可用。如果没有,它可以引导用户到 Google Play 下载服务。乍一看,这似乎很麻烦,但与为使用自定义帐户的每个应用程序重新输入凭据的替代方案相比,它非常简单。
\n
当您的用户卸载您的应用程序 A 和/或 B 时,验证器 APK 不会自动卸载。这意味着如果您的用户决定重新安装您的应用程序,他们可能已经通过了身份验证。这可能是理想的,也可能不是理想的,因为它会给用户带来负担,让他们在卸载应用程序后记住卸载身份验证器。
\n| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |