本文為您介紹融合認證功能Demo的運行步驟及示例代碼,幫助您快速了解融合認證功能。iOS客戶端SDK集成的詳細接入步驟及用法,請參見融合認證iOS客戶端接入。
步驟一:下載并解壓SDK
使用工具和環境搭建相關可參考準備工作。
登錄號碼認證產品控制臺,在概覽頁面右側API&SDK區域,單擊立即下載,進入API&SDK頁面,根據頁面提示下載并解壓對應SDK。
步驟二:打開Demo項目
使用Xcode打開Demo,項目載入過程會拉取相關依賴,請耐心等待。
修改BundleID為您的BundleID,BundleID與您在阿里云控制臺申請方案號時的保持一致。
步驟三:選擇訪問模式
為方便用戶在服務端尚未搭建成功的情況下運行Demo,阿里云在Demo中添加了快速訪問模式。在pch文件中設置DEMO_DEBUG_MODE的值即可使用不同的訪問模式。
DEMO_DEBUG_MODE:設置為1時,為快速訪問模式。
DEMO_DEBUG_MODE:設置為2時,為正常訪問模式(默認為2,正常訪問模式)。
正常訪問模式
正常訪問模式需要接入融合認證服務端和客戶端SDK,進行正式調試并可以體驗全部功能。
請先根據開發指南接入融合認證服務端App Server,通過訪問App Server獲取鑒權Token,并通過訪問App Server做最終認證結果校驗。
在pch文件中修改相關參數:
DEMO_DEBUG_MODE:請填寫2。
DEMO_SCHEME_CODE:請填入在控制臺已創建的方案Code。
DEMO_APP_SERVER_HOST:請填入搭建App Server的地址。
DEMO_AUTHTOKENA_API:請填入鑒權Token獲取服務端接口。
DEMO_VERIFY_API:請填入號碼校驗服務端接口。
DEMO_TOKEN_EXPIR_TIME:請填入鑒權Token超時時間。
快速訪問模式
快速訪問模式可暫不接入服務端API,適合快速調試Demo并體驗基礎或部分功能。
在OpenAPI門戶填寫接口參數。參數詳情,請參見GetFusionAuthToken - 融合認證獲取鑒權token。
說明SchemeCode:請填寫在控制臺創建的方案Code。
PackageName:請在app/build.gradle文件
android.defaultConfig.applicationId
屬性查看包名。PackageSign:包簽名,您可以通過手機終端下載并安裝Android App簽名獲取工具,獲取Android App的包簽名信息,便于認證過程進行鑒權。
單擊發起調用。
在調用結果頁,獲取臨時鑒權Token。
獲取臨時鑒權Token后,請填入Demo的pch文件中修改以下參數:
DEMO_DEBUG_MODE:請填1。
DEMO_SCHEME_CODE:請填入在控制臺已創建的方案Code。
DEMO_TEMPORATY_TOKEN:請填入已獲取的臨時鑒權Token。
Demo運行完畢后,在AlicomFusionAuthCallBack回調的
onVerifySuccess
方法中獲取號碼校驗Token,通過Token在控制臺進行換號校驗操作,可參見融合認證服務端集成。
步驟四:構建及運行
將iOS系統的手機連接到電腦上,打開開發者模式和開發者模式下的USB調試模式。
構建并運行項目后進行功能試用。
示例代碼
創建實例對象
NSString *tokenStr = [AlicomFusionAuthTokenManager shareInstance].authTokenStr;
AlicomFusionAuthToken *token = [[AlicomFusionAuthToken alloc] initWithTokenStr:tokenStr];
self.handler = [[AlicomFusionAuthHandler alloc] initWithToken:token schemeCode:DEMO_SCHEME_CODE];
[self.handler setFusionAuthDelegate:self];
開始場景
[self.handler startSceneUIWithTemplateId:self.currTemplateId viewController:controller delegate:self];
場景處理
- (void)dealWithPhone:(NSString *)phoneNum {
if (phoneNum.length < 11) {
[AlicomFusionToastTool showToastMsg:@"獲取手機號失敗"];
return;
}
if ([AlicomFusionTemplateId_100001 isEqualToString:self.currTemplateId]) {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:phoneNum forKey:kDEMO_UD_PHONE_NUM];
[ud synchronize];
[AlicomFusionToastTool showToastMsg:@"登錄成功"];
[self.handler stopSceneWithTemplateId:self.currTemplateId];
} else if ([AlicomFusionTemplateId_100002 isEqualToString:self.currTemplateId]) {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:phoneNum forKey:kDEMO_UD_PHONE_NUM];
[ud synchronize];
[AlicomFusionToastTool showToastMsg:@"修改手機號成功"];
[self.handler stopSceneWithTemplateId:self.currTemplateId];
} else if ([AlicomFusionTemplateId_100003 isEqualToString:self.currTemplateId]) {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *loginPhone = [ud objectForKey:kDEMO_UD_PHONE_NUM];
if ([phoneNum isEqualToString:loginPhone]) {
[AlicomFusionToastTool showToastMsg:@"手機號驗證通過,可以去修改密碼了"];
[self.handler stopSceneWithTemplateId:self.currTemplateId];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if ([self.delegate respondsToSelector:@selector(verifySuccess)]){
[self.delegate verifySuccess];
}
});
} else {
[AlicomFusionToastTool showToastMsg:@"手機號驗證不通過"];
[self.handler continueSceneWithTemplateId:self.currTemplateId isSuccess:NO];
}
} else if ([AlicomFusionTemplateId_100004 isEqualToString:self.currTemplateId]) {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:phoneNum forKey:kDEMO_UD_PHONE_NUM];
[ud synchronize];
[AlicomFusionToastTool showToastMsg:@"新手機號綁定成功"];
[self.handler stopSceneWithTemplateId:self.currTemplateId];
} else if ([AlicomFusionTemplateId_100005 isEqualToString:self.currTemplateId]) {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *loginPhone = [ud objectForKey:kDEMO_UD_PHONE_NUM];
if ([phoneNum isEqualToString:loginPhone]) {
[AlicomFusionToastTool showToastMsg:@"手機號驗證通過"];
[self.handler stopSceneWithTemplateId:self.currTemplateId];
} else {
[AlicomFusionToastTool showToastMsg:@"手機號驗證不通過"];
[self.handler continueSceneWithTemplateId:self.currTemplateId isSuccess:NO];
}
}
}
#pragma mark - AlicomFusionAuthDelegate
/**
* token需要更新
* @note 必選回調,handler 初始化&歷史token過期前5分鐘,會觸發此回調,由SDK維護token的生命周期
* @param handler handler
* @return token,APP更新最新token后,組裝AlicomFusionAuthToken返回給到SDK,SDK會通過此token進行鑒權更新
*/
- (AlicomFusionAuthToken *)onSDKTokenUpdate:(AlicomFusionAuthHandler *)handler {
NSLog(@"%s,調用",__func__);
NSString *tokenStr = [AlicomFusionAuthTokenManager updateAuthToken];
AlicomFusionAuthToken *token = [[AlicomFusionAuthToken alloc] initWithTokenStr:tokenStr];
return token;
}
/**
* token鑒權成功
* @note 必選回調,token鑒權成功后,才可以調用startScene接口拉起場景
* @param handler handler
*/
- (void)onSDKTokenAuthSuccess:(AlicomFusionAuthHandler *)handler {
NSLog(@"%s,調用",__func__);
self.isActive = YES;
self.reGetTime = 3;
}
/**
* token鑒權失敗
* @note 必選回調,token初次鑒權失敗&token更新后鑒權失敗均會觸發此回調
* @note token鑒權失敗后,無法繼續使用SDK的功能,請銷毀SDK后重新初始化
* @param handler handler
* @param failToken 錯誤token
* @param error 錯誤定義
*/
- (void)onSDKTokenAuthFailure:(AlicomFusionAuthHandler *)handler
failToken:(AlicomFusionAuthToken *)failToken
error:(AlicomFusionEvent *)error {
NSLog(@"%s,調用:{\n%@}",__func__,error.description);
self.isActive = NO;
if (self.reGetTime > 0) {
NSString *tokenStr = [AlicomFusionAuthTokenManager updateAuthToken];
AlicomFusionAuthToken *token = [[AlicomFusionAuthToken alloc] initWithTokenStr:tokenStr];
[handler updateToken:token];
self.reGetTime --;
} else {
self.reGetTime = 3;
[self.handler destroy];
self.handler = nil;
[AlicomFusionAuthTokenManager shareInstance].authTokenStr = nil;
return;
}
}
/**
* 認證成功
* @note 必選回調
* @note 可以使用碼號效驗maskToken去APP Server做最終驗證換取真實手機號碼,如果換取手機號失敗,可以通過SDK的continue接口繼續后續場景流程
* @param handler handler
* @param maskToken 碼號效驗token
*/
- (void)onVerifySuccess:(AlicomFusionAuthHandler *)handler
nodeName:(nonnull NSString *)nodeName
maskToken:(NSString *)maskToken
event:(nonnull AlicomFusionEvent *)event {
NSLog(@"%s,調用.nodeName=%@",__func__,nodeName);
//換手機號
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool showLoading];
});
[AlicomFusionNetAdapter verifyTokenRequest:maskToken complete:^(id data,NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool hideLoading];
if (data&&!error){
//保存手機號
if ([data isKindOfClass:NSDictionary.class]) {
NSString *verifyResult = ((NSDictionary *)data)[@"VerifyResult"];
if ([@"PASS" isEqualToString:verifyResult]) {
[self dealWithPhone:((NSDictionary *)data)[@"PhoneNumber"]];
} else if ([@"REJECT" isEqualToString:verifyResult] || [@"UNKNOW" isEqualToString:verifyResult]) {
if ([nodeName isEqualToString:AlicomFusionNodeNameNumberAuth]) {
[AlicomFusionToastTool showToastMsg:@"一鍵登錄失敗"];
} else if ([nodeName isEqualToString:AlicomFusionNodeNameVerifyCodeAuth]) {
[AlicomFusionToastTool showToastMsg:@"獲取手機號失敗,請檢查驗證碼是否正確或是否過期"];
} else if ([nodeName isEqualToString:AlicomFusionNodeNameUpGoingAuth]) {
[AlicomFusionToastTool showToastMsg:@"獲取手機號失敗,請檢查短信是否發送成功"];
}
if (![AlicomFusionNodeNameVerifyCodeAuth isEqualToString:nodeName]) {
[self.handler continueSceneWithTemplateId:self.currTemplateId isSuccess:NO];
}
}
} else {
if (![AlicomFusionNodeNameVerifyCodeAuth isEqualToString:nodeName]) {
[self.handler continueSceneWithTemplateId:self.currTemplateId isSuccess:NO];
}
}
}else{
//結束認證
[self.handler stopSceneWithTemplateId:self.currTemplateId];
[AlicomFusionToastTool showToastMsg:error.userInfo[NSLocalizedDescriptionKey] ?:@"操作失敗"];
}
});
}];
}
- (void)onHalfwayVerifySuccess:(AlicomFusionAuthHandler *)handler nodeName:(NSString *)nodeName maskToken:(NSString *)maskToken event:(nonnull AlicomFusionEvent *)event resultBlock:(void (^)(BOOL))resultBlock {
NSLog(@"%s,調用.nodeName=%@",__func__,nodeName);
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool showLoading];
});
[AlicomFusionNetAdapter verifyTokenRequest:maskToken complete:^(id data,NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool hideLoading];
if (data&&!error){
//保存手機號
if ([data isKindOfClass:NSDictionary.class]) {
NSString *verifyResult = ((NSDictionary *)data)[@"VerifyResult"];
if ([@"PASS" isEqualToString:verifyResult]) {
[AlicomFusionToastTool showToastMsg:@"校驗成功"];
if (resultBlock) {
resultBlock(YES);
}
} else if ([@"REJECT" isEqualToString:verifyResult] || [@"UNKNOW" isEqualToString:verifyResult]) {
[AlicomFusionToastTool showToastMsg:@"校驗失敗"];
}
} else {
[AlicomFusionToastTool showToastMsg:@"校驗失敗"];
}
}else{
[AlicomFusionToastTool showToastMsg:@"校驗失敗"];
}
});
}];
}
- (void)onVerifyFailed:(AlicomFusionAuthHandler *)handler nodeName:(nonnull NSString *)nodeName error:(nonnull AlicomFusionEvent *)error {
NSLog(@"%s,nodeName=%@,調用:{\n%@}",__func__,nodeName,error.description);
if ([nodeName isEqualToString:AlicomFusionNodeNameVerifyCodeAuth]) {
if ([error.resultCode isEqualToString:AlicomFusionVerifyCodeFrequency] || [error.resultCode isEqualToString:AlicomFusionVerifyCodeRisk]) {
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool showToastMsg:error.resultMsg];
});
[self.handler continueSceneWithTemplateId:self.currTemplateId isSuccess:NO];
} else if ([AlicomFusionVerifyCodeAutoNumberShowFail isEqualToString:error.resultCode]) {
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool showToastMsg:error.resultMsg];
});
[self.handler stopSceneWithTemplateId:self.currTemplateId];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[AlicomFusionToastTool showToastMsg:error.resultMsg];
});
}
} else {
[self.handler continueSceneWithTemplateId:self.currTemplateId isSuccess:NO];
}
}
/**
* 認證結束
* @note 必選回調,SDK認證流程結束
* @param handler handler
* @param event 結束事件
*/
- (void)onTemplateFinish:(AlicomFusionAuthHandler *)handler event:(AlicomFusionEvent *)event {
NSLog(@"%s,調用:{\n%@}",__func__,event.description);
//結束認證
[self.handler stopSceneWithTemplateId:self.currTemplateId];
}
- (void)onProtocolClick:(AlicomFusionAuthHandler *)handler protocolName:(NSString *)protocolName protocolUrl:(NSString *)protocolUrl event:(AlicomFusionEvent *)event
{
NSLog(@"%s,調用:{\n%@}",__func__,event.description);
AlicomFusionWebViewController *controller = [[AlicomFusionWebViewController alloc] initWithUrl:protocolUrl andUrlName:protocolName];
UINavigationController *navigationController = self.currVC.navigationController;
if (self.currVC.presentedViewController) {
//如果授權頁成功拉起,這個時候則需要使用授權頁的導航控制器進行跳轉
navigationController = (UINavigationController *)self.currVC.presentedViewController;
}
[navigationController pushViewController:controller animated:YES];
}
- (void)onVerifyInterrupt:(AlicomFusionAuthHandler *)handler event:(AlicomFusionEvent *)event {
if ([event.resultCode isEqualToString:AlicomFusionStartLoading]) {
[AlicomFusionToastTool showLoading];
} else if ([event.resultCode isEqualToString:AlicomFusionEndLoading]) {
[AlicomFusionToastTool hideLoading];
} else {
[AlicomFusionToastTool showToastMsg:[NSString stringWithFormat:@"%@,%@", event.resultCode, event.resultMsg]];
}
}
/**
* 場景事件回調
* @note 可選回調,SDK場景流程中各個界面點擊事件&界面跳轉事件等UI相關回調
* @note 本回調接口僅做事件通知,不可再此回調內處理業務邏輯
* @param handler handler
* @param event 點擊事件,具體定義參考AlicomFusionEvent.h
*/
- (void)onAuthEvent:(AlicomFusionAuthHandler *)handler
eventData:(AlicomFusionEvent *)event {
NSLog(@"%s,調用:{\n%@}",__func__,event.description);
}
/**
* 填充手機號,用于校驗手機號是否和輸入的一致,或者重新綁定手機號場景自動填充手機號
* @note 必選回調,SDK內置UI部分手機號
* @note 比如重置密碼場景,需要先填寫原手機號碼進行第一步效驗,SDK需效驗該填寫值是否為真實的原手機號碼,或者重新綁定手機號場景自動填充手機號
* @param handler handler
* @param event 事件
* @return 返回當前用戶正在使用的手機號用于下一步操作
*/
- (NSString *)onGetPhoneNumberForVerification:(AlicomFusionAuthHandler *)handler
event:(nonnull AlicomFusionEvent *)event {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *phoneNum = [ud objectForKey:kDEMO_UD_PHONE_NUM];
return phoneNum;
}
自定義UI
#pragma mark - AlicomFusionAuthUIDelegate
- (void)onPhoneNumberVerifyUICustomDefined:(AlicomFusionAuthHandler *)handler
templateId:(nonnull NSString *)templateId
nodeId:(NSString *)nodeId
UIModel:(AlicomFusionNumberAuthModel *)model {
self.authmodel = model;
model.supportedInterfaceOrientations = UIInterfaceOrientationMaskPortrait;
model.presentDirection = AlicomFusionPresentationDirectionBottom;
model.suspendDisMissVC = NO;
model.navTitle = [[NSAttributedString alloc] initWithString:@"一鍵登錄"];
model.navColor = AlicomColorHex(0xEFF3F2);
model.logoIsHidden = YES;
model.numberColor = AlicomColorHex(0x262626);
model.numberFont = [UIFont systemFontOfSize:24];
NSDictionary *loginAttriDict = @{
NSFontAttributeName: [UIFont systemFontOfSize:16],
NSForegroundColorAttributeName: AlicomColorHex(0xFFFFFF)
};
NSMutableAttributedString *loginAttr = [[NSMutableAttributedString alloc] initWithString:@"一鍵登錄" attributes:loginAttriDict];
model.loginBtnText = loginAttr;
UIImage *unSelectImage = [AlicomFusionDemoUtil demoImageWithColor:AlicomColorHex(0x0064C8) size:CGSizeMake(ALICOM_FUSION_DEMO_SCREEN_WIDTH - 32, 44) isRoundedCorner:NO radius:0.0];
UIImage *selectImage = [AlicomFusionDemoUtil demoImageWithColor:AlicomColorHex(0x0064C8) size:CGSizeMake(ALICOM_FUSION_DEMO_SCREEN_WIDTH - 32, 44) isRoundedCorner:NO radius:0.0];
UIImage *heighLightImage = [AlicomFusionDemoUtil demoImageWithColor:AlicomColorHex(0x0064C8) size:CGSizeMake(ALICOM_FUSION_DEMO_SCREEN_WIDTH - 32, 44) isRoundedCorner:NO radius:0.0];
model.loginBtnBgImgs = @[unSelectImage, selectImage, heighLightImage];
NSDictionary *sloganAttriDict = @{
NSFontAttributeName: [UIFont systemFontOfSize:15],
NSForegroundColorAttributeName: AlicomColorHex(0x555555)
};
NSMutableAttributedString *sloganAttr = [[NSMutableAttributedString alloc] initWithString:@"阿里云為您提供認證服務" attributes:sloganAttriDict];
model.sloganText = sloganAttr;
model.privacyOperatorIndex = 2;
model.privacyOne = @[@"用戶協議",@"https://terms.alicdn.com/legal-agreement/terms/product/20230213121650869/20230213121650869.html"];
model.privacyTwo = @[@"個人信息保護政策",@"https://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud202112211045_86198.html?spm=a2c4g.11186623.0.0.72701a9edzzvbz"];
model.privacyConectTexts = @[@"、",@" 和 "];
model.privacyPreText = @"我已閱讀并同意 ";
model.privacyOperatorPreText = @"";
model.privacyOperatorSufText = @"";
model.privacyColors = @[AlicomColorHex(0x262626), AlicomColorHex(0x262626)];
model.privacyFont = [UIFont systemFontOfSize:14];
model.checkBoxIsHidden = NO;
model.checkBoxIsChecked = NO;
model.checkBoxWH = 21;
model.backgroundColor = AlicomColorHex(0xEFF3F2);
model.moreLoginActionBlock = ^{
NSLog(@"其他登錄方式");
};
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ALICOM_FUSION_DEMO_SCREEN_WIDTH, 100)];
label.text = @"登錄";
label.textColor = AlicomColorHex(0x262626);
label.font = [UIFont systemFontOfSize:24];
[label sizeToFit];
model.nameLabel = label;
UIButton *otherLogin = [UIButton buttonWithType:UIButtonTypeCustom];
[otherLogin setTitle:@"其他手機號登錄" forState:UIControlStateNormal];
otherLogin.backgroundColor = UIColor.whiteColor;
[otherLogin setTitleColor:AlicomColorHex(0x262626) forState:UIControlStateNormal];
otherLogin.titleLabel.font = [UIFont systemFontOfSize:16];
[otherLogin addTarget:self action:@selector(otherPhoneLoginClick) forControlEvents:UIControlEventTouchUpInside];
model.otherLoginButton = otherLogin;
model.numberFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGFloat x = (screenSize.width - frame.size.width) * 0.5;
CGFloat y = 214;
CGRect rect = CGRectMake(x, y, frame.size.width, frame.size.height);
return rect;
};
model.sloganFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGFloat y = 252;
CGRect rect = CGRectMake(frame.origin.x, y, frame.size.width, frame.size.height);
return rect;
};
model.loginBtnFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGFloat y = 318;
CGRect rect = CGRectMake(frame.origin.x, y, frame.size.width, frame.size.height);
return rect;
};
model.nameLabelFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
return frame;
};
model.otherLoginButtonFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
return frame;
};
model.privacyFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGRect rect = CGRectMake(frame.origin.x, screenSize.height - 60 - ALICOM_FUSION_DEMO_STATUS_BAR_HEIGHT - frame.size.height - 34, frame.size.width, frame.size.height);
return rect;
};
model.customViewLayoutBlock = ^(CGSize screenSize, CGRect contentViewFrame, CGRect nameLabelFrame, CGRect otherLoginBtnFrame, CGRect navFrame, CGRect titleBarFrame, CGRect logoFrame, CGRect sloganFrame, CGRect numberFrame, CGRect loginFrame, CGRect changeBtnFrame, CGRect privacyFrame) {
};
model.customViewBlock = ^(UIView * _Nonnull superCustomView) {};
model.privacyAlertIsNeedShow = YES;
model.privacyAlertIsNeedAutoLogin = YES;
model.privacyAlertCornerRadiusArray = @[@4, @4, @4, @4];
model.privacyAlertTitleFont = [UIFont systemFontOfSize:16];
model.privacyAlertTitleColor = AlicomColorHex(0x262626);
model.privacyAlertContentFont = [UIFont systemFontOfSize:16];
model.privacyAlertContentAlignment = NSTextAlignmentCenter;
model.privacyAlertButtonTextColors = @[AlicomColorHex(0x0064C8), AlicomColorHex(0x0064C8)];
UIImage *imageUnselect = [AlicomFusionDemoUtil demoImageWithColor:AlicomColorHex(0xFFFFFF) size:CGSizeMake(ALICOM_FUSION_DEMO_SCREEN_WIDTH, 56) isRoundedCorner:NO radius:0.0];
UIImage *imageSelect = [AlicomFusionDemoUtil demoImageWithColor:AlicomColorHex(0xFFFFFF) size:CGSizeMake(ALICOM_FUSION_DEMO_SCREEN_WIDTH, 56) isRoundedCorner:NO radius:0.0];
model.privacyAlertBtnBackgroundImages = @[imageUnselect, imageSelect];
model.privacyAlertButtonFont = [UIFont systemFontOfSize:16];
model.tapPrivacyAlertMaskCloseAlert = NO;
model.privacyAlertMaskColor = AlicomColorHex(0x262626);
model.privacyAlertMaskAlpha = 0.88;
model.privacyAlertFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGRect rect = CGRectMake(27, (superViewSize.height - 200)*0.382, superViewSize.width - 54, 200);
return rect;
};
model.privacyAlertTitleFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGRect rect = CGRectMake(0, 32, frame.size.width, frame.size.height);
return rect;
};
model.privacyAlertPrivacyContentFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGRect rect = CGRectMake(24, 70, superViewSize.width - 48, frame.size.height);
return rect;
};
model.privacyAlertButtonFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
CGRect rect = CGRectMake(0, superViewSize.height - 56, superViewSize.width, 56);
return rect;
};
}
- (void)onSMSCodeVerifyUICustomDefined:(AlicomFusionAuthHandler *)handler
templateId:(nonnull NSString *)templateId
nodeId:(NSString *)nodeId
isAutoInput:(BOOL)isAutoInput
view:(AlicomFusionVerifyCodeView *)view {
self.verifyView = view;
}
- (void)onSMSSendVerifyUICustomDefined:(AlicomFusionAuthHandler *)handler
templateId:(nonnull NSString *)templateId
nodeId:(NSString *)nodeId
smsContent:(nonnull NSString *)smsContent
receiveNum:(nonnull NSString *)receiveNum
view:(AlicomFusionUpGoingView *)view {
self.upGoingView = view;
self.smsContent = smsContent;
self.receiveNum = receiveNum;
NSLog(@"smsContent-====%@,receiveNum=-------%@",smsContent,receiveNum);
}
- (void)onNavigationControllerCustomDefined:(AlicomFusionAuthHandler *)handler
templateId:(nonnull NSString *)templateId
nodeId:(NSString *)nodeId
navigation:(UINavigationController *)naviController {
}