簡單-搜狗三方登錄Sdk接入

搜狗 Passport iOS SDK 是搜狗為開發者提供的第三方單點登錄和搜狗賬戶注冊登錄服務。本版本提供的第三方SSO登錄包括QQ和新浪微博。最新版本2.2.0在該基礎上增加了QQ好友分享、QQ空間分享、微信好友分享、微信朋友圈分享和微博分享。其中,QQ分享和微信分享必須安裝客戶端,而微博分享可以通過webview方式分享也可以在客戶端進行分享。

文檔:updwiki.sogou-inc.com/display/Passport/2.3.4+iOS(updvisitor)

接入sdk后,用戶可以用已有的QQ/新浪微博/Sogou賬號登錄應用,后臺接入搜狗passport體系,返回passport賬戶體系唯一用戶標識及登錄態。這樣幫助應用統一維護了賬號體系,也簡潔易用地擴展了用戶群。以下是Passport iOS SDK V2.2.0 提供的功能:

l? 支持QQ/新浪微博/微信賬號sso;

l? 支持sogou賬號登錄(提供登錄界面/自定制登錄界面);

l? 支持sogou賬號注冊(提供注冊界面/自定制注冊界面);

l? 支持sogou賬號登錄(HTML5頁面);

l? 支持sogou賬號注冊(HTML5頁面);

l? 獲取sgid;

l? 獲得用戶信息;

l? 登出;

l? 判斷是否支持sso;

l? 獲取當前登錄平臺;

l? 獲取當前sdk版本號;

l? 切換線上/測試環境(默認線上環境,測試環境僅用于調試)。

|? 判斷微博、微信、QQ客戶端是否安裝;

|? 支持微信好友、朋友圈分享;

|? 支持QQ好友分享;

支持的第三方分享內容:微信和QQ只支持客戶端分享,微博有無客戶端均可以分享,只是內容限制不一樣。

1.2 相關概念SSO:SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。client_id:搜狗passport分配給公司內部每個應用的唯一標識,一般與client_secret配合使用。appid:第三方應用分配給開發者的應用id。sgid:可以理解為搜狗passport返回的標志某一賬戶的初始登錄態。isthird: 0表示去搜狗通行證個人信息,1表示獲取第三方個人信息登錄態:根據sgid得到的能確定用戶唯一性的,比如從sgid計算得到的類token字符串。(client id及client secret是passport serve端分配給應用的用來唯一標識應用的id和密鑰,接入應用方需要先向搜狗passport申請client id和client secret。)第二章.使用須知1、開始使用Sogou Passport iOS SDK v2.0版本之前,必須完成步驟2.1、步驟2.2。2、對于搜狗賬號注冊登錄,提供了sdk自帶界面和用戶自己定制界面的接口。其中帶界面接口在SogouPassport.h里,需要用戶自定義界面的接口在SGAccountInterface.h里。2.1 申請應用client_id和client_secretpassport給每個應用分配相應的client_id和client_secret。2.2 申請第三方應用的appid如果需要實現第三方SSO登錄,用戶必須自己到第三方應用開放平臺創建應用獲得相應的appid和密鑰。然后跟相應的client_id綁定(passport來做)相關請看本文檔4.7部分2.3實現第三方SDK其他功能(目前2.2.0版本的SDK已集成第三方分享,該部分文檔只對2.2.0以前的版本有效,若接的是2.2.0版本,跳過)注意:目前passport SDK還沒集成分享功能,這部分是提供使用passport SDK同時想實現第三方分享功能的用戶參考。只需要登錄功能的不需要看這部分。假設想使用第三方如新浪微博的分享功能,本版本尚未提供此功能必須自己添加新浪微博SDK里的WeiboSDK.h文件,需要注意的是,不要再添加libWeibosdk.a,否則造成錯誤。同時注意,調起QQ/微博客戶端進行分享的功能跟SSO登錄是互相獨立的。以下是示例代碼幫助解決如果處理分享的回調:#import "QQApiInterface.h"#import "WeiboSDK.h"@interface AppDelegate : UIResponder@implementation AppDelegate

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

return [SogouPassport sharedInstance handleOpenURL:url]||QQApiInterface handleOpenURL:url delegate:self||WeiboSDK handleOpenURL:url delegate:self;

}

(void)onReq:(QQBaseReq *)req{

}

/**

處理來至QQ的響應

*/

(void)onResp:(QQBaseResp *)resp{

//回調處理

}

-(void)isOnlineResponse:(NSDictionary *)response{

}

//微博回調

(void)didReceiveWeiboRequest:(WBBaseRequest *)request{

}

(void)didReceiveWeiboResponse:(WBBaseResponse *)response

{

//回調處理

}

第三章.使用說明

3.1 導入Sogou Passport SDK文件

添加Sogou Passport SDK及其他框架。

(1)? 添加SDK文件夾到工程目錄,包括libSogouPassport.a,.h頭文件和SogouPassport.bundle和TencentOpenApi_IOS_Bundle.bundle資源文件。 若使用2.2.0版本,則還需要添加第三方頭文件和微博資源文件,如下右圖。

(左圖,2.2.0以前版本添加庫文件、頭文件和資源文件后的項目結構;右圖,2.2.0版本Demo添加庫文件、頭文件和資源文件以后的項目結構)

(2)添加使用SDK需要的庫文件,添加完如圖所示: (SGPProcucts文件夾里的ReadMe.txt文件記錄了需要添加的庫)。若接分享則下圖中還需要添加libz.dylib(參見SPShareDemo)Xcode7下對應的庫文件后綴為:.tbd

(3)定義頭文件搜索靜態庫目錄

設置庫文件相對目錄,如圖所示:

(4) 為適配IOS 9,請在Xcode 7下進行編譯,并在項目的info.plist文件中添加如下圖所示的配置

3.2 初始化Sogou Passport SDK

必須調用以下接口設置應用的id和key完成sdk初始化

-(void)setClient_id:(NSNumber *)clientId

client_secret:(NSString *)clientSecret;

client_id: 搜狗passport分配給公司內部每個應用的標識

client_secret: 客戶端密鑰

3.3 注冊第三方應用

若想實現QQ或者新浪微博的SSO登錄,必須先到QQ或者新浪微博開發平臺創建第三方應用,獲得相應的appid(或appkey)

調用登錄等接口前必須先調用以下接口注冊第三方應用:

-(void)registerProvider:(SGALoginType)provider

appId:(NSString *)appId

redirectUri:(NSString *)redirectUri;

注意:如果沒這步操作,將不采用SSO,將采用webview的登錄方式。

3.4 配置工程URL Scheme

在工程的info的URL Type中,增加url定義,用來定義回調接口,如下所示:

若是在QQ開發平臺申請的appid,則URL Scheme為:tencent+appid的形式;若是在新浪微博開發平臺申請的appkey,則URL Scheme為:wb+appkey的形式。微信開發平臺申請的appkey,則URL Scheme為:wx+appkey的形式。

3.5重寫AppDelegate的openURL和handleOpenURL方法

在AppDelegate.m里#import "SogouPassport.h" 然后重寫openURL方法,如下:

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

return [[SogouPassport sharedInstance] handleOpenURL:url];

}

第四章.接口說明

下面介紹幾個主要接口,及其簡要使用流程。詳細接口見SDK提供的接口文件。其中,分享的接口功能及其參數說明在SGAShareObject.h、SGAShareManagerFactory.h和SGAShareManager.h文件里進行了詳細說明。

4.1 應用初始化

-(void)setClient_id:(NSNumber *)clientId

client_secret:(NSString *)clientSecret;

client_id: 搜狗passport分配給公司內部每個應用的標識

client_secret: 客戶端密鑰

4.2 注冊第三方應用

-(void)registerProvider:(SGALoginType)provider

appId:(NSString *)appId

redirectUri:(NSString *)redirectUri;

provider: 用戶登錄平臺

appId: 在第三方社會化開發平臺注冊應用獲取的應用id

redirectUri: 在第三方社會化開發平臺注冊應用設置的授權回調地址,這個參數可為nil

注意!該接口在2.1版本廢棄 新的接口如下:

-(void)setWeiboWapAppId:(NSString *)wAppId

weiboSSOAppId:(NSString *)sAppId

redirectUri:(NSString *)redirectUri;

-(void)setQQWapAppId:(NSString *)wAppId QQSSOAppId:(NSString *)sAppId;

-(void)setWeixinWapAppId:(NSString *)wAppId weixinSSOAppId:(NSString *)sAppId;

-(void)setBaiduWapAppId:(NSString *)wAppId baiduSSOAppId:(NSString *)sAppId;

-(void)setRenrenWapAppId:(NSString *)wAppId renrenSSOAppId:(NSString *)sAppId;;

-(void)useSogouPassportAppid:(BOOL)isSogouAppid;

接口說明:

應用自己傳第三方的appid,包括網頁端和移動端,在第三方開發平臺如騰訊開放平臺上創建應用申請appid時一般是分開申請網頁應用和移動的。

升級這個接口主要考慮 應用可以更加靈活地定制授權方式。

EX:若應用初始化sdk時? [[SogouPassport sharedInstance] setQQWapAppId:nil QQSSOAppId:kQQAuthAppKey];? 由于QQWapAppId為nil,那webview登錄時就會提示授權給搜狗或者搜狗通行證;

反之,若QQWapAppId為應用自己申請的網頁應用appid時,登錄時就會提示授權給該應用。

4.3 用戶登錄

- (void)loginWithView:(UIView *)view

provider:(SGALoginType)provider

isThird:(NSNumber *)isthird

loginSuccessBlock:(void()(NSString *sgid,SGAUserInfo *userInfo))loginSuccessBlock loginFailBlock:(void ()(NSError *error))loginFailBlock;

provider: 用戶登錄平臺(如下方所示枚舉類型)

isthird: 0表示去搜狗通行證個人信息,1表示獲取第三方個人信息

//登錄平臺枚舉

typedef NS_ENUM(NSInteger, SGALoginType) {

SGALoginTypeSogou=1,? ? // 搜狗

SGALoginTypeSinaWeibo,? // 微博

SGALoginTypeQQ,? ? ? ? // QQ

SGALoginTypeRenren,? ? // 人人網

SGALoginTypeBaidu? ? ? // 百度

SGALoginTypeWeChat? ? //微信

};

登錄成功返回結果信息:

參數名 是否必須

參數說明

sgid

是 搜狗passport返回的標志某一賬戶的初始登錄態

uniqname

QQ/微博/sogou passport昵稱

gender

QQ/微博/sogou passport性別,int型,0:女;1:男

large_avatar

QQ/微博/sogou passport大圖 ,string類型,頭像的URL

mid_avatar

QQ/微博/sogou passport中圖 ,string類型,頭像的URL

tiny_avatar

QQ/微博/sogou passport小圖 ,string類型,頭像的URL

4.4 用戶登出

- (void)logoutWithSuccessBlock:(void(^)(NSString *status))logoutSuccessBlock

logoutFailBlock:(void (^)(NSError *error))logoutFailBlock;

4.5 搜狗賬號(手機號)注冊

- (void) regist:(UIView *)view

successBlock:(void(^)(NSString *sgid, SGAUserInfo *userInfo))registerSuccessBlock

failBlock:(void (^)(NSError *error))registerFailBlock;

4.6 其他接口

1、獲取sgid

-(NSString *)getSgid;

2、獲取用戶信息

-(SGAUserInfo *)getUserInfo;

3、獲取當前sdk版本號

- (NSString *) getCurrentVersion;

4、獲取當前登錄平臺

- (NSString *)getCurrentLoginType;

5、切換測試環境的屬性isDevMode (默認是線上環境)

[SogouPassport sharedInstance].isDevMode=YES;//即為開發模式

此時應該wifi連接內網環境才能進行測試

6、搜狗賬號登錄換膚

-(void)setSogouLoginSkin:(SGASkinType)skin;

提供了兩種皮膚,紅色(SGASkinTypeRed)和綠色(SGASkinTypeGreen)風格

7、搜狗賬號登錄頁面是否顯示QQ登錄圖標

[SogouPassport sharedInstance].showQQLogin = NO;//即為不顯示QQ圖標

4.7 SGAccountInterface.h 接口說明

//設置應用id和key

-(void)setClient_id:(NSNumber *)clientId

client_secret:(NSString *)clientSecret;

//用戶登錄

- (void)loginWithAccount:(NSString *)account

password:(NSString *)password

token:(NSString *)token

captcha:(NSString *)captcha

success:(void(^)(NSString *sgid,SGAUserInfo *userInfo))success

fail:(void (^)(NSError *error))fail;

//手機號注冊

-(void)registerAccount:( NSString *)account

password:(NSString *)password

provider:(SGARegisterType)provider

authKey:(NSString *)authKey

success:(void (^)(NSString *sgid,SGAUserInfo *userInfo))success

fail:(void (^)(NSError *))fail;

//注冊時獲取驗證碼

- (void)getAuthKey:(NSString *)phoneNumber

success:(void(^)(NSDictionary *result))success

fail:(void(^)(NSError *error))fail;

//注冊時驗證賬號是否已存在

- (void)checkUserName:(NSString *)userName

success:(void (^)(NSDictionary *result))success

fail:(void (^)(NSError *error))fail;

//獲取驗證碼 ,登錄時 用戶名密碼錯誤太頻繁,需要驗證碼校驗

- (void)getLoginVerifyCore:(NSString *)token

success:(void (^)(NSData *verifyCoreData))success

fail:(void(^)(NSError *error))fail;

//登出

-(void)logoutWithSgid:(NSString *)sgid

client_id:(NSNumber *)client_id

client_serect:(NSString *)client_serect

instance_id:(NSString *)instance_id

successBlock:(void (^)(NSString *status))successBlock

failBlock:(void (^)(NSError *error))failBlock;

//判斷是否支持SSO登錄

-(BOOL)enableSSO:(SGALoginType)provider;

第五章.返回碼(錯誤碼)說明

常用返回碼與錯誤信息的對照,如下所示:

公共錯誤碼及對應信息:

返回碼 含義說明

503 服務器過載或維護

500 服務器錯誤,無法處理請求

408 請求超時

405 請求method有誤

404 所請求資源未被找到

400 語法有誤|參數有誤---無法被服務器理解

401 該請求需要用戶認證

-15 HTTP請求報出ConnectTimeOutException

-14 HTTP請求報出ClientProtocolException

-13 HTTP請求報出IOEXCEPTION

-6 返回的請求結果格式不對

-5 解析HttpResponse為json失敗(內容不為json格式)

-4 獲取結果信息data部分失敗|data==null

-3 獲取HttpResponse失敗|HttpResponse為null

-2 沒有網絡連接

登錄錯誤碼及對應信息:

返回碼 含義說明

-1 用戶取消操作

-30001 由于網絡質量抖動引起。

100030 用戶未對應用進行授權。

100014 QQ登錄的access_token過期,目前支持的access_token有效期為三個月。

100015 QQ登錄的access_token失效。要重新走登錄流程,獲取新的access_token。

產生該錯誤有兩個原因:

用戶在QQ空間里取消了對應用的授權,會導致當前保存到應用里的AccessToken被廢除掉。

用戶在不同的設備上進行了QQ登錄,導致在原來設備上的保存的AccessToken被廢除掉。

100016 QQ登錄的access_token校驗失敗。

100017 新浪微博登錄簽名不正確

100018 新浪微博登錄授權異常

10001 系統級錯誤

10002 請求passport server時參數錯誤,請輸入必填的參數或參數驗證失敗

30016 用戶取消授權

10003 接口code簽名錯誤或請求超時

10010 client_id不存在

20256 SSOAfterauth失敗

20257 頻繁登陸賬號

20221 驗證碼錯誤

20206 用戶名或密碼錯誤

請求用戶信息錯誤碼及對應信息:

返回碼 含義說明

-2001 用戶尚未登錄

-2002 無用戶信息

以上個別部分的錯誤碼分得比較細,是因為考慮到初期版本,后面版本可能會歸納減少錯誤碼種類。另外欲了解QQ登錄了的詳細全部錯誤碼,請參看QQ的+《公共返回碼說明》+文檔。

|? 支持QQ空間、QQ好友分享

|? 支持微博客戶端分享

|? 支持微博webview方式分享

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容