iOS 第三方登录之 QQ登录
一. 首先需要下载腾讯qq登录所需的库,下载地址是http://open.qq.com/ 。
需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bundle.bundle,将两者加入工程。
二.下面就来实现QQ第三方登录
1.声明属性,且viewcontroller实现TencentSessionDelegate
@interface LoginViewController :UIViewController<TencentSessionDelegate>
@property (nonatomic,strong)TencentOAuth *tencentOAuth;
@property (nonatomic,strong)NSMutableArray* permission;
//点击qq登录
- (IBAction)touchQQLoginButton:(id)sender;
@end
2.iOS中,如果iphone没有安装QQ客户端,当用qq进行第三方登录时会提示要安装qq,这样会影响app上架,
所以,应该先检测一下手机上时候安装了qq,没有安装就需要隐藏qq的第三方登录按钮。
//判断是否安装了qq
self.tencentOAuth = [[TencentOAuthalloc]initWithAppId:gQQidandDelegate:self];
BOOL isInstallQQ = [TencentOAuthiphoneQQInstalled];
if (isInstallQQ ==NO) {
[self.QQButtonsetHidden:YES];
}
其中initWithAppId:gQQid中的gQQid,是申请的腾讯开放平台的appid。
3.使用qq第三方登录,大概需要三部:
1)获取认证
2)获取用户信息
3)登录
下面我们来单步分析
1)获取认证。比如点击了 使用qq登录按钮
#pragma mark ----------- 点击qq登录 ----------------
- (IBAction)touchQQLoginButton:(id)sender {
self.tencentOAuth = [[TencentOAuthalloc]initWithAppId:gQQidandDelegate:self];
self.permission = [NSMutableArrayarrayWithObjects:@"get_user_info",@"get_simple_userinfo",nil];
[self.tencentOAuthauthorize:self.permissioninSafari:NO];
}
登录结束会调用delegate
#pragma mark --------- qq登录状态回调 ------
//登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。
- (void)tencentDidLogin
{
NSLog(@"qq登录完成");
if (_tencentOAuth.accessToken &&0 != [_tencentOAuth.accessTokenlength])
{
// 记录登录用户的OpenID、Token以及过期时间
_labelAccessToken.text = _tencentOAuth.accessToken;
MyNSLog(@"token===%@",[_tencentOAuthaccessToken] );
MyNSLog(@"openId===%@",[_tencentOAuthopenId]) ;//这个是用户的唯一id,使用它来登录自己的服务器
MyNSLog(@"appid === %@",[_tencentOAuthappId]);
[selfgetQQUserInfo];//自己实现的方法,得到用户信息,见下一步说明。
}
else{
_labelAccessToken.text = @"登录不成功没有获取accesstoken";
}
}
//非网络错误导致登录失败:
-(void)tencentDidNotLogin:(BOOL)cancelled
{
MyNSLog(@"非网络错误导致登录失败");
if (cancelled)
{
MyNSLog(@"用户取消登录操作");
}
else
{
}
}
//网络错误导致登录失败:
-(void)tencentDidNotNetWork
{
MyNSLog(@"网络错误导致登录失败:");
}
2)获取用户信息
#pragma mark ---------- 获取qq用户信息 ----
- (void)getQQUserInfo {
if(![_tencentOAuthgetUserInfo]){
MyNSLog(@"获取qq用户信息失败");
}
}
获取用户信息结束回调
#pragma mark -------- qq用户信息回调 -------
/**
* Called when the get_user_info has response.
*/
- (void)getUserInfoResponse:(APIResponse*) response {
if (response.retCode ==URLREQUEST_SUCCEED)
{
NSMutableString *str=[NSMutableStringstringWithFormat:@""];
for (id keyin response.jsonResponse) {
[strappendString: [NSStringstringWithFormat:@"%@:%@\n",key,[response.jsonResponseobjectForKey:key]]];
}
MyNSLog(@"%@",str);
NSString* url = [[NSStringalloc]initWithString:[response.jsonResponseobjectForKey:@"figureurl_qq_2"]];
NSString* nickname = [[NSStringalloc]initWithString:[response.jsonResponseobjectForKey:@"nickname"]];
if (NO_VALUE(url) ||NO_VALUE(nickname)) {
MyNSLog(@"获取qq用户信息失败");
}else{
NSNumber* typeQQ = [NSNumbernumberWithInteger:1];
[selflogin:self.openIDandNickname:nicknameandAvatar:url andType:typeQQ];//自己的登录函数
}
}
else
{
[selfshowHint:response.errorMsg];
}
}
3) 登录自己的服务器
[self login:self.openID andNickname:nickname andAvatar:url andType:typeQQ];//自己的登录函数
三.当从qq认证返回我们自己的app,需要在appdelegate中实现
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([url.host isEqualToString:@"qzapp"]) {
return [TencentOAuth HandleOpenURL:url];
}
return YES;
}
-(BOOL) application:(UIApplication *)application handleOpenURL:(NSURL *)url{
if ([url.host isEqualToString:@"qzapp"]) {
return [TencentOAuth HandleOpenURL:url];
}
}
注意事项:
1. 需要特别注意使用第三方登录对审核带来的影响,如果审核人员的设备未安装QQ,如果是跳转到下载微信和QQ的页面,可能会被拒绝。
2. app发布前,只有添加进测试帐号的帐号才能登录成功,否则会报错。
3. 开发完成后需要提交审核,否则只能允许100个测试账号进行登录。
文章如有错误,请指出,谢谢。
转载于:https://www.cnblogs.com/fendou0320/p/5262235.html
iOS 第三方登录之 QQ登录相关推荐
- flutter在IOS上的登录实现——QQ登录、微信登录、自动识别手机号一键登录、apple登录
flutter在IOS上的登录实现--QQ登录.微信登录.自动识别手机号一键登录.apple登录 一.QQ登录 使用的第三方库: 具体操作方法: 1.配置 Universal Links 2.QQ互联 ...
- 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...
- dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录
织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...
- Android 和 iOS分别用同一个 QQ登录获取到的openid 不一致的问题
Android 和 iOS分别用同一个 QQ登录获取到的openid 不一致的问题: QQ登录时无法获取唯一的 UID 或openID, 不同设备获取到的不一致. 咨询腾讯客服得知一下结果: 现在打通 ...
- 美多商城项目之用户登录:账号登录、QQ登录
一.账号登录 1.1 用户名登录 1. 用户名登录逻辑分析 2. 用户名登录接口设计 1.请求方式 选项 方案 请求方法 POST 请求地址 /login/ 2.请求参数:表单 参数名 类型 是否必传 ...
- uniapp实现微信登录或者QQ登录
uniapp实现微信登录或者QQ登录 无论是哪种登录, 都要用到uni.login 一. 获取服务供应商 在实现登录前,先查看一下可以使用哪种方式登录. 在APP平台, 可用的服务商, 是打包环境中配 ...
- 商城项目---day04---账号登录和QQ登录
一:用户名登录和用户名展示: # 用户名登陆接口实现 class LoginView(View):def post(self, request):data = json.loads(request.b ...
- PHP 接入(第三方登录)QQ 登录 OAuth2.0 过程中遇到的坑
前言 绝大多数网站都集成了第三方登录,降低了注册门槛,增强了用户体验.最近看了看 QQ 互联上 QQ 登录的接口文档.接入 QQ 登录的一般流程是这样的:先申请开发者 -> 然后创建应用(拿到一 ...
- 第三方登录(QQ登录)开发流程详解
一.准备工作 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. 申请appid和appkey的用途 appid :应用的唯一标 ...
最新文章
- 神经网络要从原子抓起:原来白花花的银子才是神经芯片的未来
- 高效整洁CSS代码原则 (下)
- wxWidgets:wxGenericProgressDialog类用法
- Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问
- centos directory server
- ES组件elasticsearch-head报错 npm ERR! Please include the following file with any support request
- Symantec Backup Exec 2014 备份Exchange 2013之四设备初始化
- paip.使用泛型时未能找到类型或命名空间名称“T
- 基于单片机的人体健康检测系统
- SCI期刊分区-JCR分区 中科院分区
- 一篇短文让你彻底理解什么是串口通信
- CIR 工业自动化雷达
- 【认识AI:人工智能如何赋能商业】【08】通用人工智能应用—智能机器人
- Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
- 小米Q1业绩:总营收769亿元,手机稳居全球前三
- 传奇微端大带宽服务器如何选择
- mysql5.1.40.jrp_1.原生态JDBC编程中的问题总结
- TOPSIS算法(优劣解距离法)的使用举例与matlab实现
- 专注UI——实用技术:模糊搜索
- 测试工程师mysql数据库基础操作之DQL 数据查询篇
热门文章
- html网页加密最终版,【原】记一次加密网页html的研究
- Linux运维必备的40个命令总结(值得收藏)
- 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
- 动画 制作_您希望制作的10个醒目的徽标动画
- Python简单试题3
- Service Mesh所应对的8项挑战 1
- jvm系列(八):jvm知识点总览
- Boostrap ZURB Foundation —— Web开发前端框架
- (转)svn检出的时候报 Unable to connect to a repository at URL错误
- BGP聚合as-set advertise-map