由于公司需要件相、要求此次三方登錄全部用官方SDK再扭,需要配置友盟和ShareSDK的同學(xué),這篇文章幫不上太多忙夜矗,看一下就好泛范。
集成和配置步驟 大致過一遍就不多說了,相信大家都耳熟能詳紊撕。
1罢荡、下載并解壓SDK?:下載鏈接
2、拖拽 TencentOpenAPI ?文件到Xcode?工程內(nèi)(請(qǐng)勾選 Copy items if needed);或拷貝SDK?文件到?工程的物理理?目錄下对扶,選中?工程Target -> General -> Linked Frameworks and Libraries -> Add Other 然后找到對(duì)應(yīng)?文件添加即可区赵。
3、添加依賴庫(kù)
SystemConfiguration.framework
4浪南、新增?一條URL scheme:選中?工程Target -> Info -> URLTypes;新的scheme命名為:tencent+appid(ex: tencent123456)
5惧笛、添加?白名單:LSApplicationQueriesSchemes新增?名單(這里遇到了一個(gè)坑,如果此前項(xiàng)目已經(jīng)統(tǒng)一配置過白名單逞泄,千萬不要太自信,一定要根據(jù)官方Demo重新添加一下拜效,我就是因?yàn)樯倥渲昧藘蓚€(gè)白名單喷众,一直不走回調(diào)方法,后來一個(gè)一個(gè)對(duì)比才發(fā)現(xiàn)的)紧憾。
6到千、AppDelegate中添加處理回調(diào)的代碼
//iOS9.0以前使用
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
[TencentOAuth HandleOpenURL:url];
[QQApiInterface handleOpenURL:url delegate:(id<QQApiInterfaceDelegate>)self];
return YES;
}
// 9.0以后使用新API接口
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{
[TencentOAuth HandleOpenURL:url];
[QQApiInterface handleOpenURL:url delegate:(id<QQApiInterfaceDelegate>)self];
return YES;
}
以上集成配置 QQ登錄和QQ分享是一樣的,做一遍操作即可赴穗。
1憔四、QQ登錄(登錄類里面的代碼)
//點(diǎn)擊登錄按鈕執(zhí)行的方法
- (void)QQLogin{
//QQ或者TIM已安裝
if ([QQApiInterface isQQInstalled] && [QQApiInterface isQQSupportApi]) {
NSArray* permissions = [self getPermissions];//授權(quán)列表數(shù)組 根據(jù)實(shí)際需要添加
_tencentOAuth = [[TencentOAuth alloc]initWithAppId:QQAppid andDelegate:self];
_tencentOAuth.redirectURI = @"";
_tencentOAuth.authShareType = AuthShareType_QQ;
[_tencentOAuth authorize:permissions inSafari:NO];
}
}
//授權(quán)列表數(shù)組 根據(jù)實(shí)際需要添加
- (NSMutableArray*)getPermissions{
NSMutableArray * g_permissions = [[NSMutableArray alloc] initWithObjects:kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];
returng_permissions;
}
注意:這里的TencentOAuth對(duì)象要寫成成員變量或者屬性,不然可能會(huì)被提前釋放般眉,獲取不到用戶信息了赵。
這里官方demo用的
[[[sdkCall getinstance] oauth] authorize:permissions inSafari:NO];這個(gè)方法授權(quán),個(gè)人不太建議使用(之前為了獲取UnionId使用過甸赃,無法走回調(diào)方法柿汛,沒解決掉,放棄了)埠对。
以上已經(jīng)請(qǐng)求授權(quán)完成
以下是回調(diào)方法
**#pragma mark -- TencentSessionDelegate==================QQ登錄回調(diào)代理==============**
-(void)tencentDidLogin{
NSLog(@"yes");
NSLog(@"%@ -- %@",_tencentOAuth.accessToken, _tencentOAuth.openId);
//請(qǐng)求UnionId(什么時(shí)候需要獲取**UnionId络断,詳見[UnionId介紹](http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D)**,這個(gè)方法可以直接獲取到**UnionId项玛,**之前自己沒有找到這個(gè)方法貌笨,也耽誤了不少時(shí)間)
** [_tencentOAuth RequestUnionId];**
}
-(void)tencentDidNotLogin:(BOOL)cancelled{
if(cancelled) {
NSLog(@"取消登錄");
}
}
-(void)tencentDidNotNetWork{
NSLog(@"tencentDidNotNetWork");
}
#pragma mark -- 獲取用戶個(gè)人信息
-(void)didGetUnionID{
NSLog(@"UnionId==================%@",_tencentOAuth.unionid);
[BMWUserDefaults setObject:_tencentOAuth.unionid forKey:QQAppUnionid];
//因?yàn)槲沂窃趃etUserInfoResponse方法里調(diào)用的后臺(tái)接口,為了保證調(diào)用接口之前已經(jīng)獲取到**Unionid**襟沮,在這里調(diào)用獲取用戶信息的方法锥惋。
[_tencentOAuth getUserInfo];
}
-(void)getUserInfoResponse:(APIResponse*)response
{
NSLog(@"response -- %@", response.jsonResponse);
NSDictionary*dic = response.jsonResponse;
NSString*sex;
if([dic[@"gender"]isEqualToString:@"男"]) {
sex =@"1";
}else{
sex =@"2";
}
NSDictionary *LoginDataDic = @{@"openid":_tencentOAuth.openId,@"unionid":[BMWUserDefaults objectForKey:QQAppUnionid],@"nickname":dic[@"nickname"],@"headimgurl":dic[@"figureurl_2"],@"sex":sex};
//后臺(tái)QQ登錄授權(quán)接口
[self getQQLoginData:LoginDataDic];
}
以上是QQ登錄相關(guān)
以下是QQ分享
//分享按鈕點(diǎn)擊事件
**- (void)QQShare{**
**//一定要加上這行代碼 雖然官方文檔并未說明 不然很可能調(diào)不起分享界面**
** TencentOAuth *auth = [[TencentOAuth alloc] initWithAppId:QQAppid andDelegate:self];**
NSString*utf8String =shareUrlStr;
NSString*title =shareTitleStr;
NSString*description =shareDetailStr;
NSString*previewImageUrl =shareImageStr;
QQApiNewsObject *newsObj = [QQApiNewsObject
objectWithURL:[NSURLURLWithString:utf8String]
title:title
description:description
previewImageURL:[NSURLURLWithString:previewImageUrl]];
newsObj.shareDestType = ShareDestTypeQQ;
req = [SendMessageToQQReq reqWithContent:newsObj];
//將內(nèi)容分享到qq
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//將內(nèi)容分享到qzone
//QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];
}