为什么要使用账号系统
在应用中使用账号的时候,通常需要保存登陆信息,以避免每次启动应用都需要重新登陆。所以一个很重要的问题就是如何保存账号信息的问题了(通常就是保存userId, serviceToken)之类的信息。这些信息都安全度要求很高,所以需要保存为应用私有数据。最简单的方式应该就是私有的SharedPreferences来保存了。但是使用SharedPreferences保存数据是私有的,也就是这个账号不同提供给其他应用去使用。若是提供公有的SharedPreferences,那毫无安全性可言了。所以使用android提供的账号系统框架了。
使用账号系统有以下几个好处:
1) 很安全的保存账号信息,只有账号所有者和与所有者具有相同签名的应用才能获取账号信息,当然具有root权限的应用随时可以拿到所有的账号信息,所以不要随便root啊
2) 很方便的在有需要的应用中共享账号信息,而同时又不损失安全性
3) 可以在系统设置里面提供账号设置入口
4) 提供了很完善的框架,只要按照规范实现,就能很方便的实现强大的账号系统
几个核心的类:
AccountManager:
Android中所有跟账号相关的接口都是通过这个类提供,可以看到它的一些主要方法:
1) addAccount: 添加一个账号,在通常的视线中,该方法会调起登陆界面
2) addAccountExplicitly: 直接向账号系统中添加一个账号,不会调起登陆界面,通常是登陆验证成功后,通过该方法将账号信息保存到账号系统
3) removeAccount
4) getAuthToken: 获取账号的authToken, 很多情况下,只会使用authToken去访问服务器,用以替代用户名和密码
AccountManagerService:
AccountManager的中的接口基本都是通过这个AccountManagerService实现。
AbstractAccountAuthenticator: 这个类对于账号系统开发者来说是最重要的一个类,AccountManagerService实现AccountManager中的接口,但AccountManagerService会跨进程调用AbstractAccountAuthenticator来进行。例如通过实现AbstractAccountAuthticator来来调起想要调起的登陆页面(intent)。所以账号系统开发者索要做的最重要的事情之一就是实现自己的AccountAuthenticator