你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 基於第三方QQ授權登錄和新浪微博授權登錄的iOS代碼分析

基於第三方QQ授權登錄和新浪微博授權登錄的iOS代碼分析

編輯:IOS開發綜合

基於iOS實現APP的第三方登陸之QQ和新浪微博授權,在開發中明顯能感覺到兩家SDK的差異和易用性,這裡先贅述下接入第三方SDK時的一個基本的步驟:

1,確定用需中需要這樣一個功能,如果QQ登錄,似乎主流了,APP注冊標配啊;

2,找到相關的開放平台,如QQ互聯平台,http://connect.qq.com/;

3,注冊成功後創建自己的APP,填寫一堆基本信號後獲得一個App_Key,就是你APP的唯一識別碼;

3,下載對應的SDK,並且閱讀其中的開發文檔或demo,通常看開發文檔比較直觀,如果看demo,有些SDK的demo簡直不忍直視;

4,嵌入SDK中對應功能,測試成功後提交第三方平台審核,等審核通過後就可以正式接入第三方SDK的功能了;

5,完成所有功能後就提交AppStore審核吧,大概一周左右即可。


呃,說了這麼多,讓我們來進入QQ登錄和新浪微博登錄授權具體操作,這種簡便的登錄方式大大簡化了用戶的注冊之苦,同時也擴展了APP的社交性,更易於分享和推廣,在登錄後都可以獲得用戶的唯一ID,只有APP後台綁定這個ID,就等於用戶注冊了該APP一樣,似乎變成了各大APP的標配登錄模式,吐槽,似乎抽屜式設計慢慢的又變回TabBar式了,具體原因可參考網絡資源。


一,QQ登錄授權開發:

1,按照開發文檔導入SDK,然後把注冊成功後獲取到的Key加入到Url Schemes中,例如:tencent1101737816,注意這些文檔寫的很清楚;

2,在AppDelegate.m中實現下面方法,注意,直接復制代碼,兩者寫其一即可,當然了別忘了引入頭文件,這是用作返回APP時候用的回調函數

- (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];
}
3,注冊並授權,注意授權這裡會出現問題

_tencentOAuth = [[TencentOAuth alloc] initWithAppId:kQQ_KEY andDelegate:self]; //注冊

 NSArray *_permissions = [NSArray arrayWithObjects:kOPEN_PERMISSION_GET_INFO, kOPEN_PERMISSION_GET_USER_INFO, kOPEN_PERMISSION_GET_SIMPLE_USER_INFO, nil];
    [_tencentOAuth authorize:_permissions inSafari:NO]; //授權

注意:在官方文檔中提到授權代碼是: _permissions = [[NSArray arrayWithObjects:@"get_user_info", @"add_t", nil] retain]; //官方授權代碼

如果你寫成這樣,你會發現始終登錄不了,提示權限不夠,非常坑爹,正確授權代碼如上面的寫法,切記

4,實現登錄成功與否的回調函數,實現協議TencentSessionDelegate,代碼如下:

- (void)tencentDidLogin
{
    _labelTitle.text = @"登錄完成";
    
    if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]){
        //  記錄登錄用戶的OpenID、Token以及過期時間
        _labelAccessToken.text = _tencentOAuth.accessToken;
        
    }else{
        _labelAccessToken.text = @"登錄不成功 沒有獲取accesstoken";
    }
}

-(void)tencentDidNotLogin:(BOOL)cancelled
{
    if (cancelled){
        _labelTitle.text = @"用戶取消登錄";
	}else{
        _labelTitle.text = @"登錄失敗";
	}
}

-(void)tencentDidNotNetWork
{
	_labelTitle.text=@"無網絡連接,請設置網絡";
}


5,如果代碼能走到登錄完成這裡,並且獲得了accesstoken,那說明我們的登錄流程就走完了,剩下的舊是獲取用戶具體的信息了,如昵稱,城市等等;

6,如何獲取昵稱呢,文檔提供了這樣一個方法

 [_tencentOAuth getUserInfo];

但是返回類型是個BOOL類似,很多朋友就郁悶了,這是什麼情況,經過看代碼,發現如果開發者調用了這個方法,如果成功則會實現下面協議TencentSessionDelegate裡面的回調函數:

-(void)getUserInfoResponse:(APIResponse *)response
{
 //   NSLog(@"respons:%@",response.jsonResponse);
    
    self.name.text = [response.jsonResponse objectForKey:@"nickname"];
}


這樣就能得到我們想要的昵稱等信息,到這裡就算完成了我們的QQ登錄授權了,剩下的就是發給後台這些登錄信息,並且保持授權成功後的token等,看官方文檔說明。


二,新浪微博登錄授權開發:

1,同樣和QQ一樣,配置Url Schemes,如:wb2045436852,然後根據官方文檔接入SDK等信息;

2,同樣在AppDelegate.m 中實現下面回調:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
}
3,關於新浪微博的成功登錄回調是寫在該類中來實現,因為這裡寫入了self,如果你需要到別的類中實現,可在這裡做修改即可

[WeiboSDK handleOpenURL:url delegate:self];
實現的協議為:WeiboSDKDelegate,協議方法:

-(void)didReceiveWeiboResponse:(WBBaseResponse *)response
{
    if ([response isKindOfClass:WBAuthorizeResponse.class])
    {      
        if ((int)response.statusCode == 0) {
            NSDictionary *dic = @{@"userID":[(WBAuthorizeResponse *)response userID],
                                  @"accessToken" :[(WBAuthorizeResponse *)response accessToken]};        }       
    }
}
如果能得到這個userID,token就說明登錄成功了。

4,登錄代碼:

- (IBAction)sinaLogin:(id)sender
{
    [WeiboSDK enableDebugMode:YES];
    [WeiboSDK registerApp:kSINA_KEY];

    WBAuthorizeRequest *request = [WBAuthorizeRequest request];
    request.redirectURI = kRedirectURI;
    request.scope = @"all";
    request.userInfo = @{@"myKey": @"myValue"};
    [WeiboSDK sendRequest:request];
}

這裡包含了注冊,打開調試log,還包括了回調地址,用戶自定義提交的info等,如果登錄後能正確回調AppDelegate裡面的接收函數,說明我們的新娘微博登錄也就成功了,剩下的就是保存相關信息和提交給後台了,值得注意的是如果你的Bundle identifier要和申請key時候一樣,不然就修改你的demo的Bundle identifier 為新浪微博官方demo的Bundle identifier,並用它的key做測試,等自己的申請成功後可替換再次調試;


評價:兩個平台接入後實現功能都是非常的豐富,但是從開發者角度來說,QQ登錄授權方式相比比較簡單,集成測試費時間較少,但是demo代碼非常難看懂,甚至官方文檔有代碼誤導,讓調試異常困難,而新浪微博登錄授權demo代碼異常簡潔明了,非常容易理解,在這代碼書寫方面,新浪微博的開發者勝過QQ的開發者好幾條街,但是新浪微博的登錄成功回調寫的比較落後,需要在AppDelegate裡面獲取,沒有QQ回調方便,而且新浪登錄授權綁定了Bundle identifier,這裡就讓人非常的費解,耗時測試非常不爽,兩家風格各異吧,但是總體來說還算順利,當然了如果不想單獨集成兩家的登錄授權,可推薦百度開發平台去集成他們的登錄SDK,這個SDK集成了各大主流平台,如QQ,新浪微博,人人網等。

這裡是成功後的截圖:


後記:這裡只是為同樣開發的朋友們提供一點筆者開發中遇到的問題,如需QQ和新浪微博授權登錄的demo代碼,可發郵件給我:[email protected],進一步討論。



  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved