第三方登录的原理和流程

用户采用第三方登录的时候,用户会发送哪些信息到我的后台,后台会进行哪些比对操作?首次使用第三方登录和再次使用第三方登录时验证有哪些不同,后台如何保存用户的登录信息尼?

对于用户资源的授权来讲, OAuth并不是唯一的,但是目前OAuth2.0应该已经是各种平台的事实标准了,对于OAuth2.0协议,有一系列RFC阐述了OAuth2.0。不过OAuth2.0虽然已经是一个标准,但是各个平台对它的实现并不完全相同,但是最基本的流程是一样,所以你要先了解这个协议。

我直接拿QQ做例子,简单说一下流程:

当用户点击QQ登陆,引导用户跳转到第三方客户端,当用户成功登录以后会自动跳转回来,控制器会收到友盟的回调,拿到用的一些数据,uid/openid/accessToken/name/nickname/iconurl等。

第三方平台和本地用户系统结合应该分为三种情况:

  • 本地未登录,第一次登录第三方:此时相当于注册,直接把第三方信息拉取来并注册成本地用户就可以了,并建立本地用户与第三方用户(openid)的绑定关系
  • 本地未登录,再次登录第三方:此时用户已注册,获取到openid后直接找出对应的本地用户即可
  • 本地登录,并绑定第三方:这个只要将获取到的openid绑定到本地用户就可以了

iOS 应用QQ互联授权登录和分享的审核填写?

这里的URL schema应该怎么设置?

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,设置Xcode的url scheme格式为“QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FC5B14”。并在QQ互联后台的URL schema中填入此字符串保持一致。

额外设置 url schemes 的格式为"tencent"+腾讯QQ互联应用appId,例如“tencent100424468”

集成友盟的  微信/QQ授权登录

1. profile 中添加,后pod update

# 友盟第三方登录

pod 'UMengUShare/Social/QQ'     # 集成QQ

pod 'UMengUShare/Social/WeChat' # 集成微信

2.添加依赖库

微信

SystemConfiguration.framework

CoreTelephony.framework

libsqlite3.tbd

libc++.tbd

libz.tbd

QQ

SystemConfiguration.framework

libc++.tbd

3.  配置各平台URL Scheme

URL Scheme是通过系统找到并跳转对应app的一类设置,通过向项目中的info.plist文件中加入URL types可使用第三方平台所注册的appkey信息向系统注册你的app,当跳转到第三方应用授权或分享后,可直接跳转回你的app。不过QQ的比较特殊,QQ的是要把appid转换成16进制然后再补齐够八位再添加进去。QQ注册时:tencent19919910和QQ4A6aHN01  (16进制),两者都要加上。不然跳不到qq。

4.iOS9/10设置白名单

如果你的应用使用了如SSO授权登录或跳转到第三方分享功能,在iOS9/10下就需要增加一个可跳转的白名单,即LSApplicationQueriesSchemes,否则将在SDK判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败。在项目中的info.plist中加入应用白名单,右键info.plist选择source code打开(具体设置在Build Setting -> Packaging -> Info.plist File可获取plist路径)

5.然后就可以在AppDelegate.m  的启动方法中设置   配置UMengUShare/Social  appkey之类

使用的地方

- (IBAction)goAuthLogin:(id)sender

{

UIButton *portBtn = sender;

if (portBtn.tag==1000) {

[selfgetUserInfoForPlatform:UMSocialPlatformType_WechatSession];

}else {

[selfgetUserInfoForPlatform:UMSocialPlatformType_QQ];

}

}

- (void)getUserInfoForPlatform:(UMSocialPlatformType)platformType

{

//    判断是否安装QQ 微信

//    [QQApiInterface isQQInstalled];

//    [WXApi isWXAppInstalled];

[[UMSocialManagerdefaultManager]getUserInfoWithPlatform:platformTypecurrentViewController:selfcompletion:^(id result,NSError *error) {

UMSocialUserInfoResponse *resp = result;

// 第三方登录数据(为空表示平台未提供)

// 授权数据

NSLog(@" uid: %@", resp.uid);

NSLog(@" openid: %@", resp.openid);

NSLog(@" accessToken: %@", resp.accessToken);

NSLog(@" refreshToken: %@", resp.refreshToken);

NSLog(@" expiration: %@", resp.expiration);

// 用户数据

NSLog(@" name: %@", resp.name);

NSLog(@" iconurl: %@", resp.iconurl);

NSLog(@" gender: %@", resp.gender);

// 第三方平台SDK原始数据

NSLog(@" originalResponse: %@", resp.originalResponse);

}];

}

遇到问题:

问题1:文档说这个方法也可以用,结果没调用

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

{

BOOL result = [[UMSocialManagerdefaultManager]handleOpenURL:url];

if (!result) {

// 其他如支付等SDK的回调

}

return result;

}

使用:- (BOOL)application:(UIApplication *)application

openURL:(NSURL *)url

sourceApplication:(NSString *)sourceApplication

annotation:(id)annotation{

BOOL result = [[UMSocialManagerdefaultManager]handleOpenURL:url];

if (!result) {

// 其他如支付等SDK的回调

}

return result;

就可以了!微信得到了授权成功的回调的用户信息!

拿到的参数概述 通过进行sso,获得授权能获得诸如头像,昵称之类的数据,最重要的Token可UID这两个东西,token类似于签名之类的东西,不是唯一的,普通账号7天就过期了,测试账号好像是一年过期,所以我们不能拿这个进行保存用户,UID是唯一的,唯一对应一个三方的用户,所以,服务端可以拿这个判断一个用户

问题2:腾讯QQ授权登录时,登录授权失败110406。

解决办法:

在腾讯开放平台中,应用接入——应用管理——iOS应用——选择对应的应用——选择QQ登录——切换到应用调试者,添加调试用的QQ号

注意:添加的调试用的QQ号必须是开通开放平台的QQ账号的好友,否则无法添加调试的QQ号。

OK 了;

第三方登录:(需求)

1.是否有取消授权

2.是否定期刷新授权  考虑手机丢失安全

3.获取到的access token具有3个月有效期,过期后提示用户重新登录授权。

(0013)iOS 开发之集成友盟第三方登录相关推荐

  1. Android集成友盟第三方登录

    button点击事件 if (v.getId()==R.id.login_QQ) {if(Build.VERSION.SDK_INT>=23){//QQ需要申请写入权限String[] mPer ...

  2. Android 集成友盟第三方登录分享

    首先导入model 导入这个model   . 这个 debug.keystore导入 密码:android build文件粘贴 没有啥粘啥就完了 android {compileSdkVersion ...

  3. 集成友盟第三方实现QQ微信登录遇到的坑

    最近项目集成友盟第三方实现QQ微信登录,在集成实现过程中遇到了一些问题,也对这些问题提出一些自己的解决办法: 集成的过程不就提了,直接上问题: 一.微信登录提示"授权失败,请查看log&qu ...

  4. 友盟第三方登录精简版QQ遇到的坑

    这几天在项目中集成了友盟第三方登录,完成以后微信和微博基本都没什么问题,只有QQ遇到的问题比较烦人.具体的集成步骤我不在此赘述,官方文档上有,而且已经有不少介绍的很详细的文章.个人遇到问题可能不同,此 ...

  5. 友盟第三方登录 无法切换账号 退出 取消授权

    友盟第三方登录后,哪怕你卸载了微博/qq这些客户端,你点击上次登录的方式还是能正常登录的,不需要重新授权..导致一个问题,比如我先用这个QQ登录 后,想换另外一个QQ登录会导致无法登录,哪怕退出QQ, ...

  6. ios 分享功能 集成友盟分享

    1.集成友盟分享,需要先注册一个友盟账号,注册地址 友盟开发者平台官网  友盟集成文档 友盟sdk下载地址友盟sdk下载地址 2,成功下载sdk集成后,微信分享需要配置一下 新浪微博 之类到同样配置就 ...

  7. Android友盟第三方登录

    最近项目中使用到了友盟(社会化Android组件),开始集成的时候没来及细读友盟提供的开发文档.现在来总结一下集成过程中遇到的问题. ##### 1.申请第三方账号     友盟   新浪微博开放平台 ...

  8. ios 友盟第三方登录遇到的各种坑。

    //未使用pod的点友盟官方文档 http://dev.umeng.com/social/ios/quick-integration 首先pod导入 pod 'UMengSocialCOM', '~& ...

  9. 友盟第三方登录(QQ登录)

    第一步打开友盟官网注册一个账号,登录如下图进行操作点击个人中心 进入下一个界面点击管理创建一个应用生成AppKey:如下图 返回首页点击SDK与文档点击进行第三方登录集成点击右边的SDK下载选择你需要 ...

最新文章

  1. java和python的比较-java学习笔记(与python对比来学)
  2. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
  3. 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★
  4. HTML+CSS+JavaScript复习笔记持更(一)——标签篇
  5. 在现有K8S集群上安装部署JenkinsX
  6. kubernetes英语怎么读_陷阱英语单词怎么读?
  7. 还没搭建过Vue3.x项目?几行代码搞定~
  8. java的jdbc看不到源码_不了解jdbc,何谈Mybatis的源码解析?
  9. 前端开发 AMD 和 CMD 的规范区别
  10. MyEclipse和Eclipse中修改编码
  11. 联想预装office2019_【联想电脑专属福利】超详细图文教程,手把手教你免费激活正版Office...
  12. 人工智能基础入门——神经网络讲解
  13. Linux中用tar命令对文件夹进行打包压缩
  14. 计算机用户名显示TEMP,Windows 下Temp帐号处理
  15. 十大免费响应式Joomla主题
  16. 设置ClickHouse默认用户default的密码
  17. wince 触摸屏 学习
  18. c语言筛法求一个范围内的素数,运用埃拉托色尼筛法求解一定范围内的素数.docx...
  19. 我的世界电脑正版服务器地址大全,《我的世界》服务器地址大全 各个服务器一览分享...
  20. redis+spring 整合

热门文章

  1. ArtemisMQ的“未消费之谜”
  2. 【学时总结】 ◆学时·III◆ 二分图
  3. caffe修改需要的东西 6:40
  4. windows环境下redis.conf配置文件
  5. linux 服务搭建DNS
  6. JSTL 格式化 BigDecimal对象
  7. 基于特征的推荐算法【转】
  8. ubuntu下安装nagios
  9. python中的正则表达式
  10. Zookeeper系列(十)zookeeper的服务端启动详述