iOS 第三方登錄之 QQ登錄


 

一. 首先需要下載騰訊qq登錄所需的庫,下載地址是http://open.qq.com/ 。

需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bundle.bundle,將兩者加入工程。

 

二.下面就來實現QQ第三方登錄

1.聲明屬性,且viewcontroller實現TencentSessionDelegate

@interface LoginViewController :UIViewController<TencentSessionDelegate>

@property (nonatomic,strong)TencentOAuth *tencentOAuth;

@property (nonatomic,strong)NSMutableArray* permission;

//點擊qq登錄

- (IBAction)touchQQLoginButton:(id)sender;

@end

2.iOS中,如果iphone沒有安裝QQ客戶端,當用qq進行第三方登錄時會提示要安裝qq,這樣會影響app上架,

所以,應該先檢測一下手機上時候安裝了qq,沒有安裝就需要隱藏qq的第三方登錄按鈕。

 

//判斷是否安裝了qq

self.tencentOAuth =  [[TencentOAuthalloc]initWithAppId:gQQidandDelegate:self];

BOOL isInstallQQ = [TencentOAuthiphoneQQInstalled];

if (isInstallQQ ==NO) {

    [self.QQButtonsetHidden:YES];

}

其中initWithAppId:gQQid中的gQQid,是申請的騰訊開放平台的appid。 

3.使用qq第三方登錄,大概需要三部:

1)獲取認證

2)獲取用戶信息

3)登錄

下面我們來單步分析

1)獲取認證。比如點擊了 使用qq登錄按鈕

 

#pragma mark ----------- 點擊qq登錄 ----------------

- (IBAction)touchQQLoginButton:(id)sender {

    self.tencentOAuth =  [[TencentOAuthalloc]initWithAppId:gQQidandDelegate:self];

    self.permission = [NSMutableArrayarrayWithObjects:@"get_user_info",@"get_simple_userinfo",nil];

    [self.tencentOAuthauthorize:self.permissioninSafari:NO];

}

 

登錄結束會調用delegate

 

#pragma mark --------- qq登錄狀態回調 ------

//登錄完成后,會調用TencentSessionDelegate中關於登錄的協議方法。

- (void)tencentDidLogin

{

    NSLog(@"qq登錄完成");

    if (_tencentOAuth.accessToken &&0 != [_tencentOAuth.accessTokenlength])

    {

        //  記錄登錄用戶的OpenID、Token以及過期時間

        _labelAccessToken.text = _tencentOAuth.accessToken;

       MyNSLog(@"token===%@",[_tencentOAuthaccessToken] );

       MyNSLog(@"openId===%@",[_tencentOAuthopenId]) ;//這個是用戶的唯一id,使用它來登錄自己的服務器

       MyNSLog(@"appid === %@",[_tencentOAuthappId]);

        [selfgetQQUserInfo];//自己實現的方法,得到用戶信息,見下一步說明。

    }

   else{

         _labelAccessToken.text = @"登錄不成功沒有獲取accesstoken";

    }

}

//非網絡錯誤導致登錄失敗:

-(void)tencentDidNotLogin:(BOOL)cancelled

{

    MyNSLog(@"非網絡錯誤導致登錄失敗");

   if (cancelled)

    {

       MyNSLog(@"用戶取消登錄操作");

    }

   else

    {

        

    }

}

//網絡錯誤導致登錄失敗:

-(void)tencentDidNotNetWork

{

    MyNSLog(@"網絡錯誤導致登錄失敗:");

}

 
2)獲取用戶信息 

 

#pragma mark ---------- 獲取qq用戶信息 ----

- (void)getQQUserInfo {

    if(![_tencentOAuthgetUserInfo]){

       MyNSLog(@"獲取qq用戶信息失敗");

    }

}

獲取用戶信息結束回調 

 

#pragma mark -------- qq用戶信息回調 -------

/**

 * Called when the get_user_info has response.

 */

- (void)getUserInfoResponse:(APIResponse*) response {

   if (response.retCode ==URLREQUEST_SUCCEED)

    {

        NSMutableString *str=[NSMutableStringstringWithFormat:@""];

       for (id keyin response.jsonResponse) {

            [strappendString: [NSStringstringWithFormat:@"%@:%@\n",key,[response.jsonResponseobjectForKey:key]]];

        }

       MyNSLog(@"%@",str);

       NSString* url = [[NSStringalloc]initWithString:[response.jsonResponseobjectForKey:@"figureurl_qq_2"]];

       NSString* nickname = [[NSStringalloc]initWithString:[response.jsonResponseobjectForKey:@"nickname"]];

       if (NO_VALUE(url) ||NO_VALUE(nickname)) {

            MyNSLog(@"獲取qq用戶信息失敗");

        }else{

           NSNumber* typeQQ = [NSNumbernumberWithInteger:1];

            [selflogin:self.openIDandNickname:nicknameandAvatar:url andType:typeQQ];//自己的登錄函數

        }

    }

   else

    {

        [selfshowHint:response.errorMsg];

    }

}

3) 登錄自己的服務器 

[self login:self.openID andNickname:nickname andAvatar:url andType:typeQQ];//自己的登錄函數

三.當從qq認證返回我們自己的app,需要在appdelegate中實現

 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    if ([url.host isEqualToString:@"qzapp"]) {

        return  [TencentOAuth HandleOpenURL:url];

    }

    return YES;

}

 

-(BOOL) application:(UIApplication *)application handleOpenURL:(NSURL *)url{

    

    if ([url.host isEqualToString:@"qzapp"]) {

        return  [TencentOAuth HandleOpenURL:url];

    }

}


注意事項:

1. 需要特別注意使用第三方登錄對審核帶來的影響,如果審核人員的設備未安裝QQ,如果是跳轉到下載微信和QQ的頁面,可能會被拒絕。
2. app發布前,只有添加進測試帳號的帳號才能登錄成功,否則會報錯。
3. 開發完成后需要提交審核,否則只能允許100個測試賬號進行登錄。

 

文章如有錯誤,請指出,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM