基於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]; //授權
如果你寫成這樣,你會發現始終登錄不了,提示權限不夠,非常坑爹,正確授權代碼如上面的寫法,切記
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];
-(void)getUserInfoResponse:(APIResponse *)response { // NSLog(@"respons:%@",response.jsonResponse); self.name.text = [response.jsonResponse objectForKey:@"nickname"]; }
二,新浪微博登錄授權開發:
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]; }
評價:兩個平台接入後實現功能都是非常的豐富,但是從開發者角度來說,QQ登錄授權方式相比比較簡單,集成測試費時間較少,但是demo代碼非常難看懂,甚至官方文檔有代碼誤導,讓調試異常困難,而新浪微博登錄授權demo代碼異常簡潔明了,非常容易理解,在這代碼書寫方面,新浪微博的開發者勝過QQ的開發者好幾條街,但是新浪微博的登錄成功回調寫的比較落後,需要在AppDelegate裡面獲取,沒有QQ回調方便,而且新浪登錄授權綁定了Bundle identifier,這裡就讓人非常的費解,耗時測試非常不爽,兩家風格各異吧,但是總體來說還算順利,當然了如果不想單獨集成兩家的登錄授權,可推薦百度開發平台去集成他們的登錄SDK,這個SDK集成了各大主流平台,如QQ,新浪微博,人人網等。
這裡是成功後的截圖:
後記:這裡只是為同樣開發的朋友們提供一點筆者開發中遇到的問題,如需QQ和新浪微博授權登錄的demo代碼,可發郵件給我:[email protected],進一步討論。