简单-搜狗三方登录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方式分享

你可能感兴趣的:(简单-搜狗三方登录Sdk接入)