QQ登陆iOS SDK 封装了QQ登陆的登陆受权以及大部分OpenAPI,应用只须要修改相应参数,不须要理解验证受权流程,便可快速实现QQ登陆功能。c++
iOS平台上(iPad,iPhone,iPod)的应用,请在申请appid,appkey后,使用QQ互联提供的iOS SDK。sql
//申请网址 http://connect.qq.com网络
请到SDK下载页面下载最新版本QQ登陆iOS SDK。app
iOS SDK包中带有两个文件:异步
1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。网站
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK须要的资源文件。ui
1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷贝到应用开发的目录下。url
而后将TencentOpenAPI.framework从SDK的保存目录拖拽到工程导航视图(project navigator)中的Frameworks虚拟目录下。spa
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文件加入了开发工程中。code
3. 添加SDK依赖的系统库文件。分别是”Security.framework”, “libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
4. 在Xcode中打开工程配置文件,选择“Build Phases”一栏。
5.在“Build Phases”中选择展开“Copy Bundle Resources”一栏,并点击“+”图标
6. 选择“Add Other...”,进入iOS SDK文件所在目录,选择TencentOpenApi_IOS_Bundle.bundle,点击回车或者点击“Open”。
7. 修改必要的工程配置属性。
在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”。
在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid。若是您使用的是XCode3或者更低的版本,则须要在plist文件中添加。Demo中咱们注册的appid是222222。以下图
另外在Xcode 6.0建立工程时,默承认能没有单独设置Bundle display name属性值。可是由于SDK须要用到Bundle display name的值,因此务必请检查确保这个属性存在,若是没有请添加上。
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];
}
具体协议能够参照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件
(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];
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接口得到该用户的头像、昵称并显示在界面上,使用户体验统一。