关闭

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

标签: 第三方登录友盟第三方登录第三方登录的原理授权登录
468人阅读 评论(0) 收藏 举报
分类:

第三方登录的原理和流程


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


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


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

当用户点击QQ登陆,引导用户跳转到第三方客户端,当用户成功登录以后会自动跳转回来,控制器会收到友盟的回调,拿到用的一些数据,uidopenidaccessTokennamenickname/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个月有效期,过期后提示用户重新登录授权。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31596次
    • 积分:1226
    • 等级:
    • 排名:千里之外
    • 原创:88篇
    • 转载:50篇
    • 译文:0篇
    • 评论:3条
    最新评论