iOS SDK接入

最近更新时间:2021-10-26 19:26:10

查看PDF

一键登录完全定制版iOS SDK开发文档

1.接入指南

sdk支持版本:iOS8.0及以上
本文档为一键登录SDK1.0.0版本的开发文档

注意事项:

  1. 一键登录服务必须打开蜂窝数据流量并且手机操作系统给予应用蜂窝数据权限才能使用
  2. 取号请求过程需要消耗用户少量数据流量(国外漫游时可能会产生额外的费用)
  3. 一键登录服务目前支持中国移动2/3/4G(2,3G因为无线网络环境问题,时延和成功率会比4G 低)和中国电信4G、中国联通4G
  4. (改动)允许外部在非主线程,多线程和并发对SDK方法进行调用
  5. (改动)SDK不再使用200089返回码提示上一次请求进行中,对SDK方法调用多少次就返回多少
    次结果,即SDK方法支持并发多次调用
  6. 关于双卡的适配问题:
    1. 当两张卡的运营商不一致时,SDK会获取设备上网卡的运营商并进行取号,但上网卡不一定 会获取成功(飞行模式状态时),若获取失败,SDK将默认取号卡为移动运营商取号,如果 匹配,则取号成功,否则SDK返回103111;
    2. 当SDK存在缓存并且两张卡的运营商不相同时,SDK会重新获取上网卡运营商与上一次取号 的运营商进行对比,若两次运营商不一致,则以最新设置的上网卡的运营商为准,重新取 号,上次获取的缓存将自动失效;双卡运营商相同的情况则不需要重新取号。
    3. iOS 13上已完成双卡适配,SDK通过苹果提供的方法获取运营商,若获取失败,SDK将默认 取号卡为移动运营商取号,如果匹配,则取号成功,否则SDK返回103111。

1.1. 接入流程

从金山云后台,拿到申请的appid,注意此appid必须和iOS项目的bundleId对应!!!

1.2. 开发流程

第一步:下载SDK及相关文档

请在官网下载最新的SDK包(包含Demo+SDK+资源包) 点击下载
非开发人员想体验demo,可直接下载ipa包到iPhone手机 点击下载

第二步:搭建开发环境

  1. xcode版本需使用9.0以上,否则会报错

  2. 导入认证SDK的framework,直接将移动认证 KSCLoginSDK.framework 拖到项目中

  3. iOS版SDK1.1版本后,需要在项目中引入Network.framwork 如图
    linkedlibraries

  4. 在Xcode中找到 下图位置 在这选项中需要 添加 -ObjC
    注意:如果以上操作仍然出现unrecognized selector sent to instance找不到方法的报错,则添加更
    改为-all_load
    linkedlibraries

5.资源文件:在Xcode中务必导入TYRZResource.bundle到项目中,否则授权界面显示异常(不显示
默认图片),直接拖入到项目中即可 如下图
linkedlibraries

  1. 在info.plist 文件中添加一个子项目App Transport Security Settings,然后在其中添加一个key:
    Allow Arbitrary Loads,其值为YES。修改后其他运营商才能使用一键登录。
  2. 需要用到SDK的ViewController导入SDK语句: #import <KSCLoginSDK/KSCLoginSDK.h>,导入后才能调用SDK的方法

第三步:开始使用移动认证SDK

初始化

初始化init
SDK 初始化接口init,可放在 AppDelegate 的 didFinishLaunchingWithOptions 方法中进行初始化,(或者开发者放在某个ViewController viewDidLoad中,开发者可根据自身需求,但在使用之前必须初始化!!!注意如果调用某方法失败,可能是初始化还没有全部完成就调用了该方法)
代码示例

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
     //在APP启动完的时候 注册SDK
    [KSCSDKLogin ksc_registerWithAppID:appId completion:^(BOOL isRegist) {
	//当这个回调进来的时候标识初始化已经完成
        NSLog(@"注册成功%d", isRegist);
    }];
    return YES;
}

方法描述:
+ (void)ksc_registerWithAppID:(NSString *)appID completion:(void(^)(BOOL isRegist))completion;

参数说明

参数 类型 说明
appID String 金山云后台配置唯一产品 APPID,请在官网申请 需要和bundleId对应
completion void(^)(BOOL isRegist) 初始化完成回调isRegist=YES

oneLogin 登录涉及到的方法

1.获取脱敏手机号码

获取脱敏手机号码getPhoneNumber
获取133****1234 形式的脱敏手机号,以供在授权页展示使用

方法描述
+ (void)ksc_getPhoneNumberCompletion:(void(^)(NSDictionary *_Nonnull result))completion;

参数说明

参数 类型 说明
completion void(^)(NSDictionary *_Nonnull result) 方法回调

2.获取一键登录token

获取一键登录token getAuthorization
当用户调起完全定制化的授权页后,当点击一键登录按钮后调用此方法以获取一键登录token,完成后续操作,之后的操作要去请求自己的服务器

方法描述
+ (void)ksc_getAuthorizationWithModel:(KSCCustomModel *)model complete:(void (^)(id sender))completion;

参数说明

参数 类型 说明
model KSCCustomModel 传入SDK的模型,详情可参照对应的头文件
completion void (^)(id sender) 方法回调

一般在方法1成功的回调中调用方法2,代码示例

// 在SDK内部预取号未成功时,建议加载进度条
    [KSCProgressHUD showLoadingHUDWithMessage:nil];
    
    KSCCustomModel *model = [self configModel];
    //1.先获取预取号
    [KSCSDKLogin ksc_getPhoneNumberCompletion:^(NSDictionary * _Nonnull result) {
        //授权页 点击一键登录的时候没网的次数
        __block int count = 5;
        NSString *resultCode = result[@"resultCode"];
        [KSCProgressHUD hideAllHUD];
        [KSCSDKLogin delectScrip];
        if ([resultCode isEqualToString:SUCCESSCODE]) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                btn.enabled = YES;
            });
            // 加载进度条
            [KSCProgressHUD showLoadingHUDWithMessage:nil];
            
            if (self.authWindow) {
                [self showMenBanView:YES];
            }
            //2.在预取号成功的回调里再调用调起授权页的方法
            [KSCSDKLogin ksc_getAuthorizationWithModel:model complete:^(id  _Nonnull sender) {
                //没开蜂窝网络 提示5次
                if (count > 0) {
                    NSString *toastStr = [KSCSDKUntils getNoNetworkToastStr];
                    if (![toastStr isEqualToString:@""]) {
                        count--;
                        [KSCProgressHUD showToastWithMessage:toastStr];
                        return;
                    }
                }
               
                [KSCProgressHUD hideAllHUD];
                NSString *resultCode = sender[@"resultCode"];
                NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:sender];
                if ([resultCode isEqualToString:SUCCESSCODE]) {
                    NSString *toastStr = [KSCSDKUntils getNoNetworkToastStr];
                    if (![toastStr isEqualToString:@""]) {
                        [KSCProgressHUD showToastWithMessage:toastStr];
                        return;
                    }
                    result[@"result"] = @"获取token成功";
                    /**
                     =======================================================================
                     !!!!!!!!  到这里SDK已经成功获取到token了,demo是跳转到“结果页面”,之后的业务就需要和己公司的服务端的同学去对接
                     =======================================================================
                     */
                    [KSCSDKLogin ksc_ua_dismissViewControllerAnimated:YES completion:^{
                        [self pushResultVCWithDic:result];
                    }];
                    
                } else if(![resultCode isEqualToString:@"200087"]){
                    result[@"result"] = @"获取token失败";
                }else{
                }
            }];
        } else {
            btn.enabled = YES;
            [KSCProgressHUD showToastWithMessage:@"预取号失败,初始化SDK失败,请重启APP"];
        }
    }];

3.关闭授权页

方法描述
+ (void)ksc_ua_dismissViewControllerAnimated: (BOOL)flag completion: (void (^ __nullable)(void))completion;
参数说明

参数 类型 说明
flag BOOL 动画开关
completion void (^ __nullable)(void) 方法回调

4.根据SDK获取到的token 对接自己公司的服务器

参考 demo中 ResultViewController.m 中的
/**
!!!!和自己公司服务器对接 发送请求
oneLogin发送请求 携带参数 一共是3个 app_id 、 token 、sign(sign是根据前2个参数算出来的签名,具体算法参照方法中的实现)
*/
- (void)validateToken:(NSString *)token mobileStr:(NSString *)phoneNumStr 方法

onePass 登录涉及到的方法

1.获取本机验证token

获取本机验证token mobileAuth
在一键登录不可用或特殊场景下需要使用到本机验证功能,即填入当前手机号码进行验证

方法描述
+ (void)ksc_mobileAuthCompletion:(void(^)(NSDictionary *_Nonnull result))completion;

参数说明

参数 类型 说明
completion void(^)(NSDictionary *_Nonnull result) 方法回调

代码示例

		// 获取token未成功时,建议加载进度条
        [KSCProgressHUD showLoadingHUDWithMessage:nil];
        sender.enabled = NO;
        
        //获取token
        [KSCSDKLogin ksc_mobileAuthCompletion:^(NSDictionary * _Nonnull result) {
            [KSCProgressHUD hideAllHUD];
            sender.enabled = YES;
            [self.phoneNumberTF resignFirstResponder];
            NSString *resultCode = result[@"resultCode"];
            
            NSMutableDictionary *resultDic = [NSMutableDictionary dictionaryWithDictionary:result];
            if ([resultCode isEqualToString:SUCCESSCODE]) {
                NSString *phoneNumStr = self.phoneNumberTF.text;
                resultDic[KSC_PARMS_IPHONE_KEY] = phoneNumStr;
                /**
                 =======================================================================
                 !!!!!!!!  到这里SDK已经成功获取到token和手机号码了,demo是跳转到“结果页面”,之后的业务就需要和己公司的服务端的同学去对接
                 =======================================================================
                 */
                [self pushResultVCWithDic:resultDic];
            } else {
                [KSCProgressHUD showToastWithMessage:@"请开启移动网络"];
            }

2.根据SDK获取到的token和电话号码 对接自己公司的服务器

参考 demo中 ResultViewController.m 中的
/**
!!!!和自己公司服务器对接 发送请求
onePass发送请求 携带参数 一共是4个 app_id 、mobile 、 token 、sign(sign是根据前3个参数算出来的签名,具体算法参照方法中的实现)
*/
- (void)validateToken:(NSString *)token mobileStr:(NSString *)phoneNumStr 方法

其他接口说明

设置超时时间
+ (void)ksc_setTimeoutInterval:(NSTimeInterval)timeout

开启 Log
+ (void)ksc_printConsoleEnable:(BOOL)enable

获取运营商
return @“中国移动”/@“中国联通”/@“中国电信”/@“未知网络”
+ (NSString *)carrierStr

是否打开蜂窝
+ (BOOL)isOpenCellularNetwork

错误码说明

详情见KSCSDKErrorCode.h说明

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈