IOS-QQ第三方登录
我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆
如图:
下面我们主要讲一下qq的第三方登陆如何实现
首先,到官网注册:
一,下载SDK
下载SDK 地址:
下载最新版本的iOS_SDK_V2.9
二,SDK的目录结构
下载的文件结构如下
---------------------------------------------------------------------------------------------------------------------
sample:示例代码
1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件。
三,在Xcode中创建项目
新建空白项目,起名TestQQLogin
四,将iOS SDK添加到项目中
1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拖放到应用开发的目录下。
2,在弹出的框中选择如下
五,添加依赖库
点击Project navigator 点击TARGETS ---> General ---> Linked Frameworks and Libraries
点击加号添加
添加SDK依赖的系统库文件。分别是
”Security.framework”,
“libiconv.dylib”,
“SystemConfiguration.framework”,
“CoreGraphics.Framework”、
“libsqlite3.dylib”、
“CoreTelephony.framework”、
“libstdc++.dylib”、
“libz.dylib”。
六, 修改必要的工程配置属性
1,在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”
效果如下图:
2,在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid(例如你的appid是123456 则填入tencent123456) identifier 填写:tencentopenapi。appid怎么来请看第七步。
七,在腾讯应用宝创建应用
第六步配置中需要的appid等信息 需要首先在应用宝中创建应用才能得到。
首先登陆网站:http://open.qq.com
创建应用,在应用详情中可以看到appid
申请完成后一定记得添加测试qq,否则没有审核通过的应用是无法直接登陆的
八,开始写代码
1,打开刚才新建的工程,重写appdelegate的两个方法
重写之前导入头文件
#import <TencentOpenAPI/TencentOAuth.h>
openURL:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuth HandleOpenURL:url];
}
handleOpenURL:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuth HandleOpenURL:url];
}
2 , 在需要使用的 viewController中 初始化tencentOAuth=[[TencentOAuthalloc]initWithAppId:@"你的appid"andDelegate:self];
3,设置权限列表
//4,设置需要的权限列表,此处尽量使用什么取什么。
permissions= [NSArrayarrayWithObjects:@"get_user_info",@"get_simple_userinfo",@"add_t",nil];
4,登陆
[tencentOAuth authorize:permissionsinSafari:NO];
5,在代码中实现 TencentSessionDelegate 方法
#pragma mark -- TencentSessionDelegate
//登陆完成调用
- (void)tencentDidLogin
{
resultLable.text =@"登录完成";
if (tencentOAuth.accessToken &&0 != [tencentOAuth.accessTokenlength])
{
// 记录登录用户的OpenID、Token以及过期时间
tokenLable.text =tencentOAuth.accessToken;
}
else
{
tokenLable.text =@"登录不成功没有获取accesstoken";
}
}
//非网络错误导致登录失败:
-(void)tencentDidNotLogin:(BOOL)cancelled
{
NSLog(@"tencentDidNotLogin");
if (cancelled)
{
resultLable.text =@"用户取消登录";
}else{
resultLable.text =@"登录失败";
}
}
// 网络错误导致登录失败:-(void)tencentDidNotNetWork
{
NSLog(@"tencentDidNotNetWork");
resultLable.text =@"无网络连接,请设置网络";
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
以上方法基本上就实现了登陆,下来我们得考虑登陆成功之后如何获取用户信息
其实方法很简单我们在登陆成功的方法里面调用
[tencentOAuth getUserInfo];
然后系统会调用一个方法(我们需要提前实现)
-(void)getUserInfoResponse:(APIResponse *)response
{
NSLog(@"respons:%@",response.jsonResponse);
}
在getUserInfoResponse中就可以看到所需要的用用户信息
大致代码如下
- <pre name="code" class="objc">#import "ViewController.h"
- #import <TencentOpenAPI/TencentOAuth.h>
- @interface ViewController ()<TencentSessionDelegate>
- {
- UIButton *qqLoginBtn;
- TencentOAuth *tencentOAuth;
- NSArray *permissions;
- UILabel *resultLable;
- UILabel *tokenLable;
- }
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- //1,初始化登陆按钮 添加到当前view中
- qqLoginBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
- qqLoginBtn.frame=CGRectMake(100, 50, 36, 36);
- [qqLoginBtn setTitle:@"登陆" forState:UIControlStateNormal];
- [qqLoginBtn addTarget:self action:@selector(loginAct) forControlEvents:UIControlEventTouchDown];
- [self.view addSubview:qqLoginBtn];
- //2,初始 lable
- resultLable=[[UILabel alloc]initWithFrame:CGRectMake(30, 100, 200, 36)];
- tokenLable=[[UILabel alloc]initWithFrame:CGRectMake(30, 150, 200, 36)];
- [self.view addSubview:resultLable];
- [self.view addSubview:tokenLable];
- //3,初始化TencentOAuth 对象 appid来自应用宝创建的应用, deletegate设置为self 一定记得实现代理方法
- //这里的appid填写应用宝得到的id 记得修改 “TARGETS”一栏,在“info”标签栏的“URL type”添加 的“URL scheme”,新的scheme。有问题家QQ群414319235提问
- tencentOAuth=[[TencentOAuth alloc]initWithAppId:@"1104617535" andDelegate:self];
- //4,设置需要的权限列表,此处尽量使用什么取什么。
- permissions= [NSArray arrayWithObjects:@"get_user_info", @"get_simple_userinfo", @"add_t", nil nil];
- }
- #pragma mark -- login
- -(void)loginAct
- {
- NSLog(@"loginAct");
- [tencentOAuth authorize:permissions inSafari:NO];
- }
- #pragma mark -- TencentSessionDelegate
- //登陆完成调用
- - (void)tencentDidLogin
- {
- resultLable.text = @"登录完成";
- if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length])
- {
- // 记录登录用户的OpenID、Token以及过期时间
- tokenLable.text = tencentOAuth.accessToken;
- [tencentOAuth getUserInfo];
- }
- else
- {
- tokenLable.text = @"登录不成功 没有获取accesstoken";
- }
- }
- //非网络错误导致登录失败:
- -(void)tencentDidNotLogin:(BOOL)cancelled
- {
- NSLog(@"tencentDidNotLogin");
- if (cancelled)
- {
- resultLable.text = @"用户取消登录";
- }else{
- resultLable.text = @"登录失败";
- }
- }
- // 网络错误导致登录失败:
- -(void)tencentDidNotNetWork
- {
- NSLog(@"tencentDidNotNetWork");
- resultLable.text = @"无网络连接,请设置网络";
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- -(void)getUserInfoResponse:(APIResponse *)response
- {
- NSLog(@"respons:%@",response.jsonResponse);
- }
- @end
九,真机测试效果
打开登陆界面:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
登陆中
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
登录成功
IOS-QQ第三方登录的更多相关文章
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
- QQ第三方登录
QQ第三方登录 在Android应用程序的开发过程中,很多时候需要加入用户登录/注册模块.除了自己动手设计登录界面并实现相应功能外,现在还可以借助百度.腾讯等开发者平台提供的第三方账号登录模块.最近研 ...
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...
- 【第三方登录】之QQ第三方登录
最近公司做了个网站,需要用到第三方登录的东西.有QQ第三方登录,微信第三方登录.先把QQ第三方登录的代码列一下吧. public partial class QQBack : System.Web.U ...
- PHP实现QQ第三方登录
PHP实现QQ第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 http://connect.qq.com登入我们自己的QQ号,没有QQ号的小伙伴可以忽略本篇博 ...
- 利用JS_SDK实现QQ第三方登录
前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. ...
- web实现QQ第三方登录
开放平台-web实现QQ第三方登录 应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com ...
- Android 实现QQ第三方登录
Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...
- Android应用之——最新版本号SDK V2.4实现QQ第三方登录
为什么要写这篇博客呢?由于.我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了.要么就是说的非常不清楚.非常罗嗦.并且非常多都是一些小demo,不是什么实例.甚至连腾讯官方的文档都有这个问 ...
- Django项目中使用qq第三方登录。
使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...
随机推荐
- javascript预览图片——IT轮子系列(九)
再使用htm控件 <input type="file" name="file" /> 上传图片的时候,往往需要先预览图片,然后点击保存按钮,把图片上 ...
- 春天aopframework实现
Java的代码 包 cn.itcast.day3.aopframework; 进口 java.io.IOException的; 进口 的java.io.InputStream; 进口 java.u ...
- Django ValidationError中的单下划线
用惯pycharm,结果这个下划线无法自动找到.后来看文档发现其是翻译gettext的简化格式,import方式: from django.utils.translation import ugett ...
- mysql-入门
创建数据库 Create database 数据库名字 [库选项]; 创建数据库 create database mydatas charset utf8; 查看数据库 show databases; ...
- HTML学习笔记8:表单
什么是表单? 一个网页表单可以将用户输入的数据发送到服务器进行处理.因为互联网用户使用复选框,单选按钮或文本字段填写表格,所以WebForms的形式类似文件或数据库.例如,WebForms ...
- python之字典、列表、元组生成器的使用
python的生成式在一些类型相互转换的时候可以写出十分优雅的代码.如列表转换成另一个列表.字典.或元组.并且代码的执行效率也比使用for...in...循环高. 列表生成式 列表生成式即生成列表的生 ...
- OC和Swift中的UITabBar和UINaviGationBar的适配 [UITabbar在IPad中的适配]
作者 sundays http://www.cnblogs.com/sundaysgarden/ OC中UITabbar的适配[iphoneX和Ipad适配] 自定可以UITabar 自定义UITab ...
- 原生js实现canvas气泡冒泡效果
说明: 本文章主要分为ES5和ES6两个版本 ES5版本是早期版本,后面用ES6重写优化的,建议使用ES6版本. 1, 原生js实现canvas气泡冒泡效果的插件,api丰富,使用简单2, 只需引入J ...
- 利用box-shadow属性实现页面层叠效果
效果图如下 box-shadow的语法 代码展示 .footer { color: #777; padding: 10px 15px; height: 20px; text-align: center ...
- 根据appId匹配项目名称
有时候后端返回的接口中也许没有我们想要的字段,可以通过下面的方式拿到想要的字段 代码如下: //获取项目名称 getBizName(appId) { let proNameList = this.$s ...