前段时间集成了微信第三方登录,今天又集成了QQ第三方登录,遇到了小坑,记录下,
首先、腾讯开放平台下载sdk包,最新的应该是3.2.0的,下载完成之后,直接导入TencentOpenApi_IOS_Bundle.bundle 和 TencentOpenAPI.framework
库文件,同时,添加相应的依赖库
“SystemConfiguration.framework”、
“CoreGraphics.Framework”、
“libsqlite3.tbd”、
“CoreTelephony.framework”、
“libstdc++.tbd”、
“libz.dylib”、
Security.framework”```
在项目工程`build setting` -- `other linker flag`中添加`-fobjc-arc`注意大小写,在info中,添加`URL Type identifier = tencentopenapi URL Scheme = tencent+appid`
接下来,可以写代码了
`appdelegate.h`,文件中导入头文件`#import <TencentOpenAPI/TencentOAuth.h>`
同时,俩个代理方法
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuth HandleOpenURL:url];
}(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuth HandleOpenURL:url];
}
最后,在登录页面
导入头文件`#import <TencentOpenAPI/TencentOAuth.h>`同时遵循`TencentSessionDelegate`三个代理方法
- (IBAction)loginAction:(id)sender {
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"101400458" andDelegate:self];
_tencentOAuth.authShareType = AuthShareType_QQ;//特别要注意,登录前需要授权,否则会爆出未授权错误(多看文档还是有好处的哈)
NSArray *permissions = [NSArray arrayWithObjects:@"get_user_info",@"get_simple_userinfo", @"add_t", nil];
[_tencentOAuth authorize:permissions];
}
最后三个代理方法
pragma mark -- TencentSessionDelegate
- (void)tencentDidLogin
{
NSLog(@"yes");
NSLog(@"%@ -- %@",_tencentOAuth.accessToken, _tencentOAuth.openId);// 打印下accessToken和openId 代表我成功了,存储起来用的时候直接用,或者此处请求服务器接口传给服务器,获取我们项目中用到的userSession
//获取用户个人信息
[_tencentOAuth getUserInfo];
}
-(void)tencentDidNotLogin:(BOOL)cancelled
{
if (cancelled) {
NSLog(@"取消登录");
}
}
-(void)tencentDidNotNetWork
{
NSLog(@"tencentDidNotNetWork");
}
pragma mark -- 获取用户个人信息
- (void)getUserInfoResponse:(APIResponse*)response
{
NSLog(@"response -- %@", response.jsonResponse);
}
做他们该做的事,以上,就是第三方qq登录,纯手打,nice