第三方登录的定义

所谓的第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。而这里的第三方平台,一般是已经有大量用户的平台,如国内的新浪微博、QQ空间,外国的Facebook、twitter等等。第三方登录不是一个具体的接口,而是一种思想或者一套步骤。

要实现第三方登录,首先你需要选择一个第三方平台。新浪微博和QQ空间都是好的选择,这些平台拥有大量的用户,而且还开放了API,供我们调用接入。但是同样开放API,微信却不是一个好选择,这是因为微信的API只支持分享,不支持授权验证或者获取用户资料。所以要实现第三方登录,你选择的平台至少需要具备:

1、开放了API 2、具备获取用户资料或至少可以进行授权验证

其实ShareSDK已经支持了超过20种这样子的平台,完全足够你选择使用。、

第三方登录实现方法

选择好平台以后,现在思考下面的问题:

你的应用是否具备独立账户系统?

这个问题是第三方登录时接口选择的重要标准。

如果你选择“是”,则意味着你的应用只是需要第三方平台的用户,而不是他们的账户验证功能——也就是“要数据,不要功能”。

而如果你选择“否”,则表示你实际上是'“要功能,不要数据(用户)”'。

对于ShareSDK来说,前者你的入口方法是showUser(null),而后者是authorize()。那么下面我分情况解释两种接入方式的步骤。

要功能,不要数据

如果你的应用不具备用户系统,而且也不打算维护这个系统,那么你可以依照下面的步骤来做:

1、用户触发第三方登录事件 2、调用platform.getDb().getUserId()请求用户在此平台上的ID 
3、如果用户ID存在,则认为用户是合法用户,允许进入系统;否则调用authorize() 
4、authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户
5、如果onComplete()方法被回调,表示授权成功,引导用户进入系统
6、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据 要数据,不要功能

如果你的应用拥有用户系统,就是说你的应用自己就有注册和登录功能,使用第三方登录只是为了拥有更多用户,那么你可以依照下面的步骤来做:

1、用户触发第三方登录事件 
2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作) 
3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
4、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端 
6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码 
7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册 
9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
10、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据 实例代码

下面利用一段实例代码来讲述第三方登录的一些基本步骤,但由于ShareSDK并没有用户帐户系统,因此这不是一个可以直接拿来套用的例子,不过开发者只要阅读并理解代码,就可以轻松实现第三方登录了。
实例代码演示的是“要功能,不要数据”的情况,事实上这是“要数据,不要功能”类型的子集,只是“要数据,不要功能”类型剩下的步骤是你应用的客户端和服务端之间的登录和注册操作,和ShareSDK已经没什么关系了。
首先是项目的Github地址:

https://github.com/ShareSDKPlatform/ThirdPartyLoginDemo

接下来,如果你还不清楚ShareSDK的接口调用方法,请参考一下下面的条目:

1、 接口调用的原则  
2、 授权  
3、 获取用户资料

然后再来讲解一下实例中的部分主要代码:

private void authorize(Platform plat) {
        if (plat == null) {
                popupOthers();
                return;
        }
        
        if(plat.isValid()) {
                String userId = plat.getDb().getUserId();
                if (userId != null) {
                        UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this);
                        login(plat.getName(), userId, null);
                        return;
                }
        }
        plat.setPlatformActionListener(this);
        // true不使用SSO授权,false使用SSO授权
        plat.SSOSetting(true);
        plat.showUser(null);
}

上面的代码是当用户触发第三方登录按钮的时候的处理。plat.isValid()判断指定平台是否已经完成授权,如果已经完成授权,ShareSDK的用户数据库应该已经存在userId,因此代码尝试获取userId,如果得到的为null,当作为授权,否则用此ID来执行登录。如果此平台没有完成授权,则调用plat.showUser(null)方法来获取用户资料。
获取用户资料以后,并不能立刻用来注册,因为可能只是因为授权时间太久导致AccessToken过期,因此完成授权以后需要先将userId发送给你应用的服务端进行检查,如果服务端发现确实没有注册过,才引导客户端进入注册页面。
下面是一些截图:

 

320px-device-2013-06-13-190357.jpg (66.57 KB, 下载次数: 1)

下载附件  保存到相册

2014-8-19 15:00 上传

第三方登陆-------android整理知识相关推荐

  1. Android开发知识体系!Android面试吃透这一篇就没有拿不到的offer!挥泪整理面经

    1.项目介绍 Flutter是目前比较流行的跨平台开发技术,凭借其出色的性能获得很多前端技术爱好者的关注,比如阿里闲鱼,美团,腾讯等大公司都有投入相关案例生产使用. 基于Flutter+Dart+ch ...

  2. 微信授权APP第三方登陆(Android)

    前几天负责的程序说是要加入第三方登陆的功能,虽然现在有服务商集成了第三方登陆,但是平时所用的也就微信和QQ,就自己看文档写了,其中也遇到了一些问题,然后我把我做这个的流程贴出来,并附上对应的Demo, ...

  3. Android第三方登陆之新浪微博Weibo篇(原生登陆授权)

    前言 Android第三方登录可以说是非常的常见,今天主要先说一下新浪微博第三方登陆授权. SDK版本支持 SDK v3.0已经发布了支持iPhone和Android的版本. 须将你的应用的包名签名信 ...

  4. android gif第三方,Gboard个性化GIF定制功能终于登陆Android客户端

    原标题:Gboard个性化GIF定制功能终于登陆Android客户端 据外媒报道,谷歌的第三方键盘Gboard因在Android和iOS流行了一段时间.然而有趣的是,它最新.最酷的功能之一--个性化G ...

  5. android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享

    qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...

  6. android qq三方登录授权失败,教大家qq第三方登陆授权失败110401怎么办的解决方法...

    今天小编来给大家针对这个教大家qq第三方登陆授权失败110401怎么办的解决方法的问题来进行一个介绍,毕竟当下也是有诸多的小伙伴对于教大家qq第三方登陆授权失败110401怎么办的解决方法这个问题非常 ...

  7. 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

    实现QQ.微信.新浪微博和百度第三方登录(Android Studio) 前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第 ...

  8. MTK 驱动(4)---MTK Android Driver知识大全

    MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...

  9. Oauth2.0 QQ微信微博实现第三方登陆

    一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...

最新文章

  1. Redis 限流的 3 种方式
  2. 【python】lxml处理命名空间
  3. poj 2985(并查集+线段树求K大数)
  4. linux下git分支管理,git远程分支管理
  5. Java 面试题问与答:编译时与运行时
  6. 8月9日 华为发布了其自研的鸿蒙操作系统,华为正式发布自研操作系统鸿蒙,面向AI全场景...
  7. 西瓜书+实战+吴恩达机器学习(二)机器学习基础(偏差、方差、调试模型技巧)
  8. GIT命令行的一些基本操作
  9. Pop3_解决PKIX:unable to find valid certification path to requested target 的问题
  10. linux rsh(remote shell) 命令详解
  11. 超全的人脸识别数据集汇总
  12. Python爬虫搜索全网音乐并下载
  13. 看点视频解析去水印原理分析过程及源码,rowkey的秘密
  14. java根据word模板导出_Java通过word模板导出word
  15. Java面对对象程序设计——面对对象
  16. 基于Quartus-FPGA制作蜂鸣器的相关教程
  17. Notepad++的字体设置加Consolas和微软雅黑混合字体转载
  18. js 设置读秒验证码
  19. 五一出行!如何辨别偷拍设备
  20. 【Android】使用阿里云直播实现手机直播功能

热门文章

  1. 苹果7全网通经常显示无服务器,iPhone 7处理器异响查出元凶?英特尔大喊冤枉
  2. Android 应用市场链接上传地址
  3. ASP数组Ubound与Lbound
  4. 绝了!超全面的Java调优方案,我司已用7年,并得到验证!(万能通用)
  5. 【HTML/CSS】HTML/CSS个人学习总结
  6. unity 裙子摆动_随风摆动的草丛——Unity shader graph 2D初探
  7. 15、Kanzi插件——通过Kanzi Engine插件创建自定义消息类型+代码解析
  8. 滴滴新算法让你应对女友?道翰天琼认知智能机器人平台API接口大脑为您揭秘
  9. 假设检验:使用p值来接受或拒绝你的假设
  10. [转]WIN7服务一些优化方法