今天讲一下第三方登录

市面很多应用都有登录注册功能,有的公司自己建立服务器,自己完成功能。但是现在有一些公司为了节省开发时间,会选择第三方登录。回想自己刚学安卓那会,就想怎么才能实现登录注册,甚至傻傻的建立本地数据库,自己写加密算法加密用户名密码等等,殊不知安全问题得不到好的解决,效率也是低下。这也是开篇写第三方登录的原因。

主流第三方登录包括:微信、qq、网盘、短信等,该文章基于网盘登录,主流登录各大博客都有很详细的介绍,楼主也是读了好几篇相关博客才敢写这本文章。限于篇幅原因,暂时用不到核心的登录功能,就暂时讲一下微盘登录。但核心方式大同小异。网盘登录相对比较简单,也算拓展一下视野。虽然,网盘官网现在已经停用了,但是这个技术点还是比较有意义的,写在这里作为了解。

如果是实际开发,你需要到指定第三方平台,注册账号成为开发者,然后创建属于本公司的应用,平台会给你一个app Key和app Secret,这个东西非常重要。本篇直接使用官方Demo里面的这两个值,就不做申请过程了。

下载官方提供的lib和Demo。我给您打包好了,可以直接下载:http://download.csdn.net/my

那么先运行官网Demo,看看啥子效果:


是的,您没看错,就是曾经辉煌一时的新浪网盘,我们就借用新浪的登录功能,成为我们项目的一部分,人家是大公司,内部机制和保护错失肯定比自己实现起来靠谱的多吧。

接下来就开始代码编写了,手把手教您在自己的IDE中跑起来。

PS:如果您闲一步步的操作麻烦、繁琐,可以直接复制最终那个完整代码,跑起来也可,主要还是为了了解技术点嘛。

1、关联下载好的lib包。

2、新建一个LoginActivity,布局只用一个Button用于授权登录(作为点击事件跳转登录界面)。代码如下:

/****省略导包****/

public class LoginActivity extends Activity {private Button mbtnLogin;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);mbtnLogin = (Button) findViewById(R.id.bt_login);mbtnLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//事件用于授权登录}});}
}

2、通过search功能在官方Demo找到授权登录的代码:

// 使用微盘Token认证,需设置重定向网址
// Need to set REDIRECT_URL if you want to use VDisk token.
session.setRedirectUrl(REDIRECT_URL);
session.authorize(OAuthActivity.this, OAuthActivity.this);

这块代码就是授权登录,也是核心一部分。我们加到自己Demo中:

            @Overridepublic void onClick(View v) {//事件用于授权登录// 使用微盘Token认证,需设置重定向网址// Need to set REDIRECT_URL if you want to use VDisk token.session.setRedirectUrl(REDIRECT_URL);session.authorize(OAuthActivity.this, OAuthActivity.this);}});

两行代码就是授权了,只要执行完这条代码,就会通过新浪服务器的授权(对于授权是什么,后面学的深入了肯定会讲解相关的知识)。session.setRedirectUrl(REDIRECT_URL);参数也是您官网注册开发者账号的时候,自己建立的一个网址,这个问题不大,使用官方Demo中的即可。看注释写的也很清楚:Need to set REDIRECT_URL if you want to use VDisk token.

session.authorize(LoginActivity.this, LoginActivity.this);发起授权请求,让用户输入账号/密码。只要两行代码成功,就会回到onComplete(Bundle values)方法。第一个参数是一个上下文,第二个参数是授权通过后的监听器。直接使用自己的活动就可以了,例如我的主活动LoginActivity,因而我们的活动还要实现这个监听回调方法。

/**********   2、处理授权结果——>>得到accessToken    **********/@Overridepublic void onComplete(Bundle values) {//授权完成的回调,这里使我们关心的,即授权成功后我们要干嘛}@Overridepublic void onError(VDiskDialogError error) {//授权出错}@Overridepublic void onVDiskException(VDiskException exception) {//抽取按过程中有异常(不是错误)}@Overridepublic void onCancel() {

待会回来再讨论回调方法。

您会发现项目报错了,肯定的,因为你的好多对象没有初始化完毕。继续在Demo中拷贝初始化的代码。

以及上面所说的app Key、app Secret和REDIRECT_URL等

代码如下:

public class LoginActivity extends Activity implements VDiskDialogListener {private Button mbtnLogin;private VDiskAuthSession session;/*** 替换为开发者应用的appkey,例如"16*****960";* * Replace it to the appkey of developer's application, such as* "16*****960";*/public static final String CONSUMER_KEY = "2330724462";// TODO/*** 替换为开发者应用的app secret,例如"94098*****************861f9";* * Replace it to the app secret of developer's application, such as* "94098*****************861f9";*/public static final String CONSUMER_SECRET = "04f81fc56cc936bfc8f0fa1cef285158";// TODO/*** 替换为微博的access_token. 如果你想使用微博token直接访问微盘的API,这个字段不能为空。* * Replace it to the access_token of WEIBO. If you use weibo token to access* VDisk API, this field should not be null.*/public static String WEIBO_ACCESS_TOKEN = "WEIBO_ACCESS_TOKEN";/*** * 此处应该替换为与appkey对应的应用回调地址,对应的应用回调地址可在开发者登陆新浪微盘开发平台之后,进入"我的应用--编辑应用信息--回调地址"* 进行设置和查看,如果使用微盘token登陆的话, 应用回调页不可为空。* * The content of this field should replace with the application's redirect* url of corresponding appkey. Developers can login in Sina VDisk* Development Platform and enter "我的应用--编辑应用信息--回调地址" to set and view the* corresponding application's redirect url. If you use VDisk token, the* redirect url should not be empty. should not be empty.*/private static final String REDIRECT_URL = "http://vauth.appsina.com/callback1.php";// TODO@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);mbtnLogin = (Button) findViewById(R.id.bt_login);/*** 初始化 Init*/AppKeyPair appKeyPair = new AppKeyPair(CONSUMER_KEY, CONSUMER_SECRET);/*** @AccessType.APP_FOLDER - sandbox 模式* @AccessType.VDISK - basic 模式*/session = VDiskAuthSession.getInstance(this, appKeyPair,AccessType.VDISK);mbtnLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//事件用于授权登录// 使用微盘Token认证,需设置重定向网址// Need to set REDIRECT_URL if you want to use VDisk token.session.setRedirectUrl(REDIRECT_URL);//1、发起授权请求,让用户输入账号/密码session.authorize(LoginActivity.this, LoginActivity.this);}});}/**********   2、处理授权结果——>>得到accessToken    **********/@Overridepublic void onComplete(Bundle values) {//授权完成的回调,这里使我们关心的,即授权成功后我们要干嘛}@Overridepublic void onError(VDiskDialogError error) {//授权出错}@Overridepublic void onVDiskException(VDiskException exception) {//抽取按过程中有异常(不是错误)}@Overridepublic void onCancel() {//授权取消}
}

还是,不要觉得繁琐,直接拷贝就行。

最后在再看看监听回调:

总共四个方法,注释写的很清楚了。我们最关心的,也就是

public void onComplete(Bundle values) {}了,一旦走到这里,就是我们要干的事情了,例如启动服务、跳转页面等等。注意的是,我们要在这里面处理服务器返回的accessToken,处理最终结果。还是去官方Demo中看如何处理最后授权结果吧。

@Overridepublic void onComplete(Bundle values) {if (values != null) {AccessToken mToken = (AccessToken) values.getSerializable(VDiskAuthSession.OAUTH2_TOKEN);session.finishAuthorize(mToken);}startActivity(new Intent(this, VDiskTestActivity.class));finish();}

我们处理完了accessToken,就是做了自己的事情——跳转到MainActivity。

对了,记得LoginActivity要在配置文件作为主活动、添加配置MainActivity哦。可以运行起来看看高大上的结果了~

额,没错。程序崩溃了,哈哈。因为你没有配置相应的权限,这些权限是啥,鬼知道是什么,但是官方Demo中有啊,去拷贝吧!

    <uses-permission android:name="android.permission.INTERNET" ></uses-permission><uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这个时候运行起来,可以完美实现微盘登录了,而且,我们把它的登录功能,变成了自己的,的确高大上,略显牛逼了吧。

到此第三方登录讲解完毕,后续参与实际开发用到更多核心功能的时候,还会去更细致的写这方面的文章,看在苦劳的份上,留下您的脚印,关注我哈。

您看一看文章也就5-10分钟,笔者要花1个多小时才能完成,喜欢我的朋友在下面留言点赞,关注我一起讨论问题哈。


长按上方二维码,关注本公众号每天更新一篇安卓文章。

或者加入开发技术交流群:497646615

手把手教您使用第三方登录相关推荐

  1. tcl linux 刷 安卓系统,安卓用户看过来—手把手教你刷第三方系统

    来来来,小葵花课堂讲课啦.孩子咳嗽老不好,多半是废了,打一顿就好.手机卡顿老不好,先别着急,来刷个机吧. 众所周知,因为安卓系统自身的特性,安卓手机用久了难免出现卡顿.一般来说解决的方法有两个:一是换 ...

  2. 手把手教你封杀恶意登录服务器的ip

    转载来源:https://blog.csdn.net/weixin_42313749/article/details/117593636?spm=1001.2014.3001.5502 文章目录 如何 ...

  3. 手把手教你写带登录的NodeJS爬虫+数据展示

    其实在早之前,就做过立马理财的销售额统计,只不过是用前端js写的,需要在首页的console调试面板里粘贴一段代码执行,点击这里.主要是通过定时爬取https://www.lmlc.com/s/web ...

  4. Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略

    Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略 导读:有时候,微信满了,需要多个微信账号在电脑端同时登陆来洽谈业务,那么如何在电脑端,同时登陆多个微信账号呢?今天 ...

  5. 手把手教你使用CocoaPods管理你的iOS第三方开源类库

    手把手教你使用CocoaPods管理你的iOS第三方开源类库 本文转载自:http://kittenyang.com/cocoapods 鉴于我开这个博客的初衷是记录自己平时的技术积累,而我平时又属研 ...

  6. 简单个人博客系统java web_JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册...

    JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册 发布时间:2020-07-17 17:10阅读:( )字号: 大 中 小 后台系统的所有界面图以及之前的准备工作欢迎看我之前的博文& ...

  7. 手把手教你带货直播源码实现直播功能,不依赖第三方SDK

    手把手教你带货直播源码实现直播功能,不依赖第三方SDK 先上图: 推流的手机 拉流的网页和VL播放器 拉流的手机客户端 下面开始实现手机直播功能 1.首先你要准备一份编译好的ffmpeg+x264库, ...

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

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

  9. 手把手教你如何使用Spring Security(上):登录授权

    文章目录 一.什么是 Spring Security? 官方介绍 通俗来讲 二.初始搭建 创建 启动 三.项目原理 原理 思考 四.登录认证 登录过滤器 配置过滤器链 类补充 五.登录效果 效果演示 ...

最新文章

  1. Android动画效果translate、scale、alpha、rotate详解
  2. shell转换特殊的格式(%b)到时间戳  08/Dec/2016
  3. Ajax、jQuery基础入门视频教程
  4. 大家放松下,仿《大腕》经典对白
  5. Redis流量控制策略
  6. hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告
  7. 备战520|Python花式表白的几种姿势
  8. Keras 中的循环神经网络 (RNN)
  9. JavaScript高级程序设计33.pdf
  10. 腾讯云分布式高可靠消息队列CMQ架构最佳实践
  11. 手机电脑同连一个wf,手机网速比电脑网速快很多,电脑网速很慢
  12. 10张图带你彻底搞懂限流、熔断、服务降级
  13. Tornado 源码分析(一)
  14. Ynoi(5/35)
  15. c语言存储器模式,单片机C51存储器类型及存储模式
  16. 【小程序】IDEA实现qq邮件的发送
  17. PTA 7-154 置点不动产——认真学习,努力工作买买房子吧
  18. p5.js动态图形临摹以及拓展
  19. Vite+Vue3+TypeScript
  20. 通俗易懂:什么是.NET?.NET Framework?.NET Core?(比较全面)

热门文章

  1. Nyquist 尼奎斯特采样定理
  2. /目录 、/home目录 、~目录的区别
  3. 反汇编工具capstone的使用
  4. 谷歌新版本跨域错误深度剖析与解决:request client is not a secure context and the resource is in more-private address
  5. CF1622C Set or Decrease
  6. 263欲停止e话通服务
  7. 名画222 明代《画选36幅》
  8. CCF CSP 202009-1 称检测点查询 C语言版
  9. 一个ping大包不通问题的解决过程
  10. 【塔望咨询】×【紫燕食品】签署“紫燕·方便菜”品牌战略合作协议