本文授權轉載,作者:夏天然後(簡書)
前言: 首先你要明白, 所謂的第三方登錄,就是利用用戶在第三方平台上已有的賬號來快速完成自己應用的登錄或者注冊的功能。而這裡的第三方平台,一般是已經有大量用戶的平台,如國內的新浪微博、QQ空間,微信,外國的Facebook、twitter等等。第三方登錄不是一個具體的接口,而是一種思想或者一套步驟。這種集成三方的東西, 都非常簡單,可能會有坑, 填上就好, 這篇文章以微博為例, 其實都是一樣的. 步驟或繁或簡單, 習慣就好。
1. 首先在微博開放平台注冊成為開發者http://open.weibo.com
2. 創建應用
3. 完善應用信息, 這裡需要注意的是Bundle ID需要與應用一致, 同時記錄appKey 項目中會用到
4. 在應用信息-高級信息中
回調地址
與上方的保持一致---這段代碼後面後使用到
5. 填寫URL Types
URL Types
6. 配置info.plist同時加入白名單
info.plist
sinaweibohdsinaweiboweibosdkweibosdk2.5
7. 導入SDK.
7.1 使用cocoapods你可以這樣
pod "WeiboSDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"
7.2 或者直接下載拖入工程
8. 代碼
// AppDelegate中 #import #define WB_iOS_Key @"" @interface AppDelegate ()/** * 1. 設置WeiboSDK的調試模式 * 2. 注冊 */ [WeiboSDK enableDebugMode:YES]; [WeiboSDK registerApp:WB_iOS_Key]; #pragma mark - WeiboSDKDelegate - (void)didReceiveWeiboRequest:(WBBaseRequest *)request { } // 根據自己的需求寫回調 // 這是微博Demo提供的代碼 - (void)didReceiveWeiboResponse:(WBBaseResponse *)response { if ([response isKindOfClass:WBSendMessageToWeiboResponse.class]) { NSString *title = NSLocalizedString(@"發送結果", nil); NSString *message = [NSString stringWithFormat:@"%@: %d\\n%@: %@\\n%@: %@", NSLocalizedString(@"響應狀態", nil), (int)response.statusCode, NSLocalizedString(@"響應UserInfo數據", nil), response.userInfo, NSLocalizedString(@"原請求UserInfo數據", nil),response.requestUserInfo]; WBSendMessageToWeiboResponse* sendMessageToWeiboResponse = (WBSendMessageToWeiboResponse*)response; NSString* accessToken = [sendMessageToWeiboResponse.authResponse accessToken]; if (accessToken) { self.wbtoken = accessToken; } NSString* userID = [sendMessageToWeiboResponse.authResponse userID]; if (userID) { self.wbCurrentUserID = userID; } } else if ([response isKindOfClass:WBAuthorizeResponse.class]) { NSString *title = NSLocalizedString(@"認證結果", nil); NSString *message = [NSString stringWithFormat:@"%@: %d\\nresponse.userId: %@\\nresponse.accessToken: %@\\n%@: %@\\n%@: %@", NSLocalizedString(@"響應狀態", nil), (int)response.statusCode,[(WBAuthorizeResponse *)response userID], [(WBAuthorizeResponse *)response accessToken], NSLocalizedString(@"響應UserInfo數據", nil), response.userInfo, NSLocalizedString(@"原請求UserInfo數據", nil), response.requestUserInfo]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:NSLocalizedString(@"確定", nil) otherButtonTitles:nil]; self.wbtoken = [(WBAuthorizeResponse *)response accessToken]; self.wbCurrentUserID = [(WBAuthorizeResponse *)response userID]; self.wbRefreshToken = [(WBAuthorizeResponse *)response refreshToken]; [alert show]; } } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [WeiboSDK handleOpenURL:url delegate:self]; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [WeiboSDK handleOpenURL:url delegate:self ]; }
9. 寫個登陸按鈕登陸
- (void)loginClick { [[[[UIApplication sharedApplication] delegate] window] makeKeyWindow]; WBAuthorizeRequest *request = [WBAuthorizeRequest request]; // 前面提到的 request.redirectURI = kRedirectURI; request.scope = @"all"; request.userInfo = @{@"SSO_From": @"SendMessageToWeiboViewController", @"Other_Info_1": [NSNumber numberWithInt:123], @"Other_Info_2": @[@"obj1", @"obj2"], @"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}}; [WeiboSDK sendRequest:request]; }
10. 完成圖- 請繼續往下看
webView
客戶端
result.png
狀態0 代表成功. 如果回憶沒有錯基本就成功了. O.-
11. 你的應用是否具備獨立賬戶系統?什麼意思呢? 就是自帶注冊登陸功能不? 一般都是有自己的用戶系統的.
基本就是要數據,不要功能, 使用第三方登錄只是為了擁有更多用戶, 大致的思路你可以這樣理解
12. 解釋
1、用戶觸發第三方登錄事件
2、請求授權用戶的資料(這個過程中可能涉及授權操作)
3、如果回調成功代入你應用的Login流程
4、否則錯誤進行錯誤處理
5、Login時客戶端發送用戶資料中的用戶ID給服務端
6、服務端判定用戶是已注冊用戶,則引導用戶進入系統,否則返回特定錯誤碼。