搜狗 Passport iOS SDK 是搜狗為開發(fā)者提供的第三方單點(diǎn)登錄和搜狗賬戶注冊(cè)登錄服務(wù)。本版本提供的第三方SSO登錄包括QQ和新浪微博。最新版本2.2.0在該基礎(chǔ)上增加了QQ好友分享、QQ空間分享、微信好友分享、微信朋友圈分享和微博分享。其中,QQ分享和微信分享必須安裝客戶端,而微博分享可以通過webview方式分享也可以在客戶端進(jìn)行分享。
文檔:updwiki.sogou-inc.com/display/Passport/2.3.4+iOS(updvisitor)
接入sdk后,用戶可以用已有的QQ/新浪微博/Sogou賬號(hào)登錄應(yīng)用,后臺(tái)接入搜狗passport體系,返回passport賬戶體系唯一用戶標(biāo)識(shí)及登錄態(tài)。這樣幫助應(yīng)用統(tǒng)一維護(hù)了賬號(hào)體系,也簡潔易用地?cái)U(kuò)展了用戶群。以下是Passport iOS SDK V2.2.0 提供的功能:
l? 支持QQ/新浪微博/微信賬號(hào)sso;
l? 支持sogou賬號(hào)登錄(提供登錄界面/自定制登錄界面);
l? 支持sogou賬號(hào)注冊(cè)(提供注冊(cè)界面/自定制注冊(cè)界面);
l? 支持sogou賬號(hào)登錄(HTML5頁面);
l? 支持sogou賬號(hào)注冊(cè)(HTML5頁面);
l? 獲取sgid;
l? 獲得用戶信息;
l? 登出;
l? 判斷是否支持sso;
l? 獲取當(dāng)前登錄平臺(tái);
l? 獲取當(dāng)前sdk版本號(hào);
l? 切換線上/測(cè)試環(huán)境(默認(rèn)線上環(huán)境,測(cè)試環(huán)境僅用于調(diào)試)。
|? 判斷微博、微信、QQ客戶端是否安裝;
|? 支持微信好友、朋友圈分享;
|? 支持QQ好友分享;
支持的第三方分享內(nèi)容:微信和QQ只支持客戶端分享,微博有無客戶端均可以分享,只是內(nèi)容限制不一樣。
1.2 相關(guān)概念SSO:SSO是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。client_id:搜狗passport分配給公司內(nèi)部每個(gè)應(yīng)用的唯一標(biāo)識(shí),一般與client_secret配合使用。appid:第三方應(yīng)用分配給開發(fā)者的應(yīng)用id。sgid:可以理解為搜狗passport返回的標(biāo)志某一賬戶的初始登錄態(tài)。isthird: 0表示去搜狗通行證個(gè)人信息,1表示獲取第三方個(gè)人信息登錄態(tài):根據(jù)sgid得到的能確定用戶唯一性的,比如從sgid計(jì)算得到的類token字符串。(client id及client secret是passport serve端分配給應(yīng)用的用來唯一標(biāo)識(shí)應(yīng)用的id和密鑰,接入應(yīng)用方需要先向搜狗passport申請(qǐng)client id和client secret。)第二章.使用須知1、開始使用Sogou Passport iOS SDK v2.0版本之前,必須完成步驟2.1、步驟2.2。2、對(duì)于搜狗賬號(hào)注冊(cè)登錄,提供了sdk自帶界面和用戶自己定制界面的接口。其中帶界面接口在SogouPassport.h里,需要用戶自定義界面的接口在SGAccountInterface.h里。2.1 申請(qǐng)應(yīng)用client_id和client_secretpassport給每個(gè)應(yīng)用分配相應(yīng)的client_id和client_secret。2.2 申請(qǐng)第三方應(yīng)用的appid如果需要實(shí)現(xiàn)第三方SSO登錄,用戶必須自己到第三方應(yīng)用開放平臺(tái)創(chuàng)建應(yīng)用獲得相應(yīng)的appid和密鑰。然后跟相應(yīng)的client_id綁定(passport來做)相關(guān)請(qǐng)看本文檔4.7部分2.3實(shí)現(xiàn)第三方SDK其他功能(目前2.2.0版本的SDK已集成第三方分享,該部分文檔只對(duì)2.2.0以前的版本有效,若接的是2.2.0版本,跳過)注意:目前passport SDK還沒集成分享功能,這部分是提供使用passport SDK同時(shí)想實(shí)現(xiàn)第三方分享功能的用戶參考。只需要登錄功能的不需要看這部分。假設(shè)想使用第三方如新浪微博的分享功能,本版本尚未提供此功能必須自己添加新浪微博SDK里的WeiboSDK.h文件,需要注意的是,不要再添加libWeibosdk.a,否則造成錯(cuò)誤。同時(shí)注意,調(diào)起QQ/微博客戶端進(jìn)行分享的功能跟SSO登錄是互相獨(dú)立的。以下是示例代碼幫助解決如果處理分享的回調(diào):#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的響應(yīng)
*/
(void)onResp:(QQBaseResp *)resp{
//回調(diào)處理
}
-(void)isOnlineResponse:(NSDictionary *)response{
}
//微博回調(diào)
(void)didReceiveWeiboRequest:(WBBaseRequest *)request{
}
(void)didReceiveWeiboResponse:(WBBaseResponse *)response
{
//回調(diào)處理
}
第三章.使用說明
3.1 導(dǎo)入Sogou Passport SDK文件
添加Sogou Passport SDK及其他框架。
(1)? 添加SDK文件夾到工程目錄,包括libSogouPassport.a,.h頭文件和SogouPassport.bundle和TencentOpenApi_IOS_Bundle.bundle資源文件。 若使用2.2.0版本,則還需要添加第三方頭文件和微博資源文件,如下右圖。
(左圖,2.2.0以前版本添加庫文件、頭文件和資源文件后的項(xiàng)目結(jié)構(gòu);右圖,2.2.0版本Demo添加庫文件、頭文件和資源文件以后的項(xiàng)目結(jié)構(gòu))
(2)添加使用SDK需要的庫文件,添加完如圖所示: (SGPProcucts文件夾里的ReadMe.txt文件記錄了需要添加的庫)。若接分享則下圖中還需要添加libz.dylib(參見SPShareDemo)Xcode7下對(duì)應(yīng)的庫文件后綴為:.tbd
(3)定義頭文件搜索靜態(tài)庫目錄
設(shè)置庫文件相對(duì)目錄,如圖所示:
(4) 為適配IOS 9,請(qǐng)?jiān)赬code 7下進(jìn)行編譯,并在項(xiàng)目的info.plist文件中添加如下圖所示的配置
3.2 初始化Sogou Passport SDK
必須調(diào)用以下接口設(shè)置應(yīng)用的id和key完成sdk初始化
-(void)setClient_id:(NSNumber *)clientId
client_secret:(NSString *)clientSecret;
client_id: 搜狗passport分配給公司內(nèi)部每個(gè)應(yīng)用的標(biāo)識(shí)
client_secret: 客戶端密鑰
3.3 注冊(cè)第三方應(yīng)用
若想實(shí)現(xiàn)QQ或者新浪微博的SSO登錄,必須先到QQ或者新浪微博開發(fā)平臺(tái)創(chuàng)建第三方應(yīng)用,獲得相應(yīng)的appid(或appkey)
調(diào)用登錄等接口前必須先調(diào)用以下接口注冊(cè)第三方應(yīng)用:
-(void)registerProvider:(SGALoginType)provider
appId:(NSString *)appId
redirectUri:(NSString *)redirectUri;
注意:如果沒這步操作,將不采用SSO,將采用webview的登錄方式。
3.4 配置工程URL Scheme
在工程的info的URL Type中,增加url定義,用來定義回調(diào)接口,如下所示:
若是在QQ開發(fā)平臺(tái)申請(qǐng)的appid,則URL Scheme為:tencent+appid的形式;若是在新浪微博開發(fā)平臺(tái)申請(qǐng)的appkey,則URL Scheme為:wb+appkey的形式。微信開發(fā)平臺(tái)申請(qǐng)的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];
}
第四章.接口說明
下面介紹幾個(gè)主要接口,及其簡要使用流程。詳細(xì)接口見SDK提供的接口文件。其中,分享的接口功能及其參數(shù)說明在SGAShareObject.h、SGAShareManagerFactory.h和SGAShareManager.h文件里進(jìn)行了詳細(xì)說明。
4.1 應(yīng)用初始化
-(void)setClient_id:(NSNumber *)clientId
client_secret:(NSString *)clientSecret;
client_id: 搜狗passport分配給公司內(nèi)部每個(gè)應(yīng)用的標(biāo)識(shí)
client_secret: 客戶端密鑰
4.2 注冊(cè)第三方應(yīng)用
-(void)registerProvider:(SGALoginType)provider
appId:(NSString *)appId
redirectUri:(NSString *)redirectUri;
provider: 用戶登錄平臺(tái)
appId: 在第三方社會(huì)化開發(fā)平臺(tái)注冊(cè)應(yīng)用獲取的應(yīng)用id
redirectUri: 在第三方社會(huì)化開發(fā)平臺(tái)注冊(cè)應(yīng)用設(shè)置的授權(quán)回調(diào)地址,這個(gè)參數(shù)可為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;
接口說明:
應(yīng)用自己傳第三方的appid,包括網(wǎng)頁端和移動(dòng)端,在第三方開發(fā)平臺(tái)如騰訊開放平臺(tái)上創(chuàng)建應(yīng)用申請(qǐng)appid時(shí)一般是分開申請(qǐng)網(wǎng)頁應(yīng)用和移動(dòng)的。
升級(jí)這個(gè)接口主要考慮 應(yīng)用可以更加靈活地定制授權(quán)方式。
EX:若應(yīng)用初始化sdk時(shí)? [[SogouPassport sharedInstance] setQQWapAppId:nil QQSSOAppId:kQQAuthAppKey];? 由于QQWapAppId為nil,那webview登錄時(shí)就會(huì)提示授權(quán)給搜狗或者搜狗通行證;
反之,若QQWapAppId為應(yīng)用自己申請(qǐng)的網(wǎng)頁應(yīng)用appid時(shí),登錄時(shí)就會(huì)提示授權(quán)給該應(yīng)用。
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: 用戶登錄平臺(tái)(如下方所示枚舉類型)
isthird: 0表示去搜狗通行證個(gè)人信息,1表示獲取第三方個(gè)人信息
//登錄平臺(tái)枚舉
typedef NS_ENUM(NSInteger, SGALoginType) {
SGALoginTypeSogou=1,? ? // 搜狗
SGALoginTypeSinaWeibo,? // 微博
SGALoginTypeQQ,? ? ? ? // QQ
SGALoginTypeRenren,? ? // 人人網(wǎng)
SGALoginTypeBaidu? ? ? // 百度
SGALoginTypeWeChat? ? //微信
};
登錄成功返回結(jié)果信息:
參數(shù)名 是否必須
參數(shù)說明
sgid
是 搜狗passport返回的標(biāo)志某一賬戶的初始登錄態(tài)
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 搜狗賬號(hào)(手機(jī)號(hào))注冊(cè)
- (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、獲取當(dāng)前sdk版本號(hào)
- (NSString *) getCurrentVersion;
4、獲取當(dāng)前登錄平臺(tái)
- (NSString *)getCurrentLoginType;
5、切換測(cè)試環(huán)境的屬性isDevMode (默認(rèn)是線上環(huán)境)
[SogouPassport sharedInstance].isDevMode=YES;//即為開發(fā)模式
此時(shí)應(yīng)該wifi連接內(nèi)網(wǎng)環(huán)境才能進(jìn)行測(cè)試
6、搜狗賬號(hào)登錄換膚
-(void)setSogouLoginSkin:(SGASkinType)skin;
提供了兩種皮膚,紅色(SGASkinTypeRed)和綠色(SGASkinTypeGreen)風(fēng)格
7、搜狗賬號(hào)登錄頁面是否顯示QQ登錄圖標(biāo)
[SogouPassport sharedInstance].showQQLogin = NO;//即為不顯示QQ圖標(biāo)
4.7 SGAccountInterface.h 接口說明
//設(shè)置應(yīng)用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;
//手機(jī)號(hào)注冊(cè)
-(void)registerAccount:( NSString *)account
password:(NSString *)password
provider:(SGARegisterType)provider
authKey:(NSString *)authKey
success:(void (^)(NSString *sgid,SGAUserInfo *userInfo))success
fail:(void (^)(NSError *))fail;
//注冊(cè)時(shí)獲取驗(yàn)證碼
- (void)getAuthKey:(NSString *)phoneNumber
success:(void(^)(NSDictionary *result))success
fail:(void(^)(NSError *error))fail;
//注冊(cè)時(shí)驗(yàn)證賬號(hào)是否已存在
- (void)checkUserName:(NSString *)userName
success:(void (^)(NSDictionary *result))success
fail:(void (^)(NSError *error))fail;
//獲取驗(yàn)證碼 ,登錄時(shí) 用戶名密碼錯(cuò)誤太頻繁,需要驗(yàn)證碼校驗(yàn)
- (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;
第五章.返回碼(錯(cuò)誤碼)說明
常用返回碼與錯(cuò)誤信息的對(duì)照,如下所示:
公共錯(cuò)誤碼及對(duì)應(yīng)信息:
返回碼 含義說明
503 服務(wù)器過載或維護(hù)
500 服務(wù)器錯(cuò)誤,無法處理請(qǐng)求
408 請(qǐng)求超時(shí)
405 請(qǐng)求method有誤
404 所請(qǐng)求資源未被找到
400 語法有誤|參數(shù)有誤---無法被服務(wù)器理解
401 該請(qǐng)求需要用戶認(rèn)證
-15 HTTP請(qǐng)求報(bào)出ConnectTimeOutException
-14 HTTP請(qǐng)求報(bào)出ClientProtocolException
-13 HTTP請(qǐng)求報(bào)出IOEXCEPTION
-6 返回的請(qǐng)求結(jié)果格式不對(duì)
-5 解析HttpResponse為json失敗(內(nèi)容不為json格式)
-4 獲取結(jié)果信息data部分失敗|data==null
-3 獲取HttpResponse失敗|HttpResponse為null
-2 沒有網(wǎng)絡(luò)連接
登錄錯(cuò)誤碼及對(duì)應(yīng)信息:
返回碼 含義說明
-1 用戶取消操作
-30001 由于網(wǎng)絡(luò)質(zhì)量抖動(dòng)引起。
100030 用戶未對(duì)應(yīng)用進(jìn)行授權(quán)。
100014 QQ登錄的access_token過期,目前支持的access_token有效期為三個(gè)月。
100015 QQ登錄的access_token失效。要重新走登錄流程,獲取新的access_token。
產(chǎn)生該錯(cuò)誤有兩個(gè)原因:
用戶在QQ空間里取消了對(duì)應(yīng)用的授權(quán),會(huì)導(dǎo)致當(dāng)前保存到應(yīng)用里的AccessToken被廢除掉。
用戶在不同的設(shè)備上進(jìn)行了QQ登錄,導(dǎo)致在原來設(shè)備上的保存的AccessToken被廢除掉。
100016 QQ登錄的access_token校驗(yàn)失敗。
100017 新浪微博登錄簽名不正確
100018 新浪微博登錄授權(quán)異常
10001 系統(tǒng)級(jí)錯(cuò)誤
10002 請(qǐng)求passport server時(shí)參數(shù)錯(cuò)誤,請(qǐng)輸入必填的參數(shù)或參數(shù)驗(yàn)證失敗
30016 用戶取消授權(quán)
10003 接口code簽名錯(cuò)誤或請(qǐng)求超時(shí)
10010 client_id不存在
20256 SSOAfterauth失敗
20257 頻繁登陸賬號(hào)
20221 驗(yàn)證碼錯(cuò)誤
20206 用戶名或密碼錯(cuò)誤
請(qǐng)求用戶信息錯(cuò)誤碼及對(duì)應(yīng)信息:
返回碼 含義說明
-2001 用戶尚未登錄
-2002 無用戶信息
以上個(gè)別部分的錯(cuò)誤碼分得比較細(xì),是因?yàn)榭紤]到初期版本,后面版本可能會(huì)歸納減少錯(cuò)誤碼種類。另外欲了解QQ登錄了的詳細(xì)全部錯(cuò)誤碼,請(qǐng)參看QQ的+《公共返回碼說明》+文檔。
|? 支持QQ空間、QQ好友分享
|? 支持微博客戶端分享
|? 支持微博webview方式分享