(一)QQ
首先去官网申请应用,获得appid和key,地址http://wiki.open.qq.com/wiki
导入sdk,由于我使用的是cocoapods,所以省去了一些配置步骤,如果不用pods导入,请参照这篇文章配置:http://www.cnblogs.com/Hakim/p/5736886.html
pods导入后,还需要设置一下
在url schemes中输入tencent+appid,如appid为111,就输入tencent111
接下来,配置info.plist文件
需要设置LSApplicationQueriesSchemes字段,如图
,不想一个个输入的可以直接编辑
LSApplicationQueriesSchemes
mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
下面在代码中实现:
AppDelegate.m:
导入#import
实现这两个方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuthHandleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuthHandleOpenURL:url];
}
在你需要登录的页面实现:
导入#import
#define appid @"1105664615"
文件需要遵循协议<TencentSessionDelegate>
@property (nonatomic,strong) TencentOAuth *tencentOAuth; //设置为属性,不然不能进入回调方法
在进入页面的时候实现:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:appid andDelegate:self];
在点击第三方登录按钮时实现:
NSArray* permissions = [NSArray arrayWithObjects:
kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,kOPEN_PERMISSION_GET_VIP_INFO,kOPEN_PERMISSION_GET_USER_INFO,
nil]; //数组值可以库文件中点击进去查看,有中文注释
[_tencentOAuth authorize:permissionsinSafari:NO];
代理方法:
/**
* 登录成功后的回调
*/
- (void)tencentDidLogin{
/** Access Token凭证,用于后续访问各开放接口 */
if (_tencentOAuth.accessToken) {
//获取用户信息。 调用这个方法后,qq的sdk会自动调用
//- (void)getUserInfoResponse:(APIResponse*) response
//这个方法就是 用户信息的回调方法。
BOOL tmpBool = [_tencentOAuth getUserInfo];
if (!tmpBool) {
//未获取授权信息的提示
}
}else{
NSLog(@"accessToken 没有获取成功");
}
}
//这个方法能收到各种需要的信息,我列举了一些自己觉得有用的,其它的也可以自己去查看
- (void)getUserInfoResponse:(APIResponse*) response{
NSLog(@"%@",_tencentOAuth.openId);
NSLog(@"%@",_tencentOAuth.accessToken);
NSLog(@"%@",response.jsonResponse[@"nickname"]);
NSLog(@"%@",response.jsonResponse[@"province"]);
NSLog(@"%@",response.jsonResponse[@"city"]);
NSLog(@"%@",response.jsonResponse[@"gender"]);
NSLog(@"%@",response.jsonResponse[@"figureurl_qq_2"]);
}
/**
* 登录失败后的回调
* \param cancelled 代表用户是否主动退出登录
*/
- (void)tencentDidNotLogin:(BOOL)cancelled{
NSLog(@"失败");
}
/**
* 登录时网络有问题的回调
*/
- (void)tencentDidNotNetWork{
NSLog(@"网络错误");
}
//这个方法在文档中有提及,但是在qq的demo中并没有进入,不知道为什么,
- (NSArray *)getAuthorizedPermissions:(NSArray *)permissions withExtraParams:(NSDictionary *)extraParams{
NSLog(@"111permissions = %@",permissions);
NSLog(@"222extraParams = %@",extraParams);
return nil;
}