Android 同步适配器和后端API;AccountManager/AccountAuthenticator应如何处理多种登录类型? TL;博士
Android应用程序在我的后端服务器上提供登录,可以选择自定义帐户(用户创建用户名和密码)或社交登录(使用谷歌即时登录) 在myAndroid 同步适配器和后端API;AccountManager/AccountAuthenticator应如何处理多种登录类型? TL;博士,android,accountmanager,Android,Accountmanager,Android应用程序在我的后端服务器上提供登录,可以选择自定义帐户(用户创建用户名和密码)或社交登录(使用谷歌即时登录) 在mySyncAdapter使用的AccountManager、Account和AccountAuthenticator中,处理多种身份验证类型的正确标准方法是什么 较长版本 我想要达到的目标 我有一个用于Android应用程序的REST后端服务器(Node.js/Loopback) 此后端将允许我的应用程序的用户CRUD数据库对象 当然,在服务器上需要一种形式的帐户创建和
SyncAdapter
使用的AccountManager
、Account
和AccountAuthenticator
中,处理多种身份验证类型的正确标准方法是什么
较长版本
我想要达到的目标
我有一个用于Android应用程序的REST后端服务器(Node.js/Loopback)
此后端将允许我的应用程序的用户CRUD数据库对象
当然,在服务器上需要一种形式的帐户创建和登录。我希望支持“自定义”帐户创建(用户指定用户名和密码)和谷歌社交登录(用户使用选定的谷歌帐户登录)
到目前为止我所拥有的
我已经建立了我的后端服务器
此后端服务器成功地支持自定义帐户创建和登录(通过此服务器发回其创建的身份验证令牌)以及使用Google auth 2.0代码的身份验证
我熟悉使用GoogleAPI控制台创建Auth2.0凭据
我已经熟悉了新的谷歌登录API。我已成功使用登录示例应用程序(该应用程序演示了新的Auth.GoogleSignInApi
,GoogleSignInOptions
等)来检索与我的Google帐户关联的身份验证代码。然后,我可以成功地使用该身份验证代码在后端进行身份验证
我已经实现了整个工作“框架”SyncAdapter
、相关服务、存根验证器、虚拟帐户
等
问题
我觉得我了解各个较低级别的细节,我已经让它们发挥作用,但我正在努力解决如何将这些细节结合起来,并涉及账户
s和账户管理器
最佳实践是什么,块级体系结构我应该(a)使用SyncAdapter
中的Auth.GoogleSignInApi
,以及(b)支持备用自定义帐户
我认为应该怎么做
如果我的应用程序只使用谷歌登录我的后端,那么我认为情况应该是这样的:
- 我创建了一个
,其中使用了AccountAuthenticator
(新的登录API)。具体来说,Auth.GoogleSignInApi
将查看.getAuthToken()
是否已经有了Google OAuth 2.0代码。如果没有,它将使用AccountManager
从谷歌获得一个Auth代码。一旦我有了身份验证代码,我就可以使用它在我的服务器上进行身份验证(已经过验证和测试)Auth.GoogleSignInApi.getsigninent(…)
- 我已经有一个自定义的
对象。这将出现在设置->帐户和同步(例如“MyApp”)下,点击它可提供启用或禁用同步的设置。这将保持现状。即使我使用Google登录,我仍然需要有这个自定义的帐户
对象帐户
- 在初始设置期间,用户必须选择自定义帐户或使用Google登录
- 如果他们选择自定义帐户,那么我可能会将他们的凭据(以安全的方式)保存在
中。同样重要的是,我必须以某种方式(可能在AccountManager
对象中,或者在Account
中)保持这是一个自定义帐户SharedReferences
- 如果他们选择Google登录,则调用
来完成Google帐户选择和身份验证过程。当我拥有身份验证代码时,我会将其保存在Auth.GoogleSignInApi.getsigninent(…)
中,并以某种方式保存这样一个事实,即这是AccountManager
帐户登录,而不是自定义帐户Google
- 我仍然只有一个自定义的“MyApp”
帐户
- 当my
运行时,“MyApp”SyncAdapter
被传入,myAccount
尝试检索现有的身份验证代码AccountAuthenticator
- 然后,假设现有令牌检索成功,
必须确定这是自定义登录还是谷歌登录。如果是自定义登录,则我的AccountAuthenticator
调用后端的SyncAdapter
端点。如果是谷歌登录,那么我的user/login
使用身份验证代码调用我后端的SyncAdapter
。换句话说,/auth/Google/callback?code=xxxxxxxxxxxxxx
知道它正在从AccountAuthenticator
获取几种类型的身份验证代码之一。如果AccountManager
确定它没有有效的身份验证令牌,那么它必须点击我自己的后端API获取一个,或者点击Google获取OAuth令牌,具体取决于帐户类型。然后,给定一个令牌,AccountAuthenticator
必须知道它用于哪种帐户SyncAdapter
- 我的
对象仅在用户选择登录类型(手动创建帐户或谷歌登录)后创建并存储在帐户
中帐户管理器
类型或名称字符串将有一个标记来指示(子)帐户类型帐户
将根据该标记确定帐户类型,并根据它从my API或Google获取新的令牌AccountAuthenticator
- 或者。。。也许我甚至有多个
;一个用于自定义帐户,一个用于Google s帐户验证器