需求
对于一个应用来说,帐号管理真是一件麻烦事,所以通过OAuth之类的使用第三方帐号登录是常见的做法。关于这个实现,在Web端有很多现成的解决方案。我之前发过的《RESTful客户端库:RestClient 》也实现了一些(当时提供了饭否、foursquare和google,现在又增加了twitter)。
那么在移动端要怎么做?
Android系统内置了Google帐号(不要跟我谈被阉过的国行版,我们要放眼国际不是么,而且以此类推同样应该可以实现用别的帐号登录),如果能直接用这个登录岂不是方便?
当然,Google提供了这样的功能。
基本流程
整个登录流程大体是这样:
* 应用在登录界面上显示当前手机中已经登录的所有Google帐号(可能不止一个)
* 用户在界面上选择一个帐号
* 程序向系统请求这个帐号验证(附带参数说明需要用这个帐号干什么,比如登录的话只需要取得用户的基本信息)
* Android在界面上弹出提示(显示什么应用请求什么帐号的什么权限)
* 用户选择同意
* Android向Google服务器提交请求
* Google服务器通过验证后返回一个token
* Android将token返回给应用程序
* 应用程序用这个Token登录应用服务端
* 应用服务端用这个token向Google服务器验证(调用取得用