4 Star 2 Fork 0

杭州艾狄墨搏数字科技有限公司 / 一键登录YuyanAuthDemo-iOS

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

ADmobile YuyanAuthSDK iOS接入文档 v2.0.0

[TOC]

修订历史

文档版本 修订日期 修订说明
V 2.0.0

1. 概述

尊敬的开发者朋友,欢迎您使用ADmobile 雨燕一键登录SDK。通过本文档,您可以在几分钟之内轻松完成雨燕SDK的集成。

操作系统: iOS 9.0 及以上版本

运行设备:iPhone ,iPad

2. SDK接入流程图

2.1 一键登录流程

一键登录.jpg

2.2 号码校验流程图

号码验证.jpg

3. Demo下载链接

YuyanAuthSDK Demo下载链接

4. sdk接入方式

4.1 采用cocoapods进行SDK的导入

推荐使用pod导入

#集成最新版雨燕SDK:
pod 'YuyanAuthSDK', '~> 2.0.0'

4.2 工程环境配置

  1. 打开项目的 app target,查看 Build Settings 中的 Linking-Other Linker Flags 选项,确保含有 -ObjC 一值, 若没有则添加。
  2. 在xcode->General->Linked Frameworks and Libraries中点击 + ,搜索并选择添加 libc++.1.tbd

5. 示例代码

5.1 SDK初始化

一键登录功能及号码校验均需进行SDK初始化

/**
 初始化一键登陆SDK
 @param appId 注册的appid
 @param complete 初始化完成的回调,如失败则会有error(异步,主线程)
 */
+ (void)initWithAppId:(NSString *)appId complete:(void(^_Nullable)(NSError * _Nullable error))complete;

示例代码

#import <YuyanOneClickLogin/YuyanOneClickLogin.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    //初始化
    [YuyanSDKManager initWithAppId:@"1000002" complete:^(NSError * _Nullable error) {
        if(error)
          NSLog(@"%@", error);
    }];
    ...
}

5.2 一键登录

5.2.1 初始化一键登录功能

/**
 初始化一键登陆功能
 */
+ (void)initOneClickLoginModuleWithComplete:(void(^_Nullable)(NSError * _Nullable error))complete;

初始化一键登录功能,在SDK初始化成功后才可初始化一键登录功能

5.2.2 预取号

/**
 预请求, 验证蜂窝数据网络, 勿频繁重复调用
 @param timeout 预取号超时时间,如传入timeout小于1,则默认为4
 @param complete 完成回调,如失败则会有error(异步,主线程)
 */
+ (void)preGetPhonenumberWithTimeout:(NSTimeInterval)timeout complete:(void(^_Nullable)(NSError * _Nullable error))complete;

接口作用

初始化成功后,如果当前为电信/联通/移动,将调用预取号,可以提前获知当前用户的手机网络环境是否符合一键登录的使用条件,成功后将得到用于一键登录使用的临时凭证,凭证有效期移动为72小时,联通电信有效时间为1小时。

使用场景

  • 建议在执行一键登录的方法前,提前一段时间调用此方法,比如调一键登录的vc的viewdidload中,或者rootVC的viewdidload中,或者app启动后,此调用将有助于提高拉起授权页的速度和成功率
  • 此方法需要1~2s的时间取得临时凭证,因此也不建议和拉起授权页方法一起串行调用
  • 不建议调用后立即调用拉起授权页方法(此方法是异步)
  • 不建议频繁的多次调用和在拉起授权页后调用
  • 建议在判断当前用户属于未登录状态时使用,已登录状态用户请不要调用该方法

示例代码

#import <YuyanAuthSDK/YuyanAuthSDK.h>

...
- (void)viewDidLoad {
    [super viewDidLoad];
  	// 用户未登录
    if (IsUserLogin == NO) {
        //预取号
        [YuyanSDKManager preGetPhonenumberWithTimeout:4.0 complete:^(NSError * _Nullable 	      				error) {
            if (!error) {
            	NSLog(@"预取号成功");
        		}
   			}];
        ...
    }
}

5.2.3 拉起授权页

拉起授权页

/**
 调用一键登陆 拉起授权页
 @param model 一键登录UI相关model YuyanCustomModel类型(提供全屏和弹框样式,控件可自定义)
 @param complete 完成回调,如失败则会有error(异步,主线程)
                如果获取成功,则token != nil, error == nil
                如果获取失败,则token == nil, error != nil
 */
+ (void)getLoginTokenWithModel:(YuyanCustomModel *)model complete:(void(^)(NSString * _Nullable token, NSError * _Nullable error))complete;

授权页UI布局model(拉取授权页时传入)

@interface YuyanCustomModel : NSObject

@property (nullable, nonatomic, weak) UIViewController *viewController;

#pragma mark - 全屏、弹窗模式设置
/**
 *  授权页面中,渲染并显示所有控件的view,称content view,不实现该block默认为全屏模式
 *  实现弹窗的方案 x > 0 || y > 0  width < 屏幕宽度 || height < 屏幕高度
 */
@property (nullable, nonatomic, copy) CGRect(^contentViewFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

#pragma mark - 竖屏、横屏模式设置
/**屏幕是否支持旋转方向,默认UIInterfaceOrientationMaskPortrait,注意:在刘海屏,UIInterfaceOrientationMaskPortraitUpsideDown属性慎用!*/
@property (nonatomic, assign) UIInterfaceOrientationMask supportedInterfaceOrientations;

#pragma mark - 弹窗模式属性
/**弹窗模式属性*/
@property (null_resettable,nonatomic, strong) YuyanCustomAlertModel *alert;

#pragma mark - 导航栏(只对全屏模式有效)
/**导航栏设置(只对全屏模式有效)*/
@property (null_resettable,nonatomic, strong) YuyanCustomNavModel *nav;

#pragma mark - 全屏、弹窗模式通用属性
/**授权页弹出方向,默认YuyanPresentationDirection_Bottom*/
@property (nonatomic, assign) YuyanPresentationDirection presentDirection;

#pragma mark - 状态栏
/**状态栏是否隐藏 默认为NO*/
@property (nonatomic, assign) BOOL prefersStatusBarHidden;
/**状态栏主体风格,默认UIStatusBarStyleDefault*/
@property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle;

#pragma mark - logo图
/**logo图设置*/
@property (null_resettable, nonatomic, strong) YuyanCustomLogoModel *logo;

#pragma mark - slogan文案
/**slogan文案设置*/
@property (null_resettable, nonatomic, strong) YuyanCustomSloganModel *slogan;

#pragma mark - 号码文案
/**号码颜色*/
@property (nullable, nonatomic, strong) UIColor * numberColor;
/**号码字体大小设置,大小小于16则不生效*/
@property (nullable, nonatomic, strong) UIFont *numberFont;
/**
 *  构建号码的frame,view布局或布局发生变化时调用, 只有x、y生效, y坐标基准线为导航栏底部, 不实现则按默认处理
 *  注:设置不能超出父视图 content view
 */
@property (nullable, nonatomic, copy) CGRect(^numberFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

#pragma mark - 登录按钮设置
/**登录按钮设置*/
@property (null_resettable, nonatomic, strong) YuyanCustomLoginBtnModel *loginBtn;

#pragma mark - 协议设置
/**协议设置*/
@property (null_resettable, nonatomic, strong) YuyanCustomAgreementModel *agreement;

#pragma mark - 切换到其他方式
/**切换登录方式按钮标题,内容、字体、大小、颜色*/
@property (nullable, nonatomic, copy) NSAttributedString *changeBtnTitle;
/**切换方式按钮是否隐藏,默认为NO*/
@property (nonatomic, assign) BOOL changeBtnIsHidden;
/**构建changeBtn的frame, view布局或布局发生变化时调用, y坐标基准线为导航栏底部, 不实现则按默认处理*/
@property (nullable, nonatomic, copy) CGRect(^changeBtnFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);
/**自定义控件添加,注意:自定义视图的创建初始化和添加到父视图,都需要在主线程!!*/
@property (nullable, nonatomic, copy) void(^customViewBlock)(UIView * superCustomView);

/**
 *  每次授权页布局完成时会调用该block,可以在该block实现里面可设置自定义添加控件的frame
 *  @param  screenSize 屏幕的size
 *  @param  contentViewFrame content view的frame,
 *  @param  navFrame 导航栏的frame,仅全屏时有效
 *  @param  titleBarFrame 标题栏的frame,仅弹窗时有效
 *  @param  logoFrame logo图片的frame
 *  @param  sloganFrame slogan的frame
 *  @param  numberFrame 号码栏的frame
 *  @param  loginFrame 登录按钮的frame
 *  @param  changeBtnFrame 切换到其他方式按钮的frame
 *  @param  privacyFrame 协议整体(包括checkBox)的frame
*/
@property (nonatomic, copy) void(^customViewLayoutBlock)(CGSize screenSize, CGRect contentViewFrame, CGRect navFrame, CGRect titleBarFrame, CGRect logoFrame, CGRect sloganFrame, CGRect numberFrame, CGRect loginFrame, CGRect changeBtnFrame, CGRect privacyFrame);

@end

YuyanCustomModel中Slogan文案设置model

@interface YuyanCustomSloganModel : NSObject

/**slogan文案,内容、字体、大小、颜色*/
@property (nonatomic, copy) NSAttributedString *text;

/**slogan是否隐藏,默认NO*/
@property (nonatomic, assign) BOOL isHidden;

/**构建slogan的frame, view布局或布局发生变化时调用, y坐标基准线为导航栏底部, 不实现则按默认处理*/
@property (nonatomic, copy) CGRect(^frameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

@end

YuyanCustomModel中导航栏设置model(仅全屏模式需要)

@interface YuyanCustomNavModel : NSObject

/**导航栏是否隐藏,默认NO*/
@property (nonatomic, assign) BOOL isHidden;

/**导航栏主题色, 默认[UIColor whiteColor]*/
@property (nonatomic, strong) UIColor *color;

/**导航栏标题,内容、字体、大小、颜色*/
@property (nonatomic, copy) NSAttributedString *title;

/**导航栏返回按钮图片*/
@property (nonatomic, strong) UIImage *backImage;

/**是否隐藏授权页导航栏返回按钮,默认NO*/
@property (nonatomic, assign) BOOL hideBackItem;

/**导航栏右侧自定义控件,可以在创建该VIEW的时候添加手势操作,或者创建按钮或其他赋值给VIEW*/
@property (nonatomic, strong) UIView *moreView;

/**构建导航栏返回按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理*/
@property (nonatomic, copy) CGRect(^backButtonFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

/**构建导航栏标题的frame,view布局或布局发生变化时调用,不实现则按默认处理*/
@property (nonatomic, copy) CGRect(^titleFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

/**构建导航栏右侧more view的frame,view布局或布局发生变化时调用,不实现则按默认处理*/
@property (nonatomic, copy) CGRect(^moreViewFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

@end

YuyanCustomModel中登录按钮设置model

@interface YuyanCustomLoginBtnModel : NSObject

/**登陆按钮文案,内容、字体、大小、颜色*/
@property (nonatomic, strong) NSAttributedString *text;

/**登录按钮背景图片组,默认高度50.0pt,@[激活状态的图片,失效状态的图片,高亮状态的图片]*/
@property (nonatomic, strong) NSArray<UIImage *> *bgImgs;

/**
 *  是否自动隐藏点击登录按钮之后授权页上转圈的 loading, 默认为YES,在获取登录Token成功后自动隐藏
 *  如果设置为 NO,需要自己手动调用 hideLoginLoading 隐藏
 */
@property (nonatomic, assign) BOOL autoHideLoginLoading;

/**
 *  构建登录按钮的frame, view布局或布局发生变化时调用, y坐标基准线为导航栏底部, 不实现则按默认处理
 *  注:不能超出父视图 content view,height不能小于40,width不能小于父视图宽度的一半
 */
@property (nonatomic, copy) CGRect(^frameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

/**
 * 手动隐藏一键登录获取登录Token之后的等待动画,默认为自动隐藏
 * 当设置 autoHideLoginLoading = NO 时, 可调用该方法手动隐藏
 */
- (void)hideLoginLoading;

#pragma mark - 点击事件

/**点击登录按钮, isActive: 是否激活*/
@property (nonatomic, copy) void (^didClick)(BOOL isActive);

@end

YuyanCustomModel中logo图设置model

@interface YuyanCustomLogoModel : NSObject

/**logo图片*/
@property (nonatomic, strong, nullable) UIImage *image;

/**logo是否隐藏*/
@property (nonatomic, assign) BOOL isHidden;

/**构建logo的frame, y坐标基准线为导航栏底部, view布局或布局发生变化时调用, 不实现则按默认处理*/
@property (nonatomic, copy) CGRect(^frameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

@end

YuyanCustomModel中协议文案设置model

@interface YuyanCustomAgreementModel : NSObject

/**checkBox图片组,[uncheckedImg,checkedImg]*/
@property (nonatomic, copy) NSArray<UIImage *> *images;

/**checkBox是否勾选,默认NO,点击后刷新*/
@property (nonatomic, assign) BOOL isChecked;

/**checkBox是否隐藏,默认NO*/
@property (nonatomic, assign) BOOL checkBoxIsHidden;

/**checkBox大小,高宽一样,必须大于0*/
@property (nonatomic, assign) CGFloat checkBoxWH;

/**协议1,[协议名称,协议Url],注:两个协议名称不能相同*/
@property (nonatomic, copy) NSArray<NSString *> *privacyOne;

/**协议2,[协议名称,协议Url],注:两个协议名称不能相同*/
@property (nonatomic, copy) NSArray<NSString *> *privacyTwo;

/**协议内容颜色数组,[非点击文案颜色,点击文案颜色]*/
@property (nonatomic, copy) NSArray<UIColor *> *colors;

/**协议文案对其方式, 支持居中、居左设置,默认居左*/
@property (nonatomic, assign) NSTextAlignment alignment;

/**协议文案 前缀*/
@property (nonatomic, copy) NSString *preText;

/**协议文案 后缀*/
@property (nonatomic, copy) NSString *sufText;

/**运营商协议名称前缀文案,仅支持 <([《(【『*/
@property (nonatomic, copy) NSString *operatorPreText;

/**运营商协议名称后缀文案,仅支持 >)]》)】』*/
@property (nonatomic, copy) NSString *operatorSufText;

/**文案字体*/
@property (nonatomic, strong) UIFont *font;

/**
 *  构建协议整体(包括checkBox)的frame,view布局或布局发生变化时调用,不实现则按默认处理
 *  如果设置的width小于checkBox的宽则不生效,最小x、y为0,最大width、height为父试图宽高
 *  最终会根据设置进来的width对协议文本进行自适应,得到的size是协议控件的最终大小
 */
@property (nonatomic, copy) CGRect(^frameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);

#pragma mark - 协议详情页

/**导航栏背景颜色设置*/
@property (nonatomic, strong) UIColor *navColor;

/**导航栏标题字体、大小*/
@property (nonatomic, strong) UIFont *navTitleFont;

/**导航栏标题颜色*/
@property (nonatomic, strong) UIColor *navTitleColor;

/**导航栏返回图片*/
@property (nonatomic, strong) UIImage *navBackImage;

#pragma mark - 点击事件

/**点击点击隐私协议, urlStr: 被点击协议的URL*/
@property (nonatomic, copy) void (^didClickPrivacy)(NSString *urlStr);

/**点击checkBox, isSelected: 是否选中*/
@property (nonatomic, copy) void (^didClickCheckBox)(BOOL isSelected);

@end

接口作用

调用拉起授权页方法后将会调起运营商授权页面。该方法会拉起登录界面,已登录状态请勿调用 。

使用场景

  • 用户进行一键登录操作时,调用一键登录方法,如果SDK初始化且一键登录功能初始化成功,SDK将会拉起授权页面,用户授权后,SDK将返回取号 token给到应用客户端,取号token有效期2min,一次有效。
  • 需在调用预初始化方法之后调用
  • 在预取号成功之后调用,预取号失败不建议调用
  • 已登录状态请勿调用

示例代码

#import <YuyanOneClickLogin/YuyanOneClickLogin.h>
		、、、
    、、、
// 拉取授权页界面设置  全屏样式demo示例
- (YuyanCustomModel *)fullScreenModel {
      YuyanCustomModel *viewModel = [YuyanCustomModel new];
      if (@available(iOS 13.0, *)) {
        // 状态栏样式
            viewModel.preferredStatusBarStyle = UIStatusBarStyleDarkContent;
        } else {
            viewModel.preferredStatusBarStyle = UIStatusBarStyleDefault;
        }
        // 支持界面方向
        viewModel.supportedInterfaceOrientations = UIInterfaceOrientationMaskPortrait;
        // 返回按钮
        viewModel.nav.backImage = [UIImage imageNamed:@"close"];
        // logo
        viewModel.logo.image = [UIImage imageNamed:@"logo"];
      	// logo尺寸
        viewModel.logo.frameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect 					frame) {
            CGFloat width = 300;
            CGFloat height = 200;
            CGFloat x = (superViewSize.width - width) / 2.0;
            CGFloat y = superViewSize.height / 2.0 - width;
            return CGRectMake(x, y, width, height);
        };
       	// slogan文案是否隐藏
        viewModel.slogan.isHidden = YES;
    		// 号码字体尺寸
        viewModel.numberFont = [UIFont systemFontOfSize:34];
        CGFloat width = [UIScreen mainScreen].bounds.size.width;
      	// 一键登录按钮背景
        viewModel.loginBtn.bgImgs = @[
            [self imageWithSize:CGSizeMake(width, 50) color:[UIColor blueColor] 													cornerRadius:25],
            [self imageWithSize:CGSizeMake(width, 50) color:[UIColor grayColor] 													cornerRadius:25],
            [self imageWithSize:CGSizeMake(width, 50) color:[UIColor yellowColor] 												cornerRadius:25]
        ];
      	// 一键登录按钮文案
        viewModel.loginBtn.text = [[NSAttributedString alloc] initWithString:@"本机号码一键登						录"];
        // 用户协议
        viewModel.agreement.privacyOne = @[@"《雨燕用户协议》", @"https://www.baidu.com"];
        viewModel.agreement.privacyTwo = @[@"《雨燕隐私协议》", @"https://www.baidu.com"];
      	// 用户协议frame
        viewModel.agreement.frameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, 						CGRect frame) {
            CGFloat x = 30;
            CGFloat y = superViewSize.height / 2.0 + 100;
            CGFloat width = superViewSize.width -  x * 2;
            return CGRectMake(x, y, width, 50);
        };
        // 用户协议颜色
        viewModel.agreement.colors = @[[UIColor grayColor], [UIColor redColor]];
        viewModel.changeBtnIsHidden = YES;
        
        UIView *redView = [UIView new];
        redView.backgroundColor = [UIColor redColor];
        
        UIView *greenView = [UIView new];
        greenView.backgroundColor = [UIColor greenColor];
        
        UIView *blueView = [UIView new];
        blueView.backgroundColor = [UIColor blueColor];
        // 自定义控件添加,注意:自定义视图的创建初始化和添加到父视图,都需要在主线程!!
        viewModel.customViewBlock = ^(UIView *superCustomView) {
            [superCustomView addSubview:redView];
            [superCustomView addSubview:greenView];
            [superCustomView addSubview:blueView];
        };
        // 该block实现里面可设置自定义添加控件的frame
        viewModel.customViewLayoutBlock = ^(CGSize screenSize, CGRect contentViewFrame, 							CGRect navFrame, CGRect titleBarFrame, CGRect logoFrame, CGRect sloganFrame, 								CGRect numberFrame, CGRect loginFrame, CGRect changeBtnFrame, CGRect  											privacyFrame) {

            CGFloat x = (contentViewFrame.size.width - 300) / 2.0;
            CGFloat y = contentViewFrame.size.height - 300;

            redView.frame = CGRectMake(x, y, 100, 100);
            greenView.frame = CGRectMake(x + 100, y, 100, 100);
            blueView.frame = CGRectMake(x + 200, y, 100, 100);
        };
  }

// 拉取授权页界面设置  弹窗样式demo示例
- (YuyanCustomModel *)alertModel {
      YuyanCustomModel *viewModel = [YuyanCustomModel new];
  		if (@available(iOS 13.0, *)) {
            viewModel.preferredStatusBarStyle = UIStatusBarStyleDarkContent;
        } else {
            viewModel.preferredStatusBarStyle = UIStatusBarStyleDefault;
        }
        
        viewModel.contentViewFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
            CGFloat width = screenSize.width - 30 * 2;
            CGFloat height = 428;
            CGFloat x = (superViewSize.width - width) / 2.0;
            CGFloat y = (superViewSize.height - height) / 2.0;
            return CGRectMake(x, y, width, height);
        };
        
        viewModel.supportedInterfaceOrientations = UIInterfaceOrientationMaskPortrait;
        
        viewModel.alert.titleBarColor = [UIColor whiteColor];
        viewModel.alert.title = [[NSMutableAttributedString alloc] initWithString:@""];
        
        viewModel.alert.closeImage = [UIImage imageNamed:@"all_close_icon"];
        
        viewModel.logo.isHidden = YES;
        
        viewModel.slogan.isHidden = YES;
        
        viewModel.numberFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
            CGFloat width = frame.size.width;
            CGFloat x = (superViewSize.width - width) / 2.0;
            CGFloat y = 66-44;
            return CGRectMake(x, y, width, 45);
        };
        viewModel.numberFont = [UIFont systemFontOfSize:32 weight:UIFontWeightMedium];
        viewModel.numberColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];
        
        UIColor *blueColor = [UIColor colorWithRed:31/255.0 green:167/255.0 blue:247/255.0 alpha:1.0];
        
        CGFloat width = 250;
        viewModel.loginBtn.bgImgs = @[
          // 登录按钮背景
            [self imageWithSize:CGSizeMake(width, 50) color:blueColor cornerRadius:25],
            [self imageWithSize:CGSizeMake(width, 50) color:[UIColor grayColor] cornerRadius:25],
            [self imageWithSize:CGSizeMake(width, 50) color:blueColor cornerRadius:25]
        ];
        viewModel.loginBtn.frameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
            CGFloat x = (superViewSize.width - width) / 2.0;
            CGFloat y = 135 - 44;
            CGFloat height = 50;
            return CGRectMake(x, y, width, height);
        };
        NSMutableAttributedString *loginBtnText = [[NSMutableAttributedString alloc] initWithString:@"本机号码一键登录"];
        [loginBtnText addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, loginBtnText.length)];
        viewModel.loginBtn.text = loginBtnText;
        
        viewModel.agreement.privacyOne = @[@"《雨燕用户协议》", @"https://www.baidu.com"];
        viewModel.agreement.privacyTwo = @[@"《雨燕隐私协议》", @"https://www.baidu.com"];
        viewModel.agreement.frameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
            CGFloat x = 30;
            CGFloat y = 205 - 44;
            CGFloat width = superViewSize.width -  x * 2;
            return CGRectMake(x, y, width, 50);
        };
        viewModel.agreement.colors = @[[UIColor grayColor], blueColor];
        viewModel.agreement.checkBoxWH = 22;
        viewModel.agreement.images = @[[UIImage imageNamed:@"login_xieyi_def"], [UIImage imageNamed:@"login_xieyi_slt"]];
        viewModel.changeBtnIsHidden = YES;
        // 其他登录方式视图
        YuyanOtherLoginView *otherLoginView = [YuyanOtherLoginView defaultView];
        UILabel *otherLoginLabel = [UILabel new];
        otherLoginLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightRegular];
        otherLoginLabel.textColor = [UIColor colorWithRed:153/255.0 green:153/255.0 blue:153/255.0 alpha:1.0];
        otherLoginLabel.text = @"其它方式登录";
        otherLoginLabel.textAlignment = NSTextAlignmentCenter;
        viewModel.customViewBlock = ^(UIView *superCustomView) {
            [superCustomView addSubview:otherLoginView];
            [superCustomView addSubview:otherLoginLabel];
        };
        
        viewModel.customViewLayoutBlock = ^(CGSize screenSize, CGRect contentViewFrame, CGRect navFrame, CGRect titleBarFrame, CGRect logoFrame, CGRect sloganFrame, CGRect numberFrame, CGRect loginFrame, CGRect changeBtnFrame, CGRect privacyFrame) {
            CGFloat width = contentViewFrame.size.width;
            CGFloat height = 44;
            CGFloat x = 0;
            CGFloat y = contentViewFrame.size.height - 44 - titleBarFrame.size.height - 40;
            otherLoginView.frame = CGRectMake(x, y, width, height);
            otherLoginLabel.frame = CGRectMake(x, y - 30 - 17, width, 17);
        };
  
}
      
- (void)YuyanAuthPageLogin {
  	// 拉取授权页 全屏模式示例
  	[YuyanSDKManager getLoginTokenWithModel:[self fullScreenModel] complete:^(NSString * 					_Nullable token, 	  		NSError * _Nullable error) {
        if(error) {
            NSLog(@"%@", error);
        }
        if (token) {
            NSLog(@"获取到取号token -> %@", token);
        }
      	// 销毁授权页 授权页推出方式为present 所以选择传入控制器的presentedViewController来进行销毁
      	[self.presentedViewConotroller dismissViewControllerAnimated:YES completion:nil];
    }];
}

5.3 本机号码校验

5.3.1 号码校验功能初始化

/**
 初始化本机校验功能
 */
+ (void)initGetTokenModuleWithComplete:(void(^_Nullable)(NSError * _Nullable error))complete;

需要在SDK初始化成功后调用来进行校验功能的初始化

5.3.2 本机号码校验

/**
 * @brief  获取本机号码校验token
 * @param  phone    需要进行校验的手机号码
 * @param  complete 结果回调(异步) 返回加密后校验token
 */
+ (void)getTokenWithPhone:(NSString *)phone complete:(void (^)(NSString *token, NSError * _Nullable error))complete;

接口作用

验证指定手机号与本机SIM卡是否一致,校验token有效期2min,一次有效

使用场景

  • SDK初始化成功后调用。
  • 输入有效手机号码后请求token
  • 可在初始化成功后任意界面调用示例代码
  • 建议对号码有效性做判断

示例代码

#import <YuyanOneClickLogin/YuyanOneClickLogin.h>

...
// 根据用户输入手机号获取校验token
- (void)getTokenWhithNumber:(UITextFiled *)phoneTextFiled {
  	[YuyanSDKManager getTokenWithPhone:phoneTextFiled.text complete:^(NSString * _Nonnull  			token, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"校验token->%@",token);
        }
    }];
}

6. 常见问题及错误码

错误码 详解
500001 SDK未初始化
500002 初始化参数错误
500003 可用余额不足
600003 雨燕一键登陆功能未初始化
600004 雨燕本机号码验证功能未初始化
600005 一键登陆参数错误
600006 手机号验证参数错误
600002 唤起授权页失败
600004 获取运营商配置信息失败
600007 未检测到sim卡
600008 蜂窝网络未开启
600009 无法判运营商
600010 未知异常
600011 获取token失败
600012 预取号失败
600013 运营商维护升级,该功能不可用
600014 运营商维护升级,该功能已达最大调用次数
600015 接口超时
600017 AppID、Appkey解析失败
600021 运营商已切换
600025 终端环境检测失败(终端不支持认证 / 终端检测参数错误)
600026 授权页已加载时不允许调用加速或预取号接口
600030 接口请求失败
600031 网络错误
600032 客户端设备时间错误
600033 功能不可用,需要到控制台开通对应功能
600034 不合法的SDK密钥
600035 状态繁忙
600036 业务停机

作者

huacai@admobile.top

bale@admobile.top

商务合作

tomato@admobile.top

Comments ( 0 )

Sign in for post a comment

About

ADmobile号码认证服务与阿里云号码认证服务合作,整合三大运营商特有的数据网关认证能力,通过用户一键授权获取手机号码或快速校验用户输入号码与本机号码是否一致,升级短信验证码体验,应用于用户注册、登录、安全校验等场景,可实现用户无感知校验,操作更安全、便捷、低时延。 spread retract
Objective-C and 2 more languages
Apache-2.0
Cancel

Releases

No release

Contributors

All

Activities

load more
can not load any more
Objective-C
1
https://gitee.com/admobile/yuyan-auth-demo-ios.git
git@gitee.com:admobile/yuyan-auth-demo-ios.git
admobile
yuyan-auth-demo-ios
一键登录YuyanAuthDemo-iOS
master

Search