iOS_SDK环境搭建

目录

QQ登录iOS SDK 封装了QQ登录的登录授权以及大部分OpenAPI,应用只需要修改相应参数,不需要理解验证授权流程,即可快速实现QQ登录功能。
iOS平台上(iPad,iPhone,iPod)的应用,请在申请appid,appkey后,使用QQ互联提供的iOS SDK。
1.5版本增加 QQAPI 对象,以支持手机QQ的调用。以前申请过 APPID 类似“QQXXXXXXXX”的开发商,建议重新申请。为了兼容旧版本的手机QQ,
需要增加 URL Scheme,QQ + 十六进制新AppId,不足八位在首部补0。(如 appid=222222 则 scheme=QQ0003640E)
详情请参考iOS_SDK_API_使用说明
本SDK仅适用于移动应用,即基于使用Implicit_Grant方式获取Access_Token接入的应用。


变更历史
V3.3.8更新
新增打印日志接口,第三方可主动调用将日志信息打印到第三方的日志中,供日后定位问题使用。
新增支持设置opensdk只使用UniversalLink模式与手机QQ交互(系统要求大于等于iOS9)。
V3.3.8优化
尝试用子线程访问剪贴板,来规避偶现opensdk初始化访问剪贴板时间过长,而被看门狗杀死的问题。
对于iOS8.0及以上系统版本,UIAlertView升级为UIAlertController
唤起小程序允许不填写miniPath,不填唤起默认小程序首页。
修复登录过程会清空剪贴板数据的bug(QQ版本需要升级到8.3.3)。
V3.3.7
支持第三方直接唤起手Q小程序及第三方直接唤起并使用手Q的IM能力
V3.3.6
使用UniversalLink方案进行登录分享校验
V3.3.5
支持分享小程序消息到手机QQ或空间
UIWebview替换为WKWebview
V2.0.1
增加全新的分享到QZone的接口
V2.0
新增API判断手机QQ版本
新增WPA临时会话
支持分享音频消息
Demo 实现简单调整
分享消息结构化改造
新增系统库Security.framework

1. iOS SDK 下载

请到SDK下载页面下载最新版本QQ登录iOS SDK。

2. iOS SDK目录结构

iOS SDK包中带有两个文件:
1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件。
iOS_SDK_huanjingdajian001.png

3. 将iOS SDK文件添加到工程中

1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷贝到应用开发的目录下。
然后将TencentOpenAPI.framework从SDK的保存目录拖拽到工程导航视图(project navigator)中的Frameworks虚拟目录下。
iOS_SDK_huanjingdajian002.png
注意TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle必须放到应用的资源的根目录下,否则会出现资源无法加载的问题。

2. 在弹出的对话框中勾选“Create groups for any added folders”,去掉“copy items into destination group’s folder(if needed)”,
Add to targets中选择要加入SDK的target之后点击finish。完成之后就将iOS SDK的framework文件加入了开发工程中。
iOS_SDK_huanjingdajian003.png

3. 添加SDK依赖的系统库文件。分别是 “Security.framework”,“libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、
“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
在Xcode中打开工程配置文件,选择“summary”一栏。
iOS_SDK_huanjingdajian004.png

4. 在“summary”中选择“Linked Frameworks and Libraries”一栏,点击“+”图标。
iOS_SDK_huanjingdajian005.png

5. 直接在默认库文件中选择后点击“Add”,下图以添加“SystemConfiguration.framework”为例:
iOS_SDK_huanjingdajian006.png
iOS_SDK_huanjingdajian007.png

6. 返回后看到“SystemConfiguration.framework”已经在“Linked Frameworks and Libraries”中出现。
iOS_SDK_huanjingdajian008.png

7. 在Xcode中打开工程配置文件,选择“Build Phases”一栏。
iOS_SDK_huanjingdajian009.png

8.在“Build Phases”中选择展开“Copy Bundle Resources”一栏,并点击“+”图标
iOS_SDK_huanjingdajian010.png

9. 选择“Add Other...”,进入iOS SDK文件所在目录,选择TencentOpenApi_IOS_Bundle.bundle,点击回车或者点击“Open”。
iOS_SDK_huanjingdajian011.png
iOS_SDK_huanjingdajian012.png

10. 返回后看到TencentOpenApi_IOS_Bundle.bundle已经在“Copy Bundle Resources”中出现。
iOS_SDK_huanjingdajian013.png

11. 修改必要的工程配置属性。
在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”。
iOS_SDK_huanjingdajian014.png

4. 修改必要的代码

4.1 修改工程配置文件

在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid。
如果您使用的是XCode3或者更低的版本,则需要在plist文件中添加。Demo中我们注册的appid是222222。如下图
iOS_SDK_huanjingdajian015.png

4.2 重写AppDelegate 的handleOpenURL和openURL方法

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];
}


4.3 在代码中实现TencentSessionDelegate协议中的方法

具体协议可以参照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件。

4.4 初始化iOS SDK API数据对象TencentOAuth。

(1) 创建TencentOAuth并初始化其appid,demo为222222。delegate为实现TencentSessionDelegate的对象:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222", andDelegate:self];这里delegate不能为空
(2) 初始化redirectURI(这里需要填写注册APP时填写的域名。默认可以不用填写。建议不用填写。demo中注册时的地址是“www.qq.com”):
_tencentOAuth.redirectURI = @"www.qq.com";
(3)设置应用需要用户授权的API列表。 (建议如果授权过多的话,可能会造成用户不愿意授权。这里最好只授权应用需要用户赋予的授权。):
_permissions = [[NSArray arrayWithObjects:@"get_user_info",@"get_simple_userinfo", @"add_t", nil] retain];

5. 调用SDK登录

1.登录时,调用TencetnOAuth对象的authorize方法:
[_tencentOAuth authorize:_permissions inSafari:NO];
2. 登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。
登录成功:

@protocol TencentSessionDelegate <NSObject>
- (void)tencentDidLogin
{
   _labelTitle.text = @"登录完成";
   if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length])
   {
   // 记录登录用户的OpenID、Token以及过期时间
      _labelAccessToken.text = _tencentOAuth.accessToken;
   }
   else
   {
      _labelAccessToken.text = @"登录不成功 没有获取accesstoken";
   }
}


非网络错误导致登录失败:

@protocol TencentSessionDelegate <NSObject>
-(void)tencentDidNotLogin:(BOOL)cancelled
{
   if (cancelled)
   {
      _labelTitle.text = @"用户取消登录";
   }
   else
   {
      _labelTitle.text = @"登录失败";
   }
}
网络错误导致登录失败:

@protocol TencentSessionDelegate <NSObject>
-(void)tencentDidNotNetWork
{
   _labelTitle.text=@"无网络连接,请设置网络";
}


3. 登录成功后,即可获取到access token和openid。accessToken和 openid保存在TencentOAuth对象中。可以通过相应的属性方法直接获得。
[_tencentOAuth accessToken] ;
[_tencentOAuth openId] ;

特别提示:
1.由于登录是异步过程,这里可能会由于用户的行为导致整个登录的的流程无法正常走完,即有可能由于用户行为导致登录完成后不会有任何登录回调被调用。
开发者在使用SDK进行开发的时候需要考虑到这点,防止由于一直在同步等待登录的回调而造成应用的卡死,建议在登录的时候将这个实现做成一个异步过程。
2.获取到的access token具有3个月有效期,过期后提示用户重新登录授权。
3. 第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。如果需要保存授权信息,需要保存登录完成后返回的
accessToken,openid 和 expirationDate三个数据,下次登录的时候直接将这三个数据是设置到TencentOAuth对象中即可。

获得:
[_tencentOAuth accessToken] ;
[_tencentOAuth openId] ;
[_tencentOAuth expirationDate] ;

设置:
[_tencentOAuth setAccessToken:accessToken] ;
[_tencentOAuth setOpenId:openId] ;
[_tencentOAuth setExpirationDate:expirationDate] ;

4. 建议应用在用户登录后,即调用getUserInfo接口获得该用户的头像、昵称并显示在界面上,使用户体验统一。

以上信息是否解决您的问题?

Copyright © 1998 - 2020 Tencent. All Rights Reserved.

腾讯公司 版权所有

返回顶部