当前位置: 首页 > news >正文

iOS QQ 登录

QQSDK

看官网的文档,确实让人头疼的一件事,说是两个资源文件,就找到了一个(TencentOpenAPI.framework),Demo中也没有找到.

接下来具体实现:

导入库:

 添加SDK依赖的系统库文件。分别是“Security.framework”,“libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”

添加URL Types URL_Schemes = tencent+appid

发现配置完方法后不走回调.主要有一下两点,

1.添加白名单

 

<key>LSApplicationQueriesSchemes</key>
<array>
<string>mqq</string>
<string>mqqapi</string>
<string>mqqwpa</string>
<string>mqqbrowser</string>
<string>mttbrowser</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqqopensdkapiV4</string>
<string>wtloginmqq2</string>
<string>mqzone</string>
<string>mqzoneopensdk</string>
<string>mqzoneopensdkapi</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapiV2</string>
<string>mqqapiwallet</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkdataline</string>
<string>mqqgamebindinggroup</string>
<string>mqqopensdkgrouptribeshare</string>
<string>tencentapi.qq.reqContent</string>
<string>tencentapi.qzone.reqContent</string>
</array>

 

 

 

2 回调后的设置

AppDelegate.m 中引入(最好设置成全局的,登录时还要用到)

 

#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if ([url.host isEqualToString:@"qzapp"]) {
 
[QQApiInterface handleOpenURL:url delegate:(id<QQApiInterfaceDelegate>)[QQApiNewsObject class]];
 
return [TencentOAuth HandleOpenURL:url];
 
}
 
return YES;
}

 

登录VC 中实现

引入代理方法: TencentSessionDelegate

//声明变量
@property (nonatomic,strong) TencentOAuth * tencentOAuth;
//判断是否装QQ - (void)lookQQAuth { self.tencentOAuth = [[TencentOAuth alloc]initWithAppId:@"AppId" andDelegate:self]; BOOL isInstallQQ = [TencentOAuth iphoneQQInstalled]; if (isInstallQQ == NO) { [self.qqLogin setHidden:YES]; } } //登录函数: - (void)qqLoginBtnAction { NSString *appid = TencentAppid; _tencentOAuth = [[TencentOAuth alloc] initWithAppId:appid andDelegate:self]; NSMutableArray * permission = [NSMutableArray arrayWithObjects:@[kOPEN_PERMISSION_GET_INFO, kOPEN_PERMISSION_GET_USER_INFO, kOPEN_PERMISSION_GET_SIMPLE_USER_INFO],nil]; [_tencentOAuth authorize:permission inSafari:NO]; } #pragma mark --------- qq登录状态回调 TencentSessionDelegate------ //登录成功: - (void)tencentDidLogin { if (_tencentOAuth.accessToken.length > 0) { // 获取用户信息 [_tencentOAuth getUserInfo]; [_qqInfoDict setValue:_tencentOAuth.openId forKey:@"openid"]; } else { NSLog(@"登录不成功 没有获取accesstoken"); } } //非网络错误导致登录失败: - (void)tencentDidNotLogin:(BOOL)cancelled { if (cancelled) { NSLog(@"用户取消登录"); } else { NSLog(@"登录失败"); } } - (void)tencentDidNotNetWork { NSLog(@"检查网络"); } // 获取用户信息 - (void)getUserInfoResponse:(APIResponse *)response { if (response && response.retCode == URLREQUEST_SUCCEED) { // 字符串 转字典 取用户信息 NSDictionary *userInfo = [NSString dictionaryWithJsonString:response.message]; // 开始登录(请求服务器) [self qqLoginRequest]; } else { NSLog(@"QQ auth fail ,getUserInfoResponse:%d", response.detailRetCode); } }

 

 

 

转载于:https://www.cnblogs.com/xingsmile/p/10937716.html

相关文章:

  • java版spring cloud+spring boot+redis多租户社交电子商务平台 (六)分布式配置中心(Spring Cloud Config)...
  • 线程安全性
  • wps怎么转图片?
  • iOS开发的底线-崩溃
  • LEANGOO卡片
  • margin-top 外边距合并
  • Visual Paradigm 教程[UML]:如何在序列图中应用消息编号?
  • 【漫画】为什么说O(n)复杂度的基数排序没有快速排序快?
  • 博客园的第一篇随笔
  • vue之修饰符
  • 赶紧收藏!41个Web UI工具包资源免费及付费下载
  • 共勉:作为一名程序员你应该怎么提一个高质量的问题?
  • 反转单链表和双链表
  • OSPF 笔记之Master / Slave
  • Codeforces Round #564 (Div. 2) A. Nauuo and Votes
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 5、React组件事件详解
  • Debian下无root权限使用Python访问Oracle
  • ECS应用管理最佳实践
  • E-HPC支持多队列管理和自动伸缩
  • Fundebug计费标准解释:事件数是如何定义的?
  • Golang-长连接-状态推送
  • Mysql数据库的条件查询语句
  • pdf文件如何在线转换为jpg图片
  • PHP那些事儿
  • Puppeteer:浏览器控制器
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis 中的布隆过滤器
  • Spring Cloud中负载均衡器概览
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • v-if和v-for连用出现的问题
  • vue 个人积累(使用工具,组件)
  • 利用DataURL技术在网页上显示图片
  • 嵌入式文件系统
  • 软件开发学习的5大技巧,你知道吗?
  • 使用docker-compose进行多节点部署
  • 通过npm或yarn自动生成vue组件
  • 微服务核心架构梳理
  • 我有几个粽子,和一个故事
  • Java数据解析之JSON
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ${factoryList }后面有空格不影响
  • (1)bark-ml
  • (libusb) usb口自动刷新
  • (二)fiber的基本认识
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (一)认识微服务
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .describe() python_Python-Win32com-Excel
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)