一键登录

最近更新时间:2020-07-06 14:06:58

目录

OneLogin (一键登录)

1.1、初始化

方法原型

/**
 向SDK注册AppID

 @discussion `AppID`通过后台注册获得,从金山云后台获取该AppID,AppID需与bundleID配套

 @param appID 产品ID
 */
+ (void)ksc_registerWithAppID:(NSString *)appID;

参数描述

参数 是否必填 类型 说明
appID NSString 金山云 appID

接口作用

传入金山云 appID,并开始预取号

使用场景

  • 保证在拉起授权页面前至少调用一次,建议在应用启动时或进入登录页面的前一个页面调用该方法
  • 只需调用一次,多次调用不会多次初始化,与一次调用效果一致

示例代码

ObjC:

  1. 导入金山云 SDK 头文件 #import <KSCLoginSDK/KSCOneLoginSDK.h>
  2. 在 UIViewController 的 viewDidLoad 方法中添加初始化代码
- (void)viewDidLoad {
    [super viewDidLoad];    
    // 设置AppId,AppID通过后台注册获得,从金山云后台获取该AppID,AppID需与bundleID配套
    [KSCOneLoginPro ksc_registerWithAppID:KSCOneLoginAppId];
}

Swift:

  1. 创建混编桥接头文件并导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 在 UIViewController 的 viewDidLoad 方法中添加初始化代码
override func viewDidLoad() {
    super.viewDidLoad()
    // 设置AppId,AppID通过后台注册获得,从金山云后台获取该AppID,AppID需与bundleID配套
    KSCOneLoginPro.ksc_register(withAppID: KSCOneLoginAppId)
}

1.2、进入授权页面

方法原型

/**
 进行用户认证授权, 获取网关 token 。

 @discussion 调用限制说明

 为避免授权页面多次弹出, 在调用该方法后, 授权页面弹出, 再次调用该方法时,
 该方法会直接跳出, 不执行授权逻辑。

 @discussion 需要用户在弹出的页面上同意服务意条款后, 才会进行免密认证。

 @param viewController  present 认证页面控制器的 vc
 @param viewModel       自定义授权页面的视图模型
 @param completion      结果处理回调

 @seealso KSCAuthViewModel

 */
+ (void)ksc_requestTokenWithViewController:(nullable UIViewController *)viewController
                             authViewModel:(nullable KSCAuthViewModel *)authViewModel
                            completion:(void(^)(NSDictionary * _Nullable result))completion;

参数描述

参数 是否必填 类型 说明
viewController UIViewController 进入授权页面的上一级页面
authViewModel KSCAuthViewModel 授权页面UI配置参数
completion void(^)(NSDictionary * _Nullable result) 获取token回调

接口作用

拉起授权页面,用户在授权页面点击一键登录,即可获取 token,拿该 token 即可换取对应的手机号

使用场景

  • 用户进行一键登录操作时调用该方法,如果初始化成功SDK 将会拉起授权页面
  • 可以在多处调用
  • 需在调用初始化方法之后调用

示例代码

ObjC:

  1. 导入金山云 SDK 头文件 #import <KSCOneLogin/KSCOneLoginSDK.h>
  2. 在需要使用一键登录的地方调用金山云一键登录接口
- (IBAction)normalLoginAction:(UIButton *)sender {
    KSCAuthViewModel *viewModel = [KSCAuthViewModel new];
    [KSCOneLoginPro ksc_requestTokenWithViewController:self viewModel:viewModel completion:^(NSDictionary * _Nullable result) {
        NSLog(@"KSCOneLoginPro requestTokenWithViewController result: %@", result);
    }];
}

Swift:

  1. 创建混编桥接头文件并导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 在需要使用一键登录的地方调用金山云一键登录接口
@IBAction func normalLoginAction(_ sender: UIButton) {        
    let viewModel = OLAuthViewModel()
    // 进入授权页面
    KSCOneLoginPro.ksc_requestToken(with: self, authViewModel: authViewModel) { [weak self] result in
    }
}

1.3、手动关闭授权页面

方法原型

/**
 @abstract 关闭当前的授权页面

 @param animated 是否需要动画
 @param completion 关闭页面后的回调

 @discussion
 请不要使用其他方式关闭授权页面, 否则可能导致 OneLogin 无法再次调起
 */
+ (void)dismissAuthViewController:(BOOL)animated completion:(void (^ __nullable)(void))completion;

参数描述

参数 是否必填 类型 说明
animated BOOL 关闭授权页面时是否需要动画
completion void(^)(void) 关闭授权页面后的回调

接口作用

当开发者设置点击一键登录或者自定义控件不自动销毁授权页时,将需要自行调用此方法主动销毁授权页,建议在置换手机号成功后销毁,请不要使用其他方式关闭授权页面

关闭授权页面时机

  • 在授权页面点击切换账号按钮时
  • 在授权页面点击一键登录按钮收到 requestToken 结果回调之后

示例代码

ObjC:

  1. 导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 在需要关闭授权页面的地方调用金山云关闭授权页面接口
- (void)dismissAuthVC {
    [KSCOneLoginPro dismissAuthViewController:nil];
}

Swift:

  1. 创建混编桥接头文件并导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 在需要关闭授权页面的地方调用金山云关闭授权页面接口
@objc func dismissAuthVC(_ sender: UIButton) {
    KSCOneLoginPro.dismissAuthViewController {

    }
}

1.4、重新开始预取号

方法原型

/**
 * @abstract 重新预取号
 *
 * @discussion 在通过requestTokenWithCompletion方法成功登录之后,为保证用户在退出登录之后,能快速拉起授权页面,请在用户退出登录时,调用此方法
 */
+ (void)againPreGetToken;

接口作用

在 SDK 初始化之后,调用requestTokenWithCompletion获取 token 之前,SDK 内部会一直维护预取号的结果,但是在调用requestTokenWithCompletion获取 token 之后,就不再维护预取号结果了,调用该接口,就会重新开始预取号,并维持预取号结果有效,以保证在用户退出登录之后再次登录时能快速进入授权页面

调用时机

  • 建议在用户退出登录时调用该接口

示例代码

ObjC:

  1. 导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 重新预取号
[KSCOneLoginPro againPreGetToken];

Swift:

  1. 创建混编桥接头文件并导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 重新预取号
KSCOneLoginPro.againPreGetToken()

1.5、判断预取号结果是否有效

方法原型

/**
 * @abstract 判断预取号结果是否有效
 *
 * @return YES: 预取号结果有效,可直接拉起授权页面 NO: 预取号结果无效,需加载进度条,等待预取号完成之后拉起授权页面
 */
+ (BOOL)isPrefetchTokenResultValidate;

接口作用

判断预取号结果是否有效

调用时机

  • 调用ksc_requestTokenWithCompletion时,判断是否需要加载进度条

示例代码

ObjC:

  1. 导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 判断预取号结果是否有效
// 在SDK内部预取号未成功时,建议加载进度条
if (![KSCOneLoginPro isPrefetchTokenResultValidat]) {
    [KSCProgressHUD showLoadingHUDWithMessage:nil];
}
[KSCOneLoginPro ksc_requestTokenWithViewController:self viewModel:viewModel completion:^(NSDictionary * _Nullable result) {
    NSLog(@"KSCOneLoginPro ksc_requestTokenWithViewController:self result: %@", result);
}];

Swift:

  1. 创建混编桥接头文件并导入金山云 SDK 头文件 #import <KSCOneLoginSDK/KSCOneLoginSDK.h>
  2. 判断预取号结果是否有效
// 进入授权页面
if !OneLoginPro.isPrefetchTokenResultValidat() {
    KSCProgressHUD.showLoadingHUD(withMessage: nil)
}

KSCOneLoginPro.ksc_requestToken(with: self, viewModel: viewModel) { [weak self] result in
    if let strongSelf = self {
        strongSelf.finishRequsetingToken(result: result!)
    }
    sender.isEnabled = true
}

金山云,开启您的云计算之旅

免费注册