出处:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/
这篇文章个人觉得讲的非常好,比官方文档还要清晰,将各个概念讲的非常清楚,对于新手非常有用,所以在这里记录一下。
摘要:
为什么要使用Authenticator,而不是自己直接写?
答:标准化方法、简化开发流程,有管理多种token、与其他app共享token等功能。支持sync adapter等google框架。
概念解释
几个主要的部分:token;服务器;AccountManager,管理各个账户,其他部分会向AccountManager请求token,而AccountManager调用特定模块来回应请求;AccountAuthenticator,用于处理特定账户类型(比如你自己创建的账户类型)的模块,AccountManager受到请求后对AccountAuthenticator发起对话,而AccountAuthenticator执行相应的操作,可以通过launch activity从用户处获取token,或者在相应位置获取token(所以AccountManager名字很形象了,是管理员,但是不干事的);AccountAuthenticatorActivity,是用来和用户交互、和服务器交互的activity。
当app需要authentication的时候,它只和一个方法,即AccountManager.getAuthToken()会话;而AccountManager通过如下逻辑获取token:
(说实话,我没看懂图。)
首次登陆流程:
- app向AccountManager请求token
- AccountManager向相关的AccountAuthenticator请求token
- 由于是首次登陆,没有缓存的token,因此AccountAuthenticator launch一个Activity,要求用户登陆
- 用户登陆,AccountAuthenticator从服务器获取一个token
- AccountManager将token缓存,以便后期使用
- app获取token,万事大吉
创建Authenticator
继承自AbstractAccountAuthenticator。需要实现的主要方法:
addAccount
添加账号。需要能够launch相应的activity。
getAuthToken
获取token。
创建activity
详略。
创建服务
从而使其他进程能够获取账号信息。详略。