搜狗 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方式分享