海尔用户中心SDK-IOS V3.4.0
简介
包含 OAuth2 授权,用户信息查询,刷新 token,退出登录,扫码登录等基本功能。
2.0 版本相对于 1.X 版本,另外灵活提供 SDK 色系可配置功能(参考快速启动配置),包括按钮颜色、勾选颜色等。
2.1 版本修复了 2.0 版本某些页面不能返回的问题。3.1 版本增加了 u家 app 需要的接口
3.3.4 版本增加了微信第三方登录,并与第三方登录可配置
3.3.9 版本增加了 u家 app 埋点需要的 version 字段,非必须字段
3.4.0 版本修改了横屏 h5 显示不正确的问题
功能
快速开始
环境要求
- 支持 iOS 7.0 及以上的系统版本
准备
- 在podfile中写入pod “HaierUserCenter”, '~> 3.4.0' 进行pod install即可。
- HTTP请求配置:由于iOS 9引入了AppTransportSecurity(ATS)特性,要求App访问的网络使用HTTPS协议,如果不做特殊设置,http请求会失败,因此需要在info.plist中添加以下字段:
< key>NSAppTransportSecurity< /key>
< dict>
< key>NSAllowsArbitraryLoads< /key>
< true/>
< /dict>
-
添加其他链接器标志:需要在Target -> Build Settings -> other linker flags中添加;两个参数:-ObjC。否则可能会导致崩溃。
-
配置URL Scheme:使用OAuth 2.0授权方式,需要跳转到认证服务器以获取授权码,然后再跳转回你的APP,因此需要设置Scheme。如果认证服务器是其他APP,则需将其Scheme添加到白名单中。注意:如果需要微信第三方登录,需在微信开放平台申请微信的相关appid和appsecret,并在url type中配置好微信授权的回调scheme。
<key>LSApplicationQueriesSchemes</key> <array> <!--URL Scheme 白名单--> <string>SSO ProviderApp Scheme</string> </array> 注意:如果需要微信登录,需要在白名单内加入weixin
-
如果需要支持微信登录,需要添加微信授权所依赖的系统库
SystemConfiguration.framework, libz.dylib, libsqlite3.0.dylib, libc++.dylib, Security.framework, CoreTelephony.framework, CFNetwork.framework
###启动配置
- 在
*AppDelegate.m
中,导入#import <UserCenter/UserCenter.h>
并在代理方法中启动环境。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/** 注册基础环境属性
* client_id 是用户中心授权之后分配的
* client_secret 是用户中心授权之后分配的
* oauthURL 跳转授权界面的domain 正式环境为 http://account.haier.com
* baseURL 基础api URL 正式环境为 http://account-api.haier.net
*uhomeAppId uhome分配的appId
*uhomeType 目前为固定值 'type_uhome_common_token'
*uhomeClientId uhome分配的clientId
uhomeSign:uhome自己的签名规则,具体参考uhome算法
*/
HUCConfig *_config = [HUCConfig registerAppId:@"sdk"
appSecret:@"12345654321"
oauthURL:@"http://taccount.haier.com"
baseURL:@"http://taccount.haier.com" uhomeAppId:@"" uhomeType:@"" uhomeClientId: @""
uhomeSign:@"" uhomeVersion:@""];
/**设置三方登录支持的平台,目前支持的平台有如下枚举类型所示
typedef enum : NSInteger {
WeChatEnable,
QQEnable,
WeiboEnable,
NeteaseEnable,
DoubanEnable
} ThirdPartSupportType;
*/
[[HUCConfig shareInstance] setEnableList:@[@(WeChatEnable),@(QQEnable),@(WeiboEnable)]];
//如果不需要三方登录设置如下
[[HUCConfig shareInstance] setEnableList:@[@(10)]];
NSString *str = @"haierwantou://oauth";
[HUCConfig registerWechatAppId:@"wx4adc534fbbcc7825" weChatSecret:@"32fbbf294426af4a3c277fefabe63549"];
[_config enableAuthorizationWithScheme:str];
[_config setEnv:HUCSDKEnvTest];
/**添加Scheme地址:
* Scheme 你当前app的scheme:
* 注意: scheme格式必须限定为:haier+'自定义名称'
*/
//注意下面是如果接入微信登陆所需要的配置
[[ThirdPartInfo sharedManager]setWeChatAppId:@"wx4adc534bcc7825" weChatSecret:@"32fbbf294426af4a3c277fefabe639"];
[[HUCOauth2Manager shareInstance]setWechatDelegate:[ThirdPartInfo sharedManager]];
[[ThirdPartInfo sharedManager] setConfigDelegate:_config];
}
- 在
*AppDelegate.m
中,并在代理方法中拦截Scheme唤起APP过程。
iOS9一下配置方法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//此处为了做支持微信登录,做了修改,需要传入sourceApplication
return [HUCCommonManager handleRedirectURL:url sourceApplication:sourceApplication];
}
iOS9以上配置方法:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
return [HUCCommonManager handleRedirectURL:url sourceApplication:options[@"UIApplicationOpenURLOptionsSourceApplicationKey"]];
}
- 注意:scheme格式必须为:haier+'自定义名称'
详细功能说明
OAuth 2.0的授权
该方式是基于OAuth 2.0的授权码模式(authorization code),当调用接口后会内部打开webView加载的授权界面,然后进行授权。
使用说明
-
注册配置常量:根据需要注册client_id、client_secret、baseURL、Scheme uhomeAppId、uhomeClientId、uhomeSign、uhomeType等参数。具体实现请参考Quick Start中的启动配置。也可以直接创建
HUCConfig
对象,并设置相应属性。 -
接口使用:在合适的位置,导入
#import <UserCenter/HUCCommonManager.h>
,并调用相关方法,具体代码如下://注意:自定义颜色不得包含 `#`,请直接输入`16进制`颜色:例如`111111` [HUCCommonManager clientOAuth2AccessToken:@"123456" complete:^(BOOL success, HUCAccessTokenResultDO *accessTokenDO, HUCResponseErrorDO *error) { if (!success && error) { [self alertMSg:[NSString stringWithFormat:@"error=%@ ",error.errorMessage]]; return ; } [self alertMSg:[NSString stringWithFormat:@"accessToken=%@ refreshToken=%@ uhomeaccessToken = %@ uhomeuserId = %@," ,accessTokenDO.accessToken,accessTokenDO.refreshToken,accessTokenDO.uhomeAccessToken,accessTokenDO.uhomeUserId]]; } pressBackHandler:^{ NSLog(@"press back ......"); }];
参数说明
- 参数
参数名 | 描述 | 必填 |
---|---|---|
theme | 自定义颜色 | Y |
- 回调块
typedef void (^HUCOAuth2AccessTokenHandler)(BOOL success, HUCAccessTokenResultDO *accessTokenDO, HUCResponseErrorDO *error);
Block参数名 | 描述 | 类型 |
---|---|---|
success | 请求的成败 | bool |
accessTokenDO | 凭证令牌模型类 | HUCAccessTokenResultDO |
message | 错误信息 | HUCResponseErrorDO |
accessTokenDO头文件定义属性如下所示:
@property(nonatomic, copy) NSString *accessToken; //这是用户中心的设备级别的 accessToken
@property(nonatomic, assign) NSTimeInterval expires; //这是过期时间,服务端产生的。
@property(nonatomic, copy) NSString *tokenType; //服务端产生的,token的鉴权类型。
@property(nonatomic, copy) NSSet *scope; //服务端产生的,资源访问权限控制相关的
@property(nonatomic, assign) NSTimeInterval creatTime; //token生成日期
@property(nonatomic, copy) NSString *uhomeAccessToken; //云平台的accessToken,用此token去云平台鉴权。
@property(nonatomic, copy) NSString *refreshToken; //这是用户中心用来刷新accessToken过期的refreshToken,可以用这个refreshToken刷新的用户中心设备级别的accessToken与云平台的参数。
@property(nonatomic, copy) NSString *uhomeUserId; //云平台的用户userId
获取属性方法调用accessTokenDO的get方法:
如:获取用户中心的accessToken 可以调用get方法 如accessTokenDO.accessToken就能得到用户中心的accessToken。其他类似。
HUCResponseErrorDO说明:
@property(nonatomic, copy) NSString *error; //错误
@property(nonatomic,strong)NSString *errorMessage; //错误描述
@property(nonatomic, copy) NSString *captcha_token; //图形验证码接口的token
@property(nonatomic, copy) NSString *captcha_image; //图形验证码的bas64字符串,需要自己decode出图片,如果用到相关接口
注意
- 由于OAuth2授权需要跳转到授权服务器进行授权,因此必须设置本地的Schema地址
- 自定义颜色不得包含
#
,请直接输入16进制
颜色:例如111111
扫码授权
通过二维码扫描的方式来传递当前已登录APP的accessToken,完成授权。
使用说明
-
接口使用:在合适的位置,导入
#import <UserCenter/UserCenter.h>
,并调用相关方法,具体代码如下:[HUCCommonManager scanLoginWithQRCodeURL:code complete:^(BOOL success, BOOL rescan, NSString *message) { // do somethings }];
参数说明
- 参数
参数名 | 描述 | 必填 |
---|---|---|
QRCode | 扫描到的二维码 | Y |
-
回调块
typedef void (^HUCScanLoginHandler)(BOOL success, BOOL rescan, NSString *message);
Block参数名 | 描述 | 类型 |
---|---|---|
success | 请求的成败 | bool |
rescan | 是否需要重扫描 | bool |
message | 错误信息 | 返回错误详情 |
获取用户信息
接口使用
-
注册配置常量:根据需要,注册client_id、client_secret、baseURL、uhomeAppId、uhomeClientId、uhomeSign、uhomeType这几个参数。具体实现请参考Quick Start的启动配置。也可以直接创建
HUCConfig
对象,并设置相应属性。 -
接口使用:在合适的位置,导入
#import <UserCenter/UserCenter.h>
,并调用相关方法,具体代码如下:- 获取当前登录用户信息:依赖于APP登录获取的access_token,需要当前APP登录成功,否则请先调用授权登录接口,提示用户登录
[HUCCommonManager userMessage:^(BOOL success, id userMessage, HUCResponseErrorDO *error) { // do somethings
}];
参数说明
- 回调块
typedef void (^HUCUserMessageHandler)(BOOL success, id userMessage, HUCResponseErrorDO *error)
Block参数名 | 描述 | 类型 |
---|---|---|
success | 请求的成败 | bool |
userMessage | 包含用户基本信息 | id |
message | 错误信息 | HUCResponseErrorDO |
userMessage说明:
是一个服务端返回的字典,下面的字典是一个实例,如果没有的字段,服务端不返回
{
"name": "H405R1450621708059R28", //默认字段
"username": "testGGG", //用户名(可用于登录)
"email": "[email protected]", //邮箱 (可用于登录)
"gender": "female", //性别
"user_id": 3323432, //user_id,即为统一的用户中心/官网user_id
"email_verified": true, //邮箱验证
"birthdate": "2016-12-28", //生日
"phone_number": "18560630620", //手机号码 (可用于登录)
"avatar_url": "http://example.com/a.jpg", //头像
"phone_number_verified":true, //手机验证
"address": { //居住地
"province_id": 0, //省id (取自hp系统pro_code字段)
"province": "", //省
"city_id": 0, //市id (取自hp系统city_code字段)
"city": "", //市
"district_id": 0, //区id (取自hp系统area_code字段)
"district": "", //区
"line1": "", //详细地址
"postcode": "0" //HP邮编
}
"updated_at": 1483596113000 //默认时间戳
}
清除授权历史(登出)
通过账号登录、短信验证码登录或者OAutho2.0可通过sdk提供的注销登录接口进行注销
-
接口说明:- 在 合适的地方导入
HUCConfig.h
,并在并使用接口注销。[HUCCommonManager unchainAuthorization];
刷新token
接口使用
-
注册配置常量:根据需要来注册client_id、client_secret、baseURL、uhomeAppId、uhomeClientId、uhomeSign、uhomeTyp这几个参数。具体实现请参考Quick Start的启动配置。也可以直接创建
HUCConfig
对象,并设置对应属性。 -
接口使用:在合适的位置,导入
#import <UserCenter/UserCenter.h>
,并调用相关方法,具体代码如下:- 获取当前登陆的用户信息:依赖APP登录获得的refresh_token,需要当前APP登录成功,否则请先调用授权登录接口,提示用户登录
[[HUCOauth2Manager shareInstance]refreshTokenWithConfig:[HUCConfig shareInstance] refreshToken:result.refreshToken completeHandler:^(BOOL success, HUCAccessTokenResultDO *accessTokenDO, HUCResponseErrorDO *error) {
if (success && accessTokenDO) {
[self alertMSg:[NSString stringWithFormat:@"accessToken=%@ refreshToken=%@ uhomeaccessToken = %@" ,accessTokenDO.accessToken,accessTokenDO.refreshToken,accessTokenDO.uhomeAccessToken]];
}
}];
#### 参数说明
- 回调Block
typedef void (^HUCRefreshCompleteHandler)(BOOL success, HUCAccessTokenResultDO *accessTokenDO, HUCResponseErrorDO *error);
| Block参数名 | 描述 | 类型 |
| :-----------: | :----------: | :---------------------------------: |
| success | 请求的成败 | bool |
| accessTokenDO | response结构封装 | id |
| error | 错误信息 | [HUCResponseErrorDO](#responseErro) |
返回的accessTokenDO说明: accessTokenDO头文件定义属性如下所示: @property(nonatomic, copy) NSString *accessToken; //这是用户中心的设备级别的 accessToken @property(nonatomic, assign) NSTimeInterval expires; //这是过期时间,服务端产生的。 @property(nonatomic, copy) NSString *tokenType; //服务端产生的,token的鉴权类型。 @property(nonatomic, copy) NSSet *scope; //服务端产生的,资源访问权限控制相关的 @property(nonatomic, assign) NSTimeInterval creatTime; //token生成日期 @property(nonatomic, copy) NSString *uhomeAccessToken; //云平台的accessToken,用此token去云平台鉴权。 @property(nonatomic, copy) NSString *refreshToken; //这是用户中心用来刷新accessToken过期的 refreshToken,可以用这个 refreshToken刷新的用户中心设备级别的 accessToken与云平台的参数。 @property(nonatomic, copy) NSString *uhomeUserId; //云平台的用户 userId 获取属性方法调用accessTokenDO的get方法: 如:获取用户中心的 accessToken 可以调用get 方法 如accessTokenDO.accessToken就能得到用户中心的 accessToken。其他类似。