新特SDK
概述
如果你想要接入新特的用户程序接口,可以通过接入该SDK快速访问新特的用户程序,接口包含了用户信息管理,用户登录注册,用户信息修改等功能模块,并对请求数据进行加密,对请求进操作进行了进一步的封装,SDK为每一个接口功能都提供了相应的方法,接入过程极其简单,只需配置简单的参数,将该url转交给SDK进行处理;无需接入者解析参数字段,接入者的服务端也无需改造。
SDK集成流程
1.把XTUserSDK.framework文件拷贝到项目文件夹下,并导入到项目工程中。
2.在需要调用AlipaySDK的文件中,增加头文件引用。
import <XTUserSDK/XTUserSDK.h>
3.点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字“search”搜索,对“Header Search Paths”增加头文件路径:$(PROJECT_DIR)/SDK路径.../XTUserSDK.framework/Headers。如果头文件信息已增加,可不必再增加。
image.png"$(PROJECT_DIR)/XTLogin/Lib/XTUserSDK.framework/Headers"
用户信息XTShareUserInfo
用户信息对象XTShareUserInfo是了登录成功后服务器返回的数据模型,对象提供了归档对数据进行了本地缓存,对外也提供了相应的方法对数据进行修改,删除,保存,更新功能。
公共参数
参数 | 类型 | 描述 | 示例值 |
---|---|---|---|
refreshToken | NSString | 访问token失效后可能过refreshToken重新获取accessToken | 2WZTA5kj...UIJbCdqGudOFGPoujTRA__ |
accessToken | NSString | 接口名称 | 2WZTA5kjTDRoclCR....oAhmfi4_ |
accept | NSString | 仅支持JSON | JSON |
addressCity | NSString | 城市代码 | 10001 |
addressCityDesc | NSString | 城市描述 | 伦敦 |
addressCountry | String | 国家代码,采用国际标准ISO 3166-1标准 | CN |
addressLine1 | String | 街道门牌号 | 查令大街84号 |
addressState | String | 省份代码 | 1.0 |
addressStateDesc | String | 省份描述 | 山东省 |
authInit | String | 是否实名认证 | YES |
avatarUrl | String | 用户头像 | http://image.jpg |
cardId | String | 证件号码 | 100021999090909999 |
cardType | int | 证件类型,1:身份证,3:护照,5:港奥通行证 | 1 |
dataComplete | float | 资料完成度 | 0.5 |
dateBirth | long | 生日 | 883584000000 |
education | String | 教育水平 | 大学本科 |
String | 邮箱 | 123@123.com | |
emailVerified | bool | 邮箱是否验证 | YES |
faceInit | bool | 是否启用刷脸登录 | YES |
gender | String | 性别 M:Male, F:Famale | M |
industry | String | 行业 | 计算机/互联网/通信 |
job | String | 职业 | 医生 |
langKey | String | 语言,采用国际标准ISO 639-1标准代码 | zh_CN |
level | String | 等级 | 1 |
loginType | String | 登录方式 | |
mobile | String | 手机号 | 1700000000 |
mobileVerified | bool | 手机号否被验证 | YES |
nickName | String | 昵称 | 叶秋 |
introduction | String | 个人签名 | 个人签名 |
passwordInit | bool | 是否启用密码标识 | YES |
postCode | String | 邮政编码 | 672401 |
realName | String | 真实姓名 | 张三 |
referralCode | int | 推荐码 | 123243 |
securityInit | bool | 是否启用安全密码标识 | YES |
source | String | 登录平台 | evonshine_app |
userId | String | 用户编号 | 103610000032 |
获取用户信息单例对象
XTShareUserInfo * user = [XTShareUserInfo shareUserInfo];
可快速创建一个用户信息对象,如果对象在本地有缓存将直接读取本地数据进行初始化。
用户信息修改
我们可以对对象的部份变量直接赋值进行修改,如果需要删除用户信息可以通过resetUser重置用户信息
[user resetUser];
修改完成后可通过saveUser方法保存用户信息,对对象进行本地持久化。
[user saveUser]
重置用户信息,并持久化
[user clearnUser];
网络请求工具类XTRequestTool
为了满足服务端请求格式的要求,需要对请求头添加指定的参数,为了方便用户使用,已经将特定的参数封装到该类中,只需配置简单的参数即可创建,发起请求。并且对特殊的网络请求错误进行了特定的处理,如403token失效时,重新获取token,获取成功后重新发起之前的请求。
请求头设置
为了满足服务端请求格式的要求,需要对请求头添加指定的参数,为了方便用户使用,已经将特定的参数封装到该类中。接入时无需另行设置。
@"Content-Type": @"application/json;charset=UTF-8",
@"Content-Encoding":@"gzip",//编码
@"Device-Type":@"iOS",//设备类型
@"Device-ID": deviceId,//设备惟一识别编码
@"Device-Name":deviceName,//设备型号
@"Device-DevOsName":deviceOsName,//系统名称
@"Device-DevOsVersion":deviceOsVersion,//系统版本号
@"Device-DevOsType":@"IOS",//设备系统分类: iOS、android
@"Device-Network":network,//网络信号:wifi/gprs/3g/4g/5g
@"AppVersion":isEmptyString(appVersion)?@"1.0":appVersion,// APP版本号
@"source":XTShareAppSource, //平台
@"Authorization":authorization //accessToken登录身份
创建请求
该类还提供了创建GET,POST,PUT,DELETE,HEAD请求并开启请求的方法
[XTRequestTool loadRequestWithUrl:url param:param httpMethod:XTShareHttpPut completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
}];
对常用的请求类型提供了方便方法
post请求
[XTRequestTool postRequestWithUrl:url param:param completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
}];
get请求
[XTRequestTool getRequestWithUrl:url param:param completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
}];
上传多张图片
[XTRequestTool uploadImagesRequestWithURL:url param:param images:images imageParameName:@""];
快捷访问接XTShareUserAPI
XTShareUserAPI提供了常用的方便的接口,可以重新获取token,获取验证码,登录,实名认证,修改用户信息等功能。
XTShareUserAPI是一个单例对象
[XTShareUserAPI shareUserApi];
获取验证码
该类提供了获取三种不同手机验证码的方法,登录验证码,重置密码验证码,绑定手机验证码。
获取手机登录或绑定手机号的验证码
[[XTShareUserAPI shareUserApi]loginOrBindingSendVerificationCodeWithMoblie:@"1700000000000" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
NSLog(@"发送验证码成功:%@",result[@"messgae"]);
}];
获取邮箱登录或绑定邮箱的验证码
[[XTShareUserAPI shareUserApi]loginOrBindingSendVerificationCodeWithEmail:@"ssd48343@163.com" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
}];
重置密码获取验证码
[[XTShareUserAPI shareUserApi]resetPasswordSendVerificationCodeWithMoblie:@"170000000" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"发送成功");
}else{
NSLog(@"失败:%@",error);
}
}];
自定义获取验证码
如果该类不能满足你的要求,下面还提供了获取更多类型的验证码方法
//登陆验证码
XTShareAppLoginMessageSeverId
//车控密码设置验证码
XTShareSetCarPasswordMessageSeverId
//预约短信验证
XTShareOrderMessageSeverId
//车控密码修改短信验证
XTShareUpdateCarPasswordMessageSeverId
//修改手机号旧手机短信验证
XTShareUpdatePasswordWithOldMessageSeverId
//修改手机号新手机短信验证
XTShareUpdatePasswordWithNewMessageSeverId
//车辆绑定短信验证
XTShareBindingCarMessageSeverId
//密码重置、密码找回短信验证
XTShareResetPasswordMessageSeverId
//邮箱绑定验证
XTShareBindingEmailMessageSeverId
//邮箱产线检测验证码验证
XTShareProuductEmailMessageSeverId
//手机获取验证码
[XTShareLogin sendVerificationCodeWithMoblieOrEmail:moblie andTemleteId:XTShareAppLoginMessageSeverId completionHandler:completionHandler];
邮箱获取验证码
[XTShareLogin sendVerificationCodeWithMoblieOrEmail:email andTemleteId:XTShareBindingEmailMessageSeverId completionHandler:completionHandler];
登录
SDK提供了多种登录的方式手机登录,手机号密码登录,第三方登录,邮箱登录
手机登录时,输入手机号获取验证码,输入正确的验证码进行登录
手机验证码登录
[[XTShareUserAPI shareUserApi]loginWithMobile:@"17000000000" withjCaptchaCode:@"559975" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if (error) {
NSLog(@"登录失败:%@",error);
}
}];
手机密码登录
//手机密码登录前要先进行对密码进行重置
[[XTShareUserAPI shareUserApi]resetPasswordWithPassword:@"abcd1234" mobile:@"17000000000" withjCaptchaCode:@"351675" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"重置密码成功");
}else{
NSLog(@"重置密码失败:%@",error);
}
}];
//手机号密码登录
[[XTShareUserAPI shareUserApi]loginWithUserName:@" 17000000000" andPassword:@"abcd1234" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"登录成功");
}else{
NSLog(@"登录失败:%@",error);
}
}];
第三方登录
目前服务端支持QQ,微信,新浪的第三方登录,在进行第三方登录之前需要对相应AppKey进行配置
[[XTShareUserAPI shareUserApi] configQQAppkey:@"100000000"];
//QQ第三方登录
[[XTShareUserAPI shareUserApi] loginWithQQAccessToken:@"ADSJEW12930193I" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"登录成功");
}];
//新浪第三方登录
[[XTShareUserAPI shareUserApi] loginWithSinaAccessToken:@"ADSJEW12930193I" withOpenId:@"129234" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"新浪登录成功");
}];
//微信第三方登录
[[XTShareUserAPI shareUserApi]loginWithWeixinAccessToken:@"320434" withOpenId:@"9458495405" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"微信登录成功");
}];
//扫码授权登录
[[XTShareUserAPI shareUserApi]loginWithCode:@"43983504" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
NSLog(@"扫码授权登录");
}];
数据修改
该类还提供了一些快捷的数据上传的方法
修改密码
输入原密码和新密码对密码进行修改,密码要求不少于8位的数字和字母的组合
[[XTShareUserAPI shareUserApi]changePasswordWithOldpassword:@"12323" withNewpassword:@"232389uc" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
}];
初始化密码
[[XTShareUserAPI shareUserApi]initPasswordWithPassword:@"abcd1234" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"初始化密码成功");
}else{
NSLog(@"初始化密码失败:%@",error);
}
}];
用户经过手机验证成功后,输入新密码,手机号和验证码重置密码
[[XTShareUserAPI shareUserApi]resetPasswordWithPassword:@"23289aae" mobile:@"170000000" withjCaptchaCode:@"23242" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"重置密码成功");
}];
上传头像
[[XTShareUserAPI shareUserApi]upLoadAvatar:[UIImage imageNamed:@""] completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"头像上传成功");
}];
上传头像成功后,会返回一个头像的Url,此时只是将头像上传到了文件服务器,还需要进一步修改用户的头像url信息才能完全修改成功
//上传用户头像信息
[[XTShareUserAPI shareUserApi]changeUserInfoWithUserinfo:@{@" avatarUrl":@" https://**.jpg"} completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if(!error){
NSLog(@"用户信息修改成功");
}
}];
获取用户信息
该类还提供了快捷获取或更新用户信息的方法
[[XTShareUserAPI shareUserApi]getUserInfoWithCompletionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"用户信息获取成功");
}
}];
刷新token
如果token失效我们可以通过刷新token的方法刷新token
[[XTShareUserAPI shareUserApi]refreshTokenWithCompletionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"刷新成功");
}
}];
获取人脸识别Token
[[XTShareUserAPI shareUserApi]getBizTokenWithCompletionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
NSLog(@"%@",result);
}];
绑定手机号
[[XTShareUserAPI shareUserApi]bindingWithMobile:@"170000000" withjCaptchaCode:@"213298" withRelationId:@"" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
if(!error){
NSLog(@"绑定成功");
}
}];
用户信息更新设置XTShareUpdateUserInfo
XTShareUpdateUserInfo提供了用户信息更新设置的方法
修改密码
[XTShareUpdateUserInfo changePasswordWithOldpassword:@"123232" withNewpassword:@"1232343" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
}];
初始化密码
当用户注册成功还未设置密码时,可以通过该方法初始化密码
[XTShareUpdateUserInfo initWithPassword:@"2323ew24" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
NSLog(@"初始化密码成功");
}];
重置密码
如果用户忘记密码可通过该,输入手机号和验证码重置密码
[XTShareUpdateUserInfo resetPasswordWithPassword:@"12323dfd" mobile:@"1700000000" withjCaptchaCode:@"" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"密码重置成功");
}];
上传头像
上传头像是将本地图片传到文件服务器,上传成功后,服务器返回一个url
[XTShareUpdateUserInfo upLoadAvatar:[UIImage imageNamed:@"image"] completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
NSLog(@"上传头像失败");
}];
获取到头像url后将更新用户的头像信息才能完成头像的修改
[XTShareUpdateUserInfo updateUserAvatarUrl:@"" completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"头像修改成功");
}];
实名认证
实名认证是当用户处于登录状态时输入证件类型,证件号,真实姓名后进行的身份认证
[XTShareUpdateUserInfo realNameAuthenticationWithRealName:@"张三" cardType:@1 cardId:@"10002032030434344344" completionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
NSLog(@"实名誰成功");
}];
获取验证码
该类提供了通过字典对用户信息进行统一修改的方法,输入对应用户信息的键值对即可对相应的信息进行修改。
[XTShareUpdateUserInfo changeUserInfoWithUserinfo:InfoDic completionHandler:^(XTShareUserInfo * _Nullable result, NSError * _Nullable error) {
NSLog(@"修改成功");
}];
为了方便用户使用,该类还提供了常用信息字段的修改
//修改头像
updateUserAvatarUrl
//更改邮箱
updateUserEmail
//更改昵称
updateUserNikeName
//更改签名
updateUserSignature
//更改性别
updateUserGender(男M,女F)
//更改生日
updateUserBirthday(时间缀)
//更改地区
updateUserAddressCity
//更改行业
updateUserProfession
//更改教育经历
updateUserEducation
人脸识别实名认证
人脸识别实名认证是通过活体检测获取人脸照片,将faceToken,真实姓名,证件类型,证件号,人脸照片传到服务器进行认证,如果需要开启车控功能可以将vehicle传入YES,证件类型1:身份证,3:护照,5:港奥通行证。
[XTShareUpdateUserInfo faceAuthWithFaceToken:@"13234" realName:@"张三" cardType:1 cardId:@"329434734" vehicle:YES meglive:[UIImage imageNamed:@""] CompletionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"实名认证成功");
}
}];
车控人脸实名认证
[XTShareUpdateUserInfo carFaceAuthWithFaceToken:@"32424" realName:@"张三" cardType:1 cardId:@"23243435" meglive:[UIImage imageNamed:@""] CompletionHandler:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (!error) {
NSLog(@"实名认证成功");
}
}];
登录状态变化通知
当用户登录状态变化时SDK都会发送一个XTShareNotificationLoginStateChange通知,如果有必要监测登录状态可以添加对该通知的监听。
//发送退出的通知
[[XTShareUserInfo shareUserInfo]removeUserType:XTShareRemoveUserTypeLogout];
KPostNotification(XTShareNotificationLoginStateChange, (@{@"type":@3,@"message":@"退出登录"}));
通知返回对象
可以通过notification.object获取到通知返回对象,该对象是一个字典,字典提供了两个键值对。
type
登录状态变化类型
0:登录成功,1:缺少登录身份,2:token失效,3:退出登录
message
登录状态变化时的提示信息
//添加通知监听
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(loginNotification:) name:XTShareNotificationLoginStateChange object:nil];
- (void)loginNotification:(NSNotification *) notification{
NSLog(@"登录通知:%@%@",notification.object[@"type"],notification.object[@"message"]);
}