導讀
- 快速登錄方式大大簡化了用戶的注冊之苦,同時也擴展了APP的社交性,更易于分享和推廣,在登錄后都可以獲得用戶的唯一ID,只有APP后臺綁定這個ID,就等于用戶注冊了該APP一樣,用戶可以得到快速登陸帶來的方便.
- 基于iOS實現APP的第三方登陸之
QQ
和新浪微博
授權登錄,在開發中明顯能感覺到兩家SDK的差異和易用性,這里先贅述下接入第三方SDK時的一個基本的步驟: - 1,確定產品需求中需要這樣一個功能,如果QQ登錄.
- 2,找到相關的開放平臺,如QQ互聯平臺:http://connect.qq.com/;微博開放平臺:http://open.weibo.com/
- 3,注冊成功后創建自己的APP,填寫一堆基本信號后獲得一個App_Key等,就是你APP的唯一識別碼;
- 4,下載對應的SDK,并且閱讀其中的開發文檔或demo,通常看開發文檔比較直觀,如果看demo,有些SDK的demo簡直不忍直視;
- 5 ,嵌入SDK中對應功能,測試成功后提交第三方平臺審核,等審核通過后就可以正式接入第三方SDK的功能了;
- 6,完成所有功能后就提交AppStore審核吧,大概一周左右即可。
具體流程:
-
一,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,注冊并授權,注意授權這里會出現問題
```objc
_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,代碼如下:
```objc
- (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,如何獲取昵稱呢,文檔提供了這樣一個方法:
```objc
[_tencentOAuth getUserInfo];
```
上面返回類型是個BOOL值,很多朋友就郁悶了,這是什么情況,經過看demo,發現如果開發者調用了這個方法,如果上面這個方法成功則會實現下面協議TencentSessionDelegate里面的回調函數:
```objc
-(void)getUserInfoResponse:(APIResponse *)response {
// NSLog(@"respons:%@",response.jsonResponse);
self.name.text = [response.jsonResponse objectForKey:@"nickname"];
}
```
7 這樣就能得到我們想要的昵稱等信息,到這里就算完成了我們的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];
-
4 實現的協議為: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就說明登錄成功了。` * 5 登錄代碼: ```objc - (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做測試,等自己的申請成功后可替換再次調試.