进阶
使用默认的键盘配置方式
无需额外配置,直接使用 UI 控件:
配置项 | 默认值 | 说明 |
---|---|---|
键位显示与键值映射关系乱序 | NO | 默认不做映射处理 |
字母键盘乱序布局 | NO | 字母键盘不做默认不乱序布局,可根据实际使用情况配置 |
数字键盘乱序布局 | YES | 默认乱序布局,可根据实际使用情况配置 |
符号键盘乱序布局 | YES | 默认乱序布局,可根据实际使用情况配置 |
键位数据更新频率 | 5min | 切换安全键盘使用会话或者同一个使用会话超过5分钟,则会重新刷新键盘布局 |
设置拉取键位数据的网络接口实现
/// 设置网络拉取键位数据接口实现
+ (void)setFetchRemoteConfigDataNetHelper:(id<TMFSKGetKeyPositionNetHelper>)helper;
TMFSKGetKeyPositionNetHelper
网络接口协议定义:
/// 定义网络拉取键位数据的回调
typedef void(^SKGetKeyPositionCallback)(SKSCGetKeyPosition *resp);
/// 定义网络拉取键位数据的接口
@protocol TMFSKGetKeyPositionNetHelper <NSObject, NSCopying>
/// 设置网络请求的数据结构
- (void)setRequest:(SKCSGetKeyPosition *)requestDataModel;
/// 执行网络拉取接口
- (void)execute;
/// 拉取结果回调
- (void)setCallback:(nullable SKGetKeyPositionCallback)callback;
@end
网络接口方法说明:
方法名称 | 方法描述 | 是否需要重写方法 | 备注 |
---|---|---|---|
setRequest |
填充网络请求的字段数据 | N | 对 App 层透明,如果不需要在请求中附加额外的业务请求参数,可以不关系 |
execute |
网络请求的执行实现方法 | Y | App 可以自行实现网络通道拉取数据的能力,方便在已有网关服务上接入安全键盘组件 |
setCallback |
设置网络请求接口的回调 | N | 对 App 层透明,安全键盘业务底层已经实现 |
网络接口参数说明:
参数名称 | 参数类型 | 参数描述 | 必选 |
---|---|---|---|
requestDataModel |
SKCSGetKeyPosition |
网络请求的入参数据结构体 | Y |
resp |
SKSCGetKeyPosition |
网络请求的回包数据结构体 | Y |
shark
网关的网络请求键位数据实现举例:
#import "TMFSKGetKeyPositionNetHelper.h"
@interface SKGetKeyDataImpl : NSObject <TMFSKGetKeyPositionNetHelper>
@end
#import "SKGetKeyDataImpl.h"
#import "SKKeyboardPosition.h"
@interface SKGetKeyDataImpl ()
@property (atomic, strong) SKCSGetKeyPosition * requestData;
@property (atomic, copy) SKGetKeyPositionCallback callbackRef;
@end
@implementation SKGetKeyDataImpl
- (void)setRequest:(SKCSGetKeyPosition *)requestDataModel
{
self.requestData = requestDataModel;
}
- (void)setCallback:(SKGetKeyPositionCallback)callback
{
self.callbackRef = callback;
}
- (void)execute
{
// 从网络获取 SKSCGetKeyPosition *resp 对象并调用block
if (self.callbackRef) {
self.callbackRef(resp);
}
}
@end
设置键位数据的更新频率接口
切换安全键盘使用会话或者同一个使用会话超过5分钟,则会重新刷新键盘布局。
/// 自定义键位数据更新频率,更新包括:从网上重新拉取或者,键位数据重新乱序等
+ (void)setUpdateKeyPositionFrequency:(NSInteger)frequency;
自定义键位数据供应者接口
键位数据类型说明:
SKEPrimaryKeyCode
对键盘按键的操作码进行了统一定义:
SKEPrimaryKeyCode_EPKC_SHIFT = -1; // 功能类型按键:切换大小写
SKEPrimaryKeyCode_EPKC_MODE_CHANGE_NUMBER = -2; // 功能类型按键:切换到数字键盘
SKEPrimaryKeyCode_EPKC_MODE_CHANGE_LETTER = -3; // 功能类型按键:切换到字母键盘
SKEPrimaryKeyCode_EPKC_MODE_CHANGE_SYMBOL = -4; // 功能类型按键:切换到符号键盘
SKEPrimaryKeyCode_EPKC_CANCEL = -5; // 功能类型按键:取消输入
SKEPrimaryKeyCode_EPKC_DONE = -6; // 功能类型按键:输入完成
SKEPrimaryKeyCode_EPKC_DELETE = -7; // 功能类型按键:删除
SKEPrimaryKeyCode_EPKC_COLLAPSE = -8; // 功能类型按键:点击收起
SKEPrimaryKeyCode_EPKC_INPUT = 0; // 可输入类型按键
具体按键区域划分如下图(数字键盘为例):
/// 自定义键位数据供应者
/// @param positionProvider 键位数据供应者自定义实现,需要提供完整的键盘数据
- (void)customKeyPositionProvider:(TMFSKAbstractKeyPositionProvider *)positionProvider;
接口参数说明:
参数名称 | 参数类型 | 参数描述 | 必选 |
---|---|---|---|
positionProvider |
TMFSKAbstractKeyPositionProvider |
自定义键位数据供应者 | Y |
TMFSKAbstractKeyPositionProvider
抽象类的接口说明
方法名称 | 参数 | 方法描述 | 是否需要重写方法 | 备注 |
---|---|---|---|---|
- (NSArray <SKKeyPosition *>*)provideLetterKeyBoardPositions; |
VOID |
获取字母键盘的键位数据 | YES | 字母键盘的键位数据在这方法体内组装 |
- (NSArray <SKKeyPosition *>*)provideNumberKeyBoardPositions; |
VOID |
获取数字键盘的键位数据 | YES | 数字键盘的键位数据在这方法体内组装 |
- (NSArray <SKKeyPosition *>*)provideSymbolKeyBoardPositions; |
VOID |
获取符号键盘的键位数据 | YES | 数字键盘的键位数据在这方法体内组装 |
- (void)doShuffle:(BOOL)shuffle subKeyboard:(SKSubKeyboard)subKeyboard |
shuffle :YES (键位布局随机乱序);NO 键位布局按指定顺序;subKeyboard :指定子键盘,详情请查看SKSubKeyboard 中的定义 |
设置子键盘的键位是否乱序布局 | NO | - |
- (BOOL)setInputType:(SKInputType)inputType; |
inputType :限定键盘的输入类型,详情请查看SKInputType 中的定义 |
限制键盘的输入类型 | NO | - |
- (BOOL)checkKeyPositionData:(SKInputType)inputType; |
inputType :限定键盘的输入类型,详情请查看SKInputType 中的定义 |
检查键位数据与限定是输入类型是否匹配 | NO | - |
- (void)clearCaches; |
VOID |
清除缓存接口 | NO | 按需实现 |
- (void)setRefreshKeyPosition; |
VOID |
强制刷新键位布局 | NO | - |
- (void)appendFnKeyItemForLetterKeyboard:(NSMutableArray <SKKeyPosition *>*)keys; |
keys : 键位数据结构列表 |
为字母键盘添加默认的控制键位数据 | NO | 具体用法,请参见下方示例 |
- (void)appendFnKeyItemForNumberKeyboard:(NSMutableArray <SKKeyPosition *>*)keys; |
keys : 键位数据结构列表 |
为数字键盘添加默认的控制键位数据 | NO | 具体用法,请参见下方示例 |
- (void)appendFnKeyItemForSymbolKeyboard:(NSMutableArray <SKKeyPosition *>*)keys; |
keys : 键位数据结构列表 |
为字符键盘添加默认的控制键位数据 | NO | 具体用法,请参见下方示例 |
- (BOOL)hasLetters; |
VOID |
检查是否提供了字母键盘数据 | NO | - |
- (BOOL)hasDigits; |
VOID |
检查是否提供了数字键盘数据 | NO | - |
- (BOOL)hasSymbols; |
VOID |
检查是否提供了符号键盘数据 | NO | - |
TMFSKDefaultKeyPositionProvider
的实现
#import "TMFSKAbstractKeyPositionProvider.h"
@interface TMFSKDefaultKeyPositionProvider : TMFSKAbstractKeyPositionProvider
@end
#import "TMFSKDefaultKeyPositionProvider.h"
@implementation TMFSKDefaultKeyPositionProvider
- (NSArray<SKKeyPosition *> *)provideLetterKeyBoardPositions
{
BOOL needRefresh = NO;
@synchronized (mLetters)
{
if (mLetters.count == 0)
{
needRefresh = YES;
}
}
if (needRefresh)
{
NSMutableArray *ret = [self internalLetterKeyboardData];
if (mShuffleLetterKeyPosition)
{
[self shuffleArray:ret];
}
[self appendFnKeyItemForLetterKeyboard:ret];
@synchronized (mLetters)
{
[mLetters removeAllObjects];
[mLetters addObjectsFromArray:ret];
}
}
return mLetters.copy;
}
- (NSArray<SKKeyPosition *> *)provideNumberKeyBoardPositions
{
BOOL needRefresh = NO;
@synchronized (mNumbers)
{
if (mNumbers.count == 0)
{
needRefresh = YES;
}
}
if (needRefresh)
{
NSMutableArray *ret = [self internalNumberKeyboardData];
if (mShuffleNumberKeyPosition)
{
[self shuffleArray:ret];
}
[self appendFnKeyItemForNumberKeyboard:ret];
@synchronized (mNumbers)
{
[mNumbers removeAllObjects];
[mNumbers addObjectsFromArray:ret];
}
}
return mNumbers.copy;
}
- (NSArray<SKKeyPosition *> *)provideSymbolKeyBoardPositions
{
BOOL needRefresh = NO;
@synchronized (mSymbols)
{
if (mSymbols.count == 0)
{
needRefresh = YES;
}
}
if (needRefresh)
{
NSMutableArray *ret = [self internalSymbolKeyboardData];
if (mShuffleSymbolKeyPosition)
{
[self shuffleArray:ret];
}
[self appendFnKeyItemForSymbolKeyboard:ret];
@synchronized (mSymbols)
{
[mSymbols removeAllObjects];
[mSymbols addObjectsFromArray:ret];
}
}
return mSymbols.copy;
}
#pragma mark 默认为QWERTY键位布局
- (NSMutableArray <SKKeyPosition *> *)internalLetterKeyboardData
{
const NSString *letters = @"qwertyuiopasdfghjklzxcvbnm";
NSMutableArray *keys = NSMutableArray.new;
NSMutableArray *chars = [self charArrayFromString:letters];
NSMutableArray *values = [self getMagicCodeArray:chars shuffle:NO];
if (chars.count != values.count)
{
assert(NO);
return nil;
}
for (NSInteger i = 0; i < chars.count; i++)
{
NSString *letter = chars[i];
NSString *magicChar = values[i];
SKKeyPosition *key =
[SKKeyPosition keyPositionWithPrimaryKey:SKPrimaryKeyCodeInput displayText:letter];
[key setMagicCharWithLowercaseText:magicChar
uppercaseText:magicChar.uppercaseString];
[keys addObject:key];
}
return keys;
}
#pragma mark 生成数字键盘可输入键位的数据
- (NSMutableArray <SKKeyPosition *> *)internalNumberKeyboardData
{
const NSString *numberText = @"1234567890";
NSMutableArray *keys = NSMutableArray.new;
NSMutableArray *chars = [self charArrayFromString:numberText];
NSMutableArray *values = [self getMagicCodeArray:chars shuffle:NO];
if (chars.count != values.count)
{
assert(NO);
return nil;
}
for (NSInteger i = 0; i < chars.count; i++)
{
NSString *text = chars[i];
NSString *magicChar = values[i];
SKKeyPosition *key =
[SKKeyPosition keyPositionWithPrimaryKey:SKPrimaryKeyCodeInput displayText:text];
[key setMagicCharWithLowercaseText:magicChar
uppercaseText:magicChar];
[keys addObject:key];
}
return keys;
}
#pragma mark 假如是身份类型,加入X
- (void)appendFnKeyItemForNumberKeyboard:(NSMutableArray<SKKeyPosition *> *)keys
{
[super appendFnKeyItemForNumberKeyboard:keys];
if (mCurrInputType == SKInputTypeChinaIDCard)
{
SKKeyPosition *key = [SKKeyPosition keyPositionWithPrimaryKey:SKPrimaryKeyCodeInput displayText:@"X"];
[key setDisplayLowercaseText:@"X"
displayUppercaseText:@"X"];
[key setMagicCharWithLowercaseText:@"X"
uppercaseText:@"X"];
[keys addObject:key];
}
}
#pragma mark 生成符号键盘可输入的键位的数据
- (NSMutableArray <SKKeyPosition *> *)internalSymbolKeyboardData
{
const NSString *symbolText = @"_\\{}[]^*+=-/:;()$&@\"#%.,<>?!'";
// @"[]{}#%^*+=-/<>()$&@\".,:;?!'_ \\"; // 更贴近iOS原生键盘
NSMutableArray *keys = NSMutableArray.new;
NSMutableArray *chars = [self charArrayFromString:symbolText];
NSMutableArray *values = [self getMagicCodeArray:chars shuffle:NO];
if (chars.count != values.count)
{
assert(NO);
return nil;
}
for (NSInteger i = 0; i < chars.count; i++)
{
NSString *text = chars[i];
NSString *magicChar = values[i];
SKKeyPosition *key =
[SKKeyPosition keyPositionWithPrimaryKey:SKPrimaryKeyCodeInput displayText:text];
[key setMagicCharWithLowercaseText:magicChar
uppercaseText:magicChar];
[keys addObject:key];
}
return keys;
}
#pragma mark 打乱数组排序
- (void)shuffleArray:(NSMutableArray *)array
{
if (array == nil ||
[array isKindOfClass:[NSMutableArray class]] == NO ||
array.count == 0)
{
return;
}
for (NSInteger i = array.count; i > 1; i--)
{
uint64_t swapIndex = 0;
if (SecRandomCopyBytes(kSecRandomDefault, sizeof(uint64_t), &swapIndex) == errSecSuccess)
{
swapIndex = swapIndex % i;
id swapVaule = array[i - 1];
array[i - 1] = array[swapIndex];
array[swapIndex] = swapVaule;
}
else
{
// error!!!
}
}
}
#pragma mark 字符串转字符数组
- (NSMutableArray <NSString *>*)charArrayFromString:(const NSString *)string
{
NSMutableArray *chars = [NSMutableArray array];
for (NSInteger i = 0; i < string.length; i++)
{
[chars addObject:[string substringWithRange:NSMakeRange(i, 1)]];
}
return chars;
}
- (NSMutableArray *)getMagicCodeArray:(NSArray *)chars shuffle:(BOOL)shuffle
{
if (chars == nil || chars.count == 0)
{
return nil;
}
NSMutableArray *values = chars.mutableCopy;
if (shuffle)
{
[self shuffleArray:values];
return values;
}
else
{
return values;
}
}
@end
SKKeyPosition
的接口说明
键位数据类
方法名称 | 参数 | 方法描述 | 备注 |
---|---|---|---|
+ (instancetype)keyPositionWithPrimaryKey:(SKPrimaryKeyCode)primaryKey; |
primaryKey :键位操作码,详情请看SKPrimaryKeyCode |
带参构造函数 | - |
- (void)setDisplayText:(NSString *)displayText; |
displayText :键位显示内容 |
获取字母键盘的键位数据 | - |
- (void)setNormalStateDisplayImage:(UIImage *)normalStateDisplayImage pressStateDisplayImage:(UIImage *)pressStateDisplayImage; |
normalStateDisplayImage :键位默认状态下显示的图片pressStateDisplayImage :键位按下状态下显示的图片 |
获取字母键盘的键位数据 | |
- (void)setMagicCharWithLowercaseChar:(char)lowercaseChar uppercaseChar:(char)uppercaseChar; |
lowercaseChar :小写默认字节uppercaseChar :大写魔法字节 |
设置键值映射值 | 非字母键位时,两个值一致 |
- (void)setNormalStateTextSize:(CGFloat)normalStateTextSize pressStateTextSize:(CGFloat)pressStateTextSize normalStateTextColor:(UIColor *)normalStateTextColor pressStateTextColor:(UIColor *)pressStateTextColor; |
normalStateTextSize :默认状态下文字大小pressStateTextSize :按下状态下文字大小normalStateTextColor :默认状态下文字颜色pressStateTextColor :按下状态下文字颜色 |
设置键位显示样式 | - |
- (void)markAsSpaceKey; |
VOID |
设置为空格键键位 | - |
键位数据的组装规则
以数字键盘为例,接口- (NSArray <SKKeyPosition *>*)provideSymbolKeyBoardPositions;
返回的list元素组成及排序(红色标)如下:
元素组装原则:
- 每行从左到右,到边换行。
- 遇到跨行键位,换行。
自定义键位布局
键位的行距和间距配置
在 使用 > 安全键盘控件标准集成方式 已经提到,键盘的 UI 控件需要配合TMFSafeKeyboardWrapper
,里面提供了众多键盘UI自定义的接口,其中键位的行距和间距也是通过这个包装类的接口实现的:
方法名称 | 参数 | 方法描述 | 备注 |
---|---|---|---|
- (void)setHorizontalGap:(CGFloat)horizontalGap verticalGap:(CGFloat)verticalGap forPortrait:(BOOL)isPortrait; |
horizontalGap :键位间的水平间距verticalGap :键位间的行间距isPortrait :屏幕方向 |
键位的配置
出于autolayout
自适应分辨率的需要,键位的布局配置采用权重
和屏幕百分比
的数据标注方式。
名词 | 类型 | 名词解释 | 用途 | 计算方式 |
---|---|---|---|---|
weight |
float | 权重 | 标志键位的宽、高 | 以宽度权重计算为例,一行键位中,数量最多的键位宽度为基准,取值1.0f ,特殊宽度的键位宽度 * 1.0f / 基准宽度 得出特殊键位的宽度权重。 |
screenPercent |
float | 屏幕百分比 | 标注键盘行的左右外边距 | 设计师给出的外边距像素 * 1.0f / 出图的分辨率像素 |
键位布局采用按行布局的方式,键位布局的数据结构为KeyboardLayoutRow
:
方法名称 | 参数 | 方法描述 | 备注 |
---|---|---|---|
+ (instancetype)KeyboardLayoutRow:(int)columnCount; |
columnCount :改行的键位个数 |
带参构造函数 | - |
- (void)setKeyItemWidthWeights:(NSArray <NSNumber *>*)weights; |
weights :键位宽度权重数组,该行中键位权重按排序的顺序往里面塞 |
设置键位的宽度权重 | 数组长度小于columnCount 时默认补1.0f ;长度超长时则截取 |
- (void)setKeyItemLayoutPadding:(NSArray <NSNumber *>*)paddings; |
paddings :每个键位的左内边距 |
设置键位的做内边距 | 键位与前一个键位的左间距= horizontalGap +padding |
- (void)setKeyItemLayoutHeightWeights:(NSArray <NSNumber *>*)weights; |
weights :键位高度权重数组,该行中键位权重按排序的顺序往里面塞 |
设置键位的高度权重 | 不建议太高 |
- (void)setMarginScreenPercentWithLeft:(double)left right:(double)right; |
left :屏幕占比标注方式的左外边距right :屏幕占比标注方式的右外边距 |
设置行布局的外边距 | - |
- (void)setLeftMargin:(double)leftMargin rightMargin:(double)rightMargin; |
leftMargin :像素标注方式的左外边距rightMargin :像素标注方式的右外边距 |
设置行布局的外边距 | - |
布局规则:
- 每行从左到右,到边换行。
- 遇到跨行键位,换行。
从上图可以看到,第一行有四个键位,存在一个跨行按键,因而第二行只布局了三个,第三行同第一行,第四行同第二行。
UI 自定义设置
除了上述自定设置之外,还提供了更多键位样式自定义设置,具体如下图:
TMFSafeKeyboardWrapper
提供的具体接口说明如下:
方法名称 | 参数 | 方法描述 | 备注 |
---|---|---|---|
- (void)setKeyTextFont:(UIFont *)textFont textNormalStateColor:(UIColor *)textNormalStateColor textPressStateColor:(UIColor *)textPressStateColor; |
textFont :键位文本字体textNormalStateColor :普通状态下的文字颜色textPressStateColor :按下状态下的文字颜色 |
按键文字的样式配置 | |
- (void)setContentKeyNormalBackgroundImage:(UIImage *)normalImage pressBackgroundImage:(UIImage *)pressImage; - (void)setEnterKeyNormalBackgroundImage:(UIImage *)normalImage pressBackgroundImage:(UIImage *)pressImage; - (void)setFnKeyNormalBackgroundImage:(UIImage *)normalImage pressBackgroundImage:(UIImage *)pressImage; |
normalImage :普通状态下的填充图片pressImage :按下状态下的填充图片 |
设置内容键位的填图片 | |
- (void)setContentKeyNormalBackgroundColor:(UIColor *)normalColor pressBackgroundColor:(UIColor *)pressColor - (void)setEnterKeyNormalBackgroundColor:(UIColor *)normalColor pressBackgroundColor:(UIColor *)pressColor; - (void)setFnKeyNormalBackgroundColor:(UIColor *)normalColor pressBackgroundColor:(UIColor *)pressColor; |
normalStateFillColor :普通状态下的填充颜色pressStateFillColor :按下状态下的填充颜色 |
设置内容键位的填充颜色 | |
- (void)setBorderWidth:(CGFloat)borderWidth borderCornerRadius:(CGFloat)borderCornerRadius hideCorner:(UIRectCorner)hideCorner normalStateColor:(UIColor *)normalStateColor focusStateColor:(UIColor *)focusStateColor; |
borderWidth :边框笔触宽度borderCornerRadius :边框圆角大小hideCorner :指定不需要圆角normalStateColor :普通状态下边框的颜色focusStateColor :按下状态下边框的颜色 |
配置键位边框的样式 | |
- (void)setBorderCornerRadius:(CGFloat)borderCornerRadius hideCorner:(UIRectCorner)hideCorner |
borderCornerRadius :边框圆角大小hideCorner :指定不需要圆角 |
设置行布局的外边距 | |
- (void)setShadowNormalStateHeight:(CGFloat)normalStateHeight pressStateHeight:(CGFloat)pressStateHeight color:(UIColor *)color; |
normalStateHeight :默认状态下阴影高度pressStateHeight :按下状态下阴影高度color :阴影颜色 |
设置键位底部阴影的样式 |
密码检测
弱密码检测
TMFSafeKeyboardCheckApi
方法名称 | 参数 | 方法描述 | 备注 |
---|---|---|---|
+ (TMFSharkRequestIdentifier)textWeakCheckForContent:(TMFSafeKeyboardCheckContent )content passwordStrength:(TMFKeyboardTextCheckStrength)pwdStrength repeatNumber:(int)repeatNumber completion:(*_Nonnull TMFSafeKeyboardCheckCompletion)completion; | content:密码检测的内容 pwdStrendth:密码检测强度 repeatNumber:密码重复位数 completion:检测回调 |
弱密码检测 |
调用示例
TMFSafeKeyboardCheckContent *content1 = [TMFSafeKeyboardCheckContent contentWithText:_passwordTextF.text context:_passwordTextF.safeKeyboardWrapper.context];
[TMFSafeKeyboardCheckApi textWeakCheckForContent:content1 passwordStrength:pwdStrength repeatNumber:repeatNum completion:^(BOOL pass, NSError * _Nullable error) {
NSLog(@"[TMFSafeKeyboard-Check]%d, %@", pass, error);
[self showAlertTitle:pass?@"通过":@"失败" msg:[NSString stringWithFormat:@"输入框1弱密码%@",pass?@"通过":@"失败"]];
}];
两次密码一致性检测
TMFSafeKeyboardCheckApi
方法名称 | 参数 | 方法描述 | 备注 |
---|---|---|---|
+ (TMFSharkRequestIdentifier)textDoubleCheckForContent:(TMFSafeKeyboardCheckContent )firstContent secondContent:(TMFSafeKeyboardCheckContent )secondContent passwordStrength:(TMFKeyboardTextCheckStrength)pwdStrength repeatNumber:(int)repeatNumber completion:(_Nonnull TMFSafeKeyboardCheckCompletion)completion; | firstContent:密码检测的第一次输入内容 secondContent:密码检测的第二次输入内容 pwdStrendth:密码检测强度 repeatNumber:密码重复位数 completion:检测回调 |
两次密码一致性检测 | 会同时进行若密码检测和二次密码一致性检测 |
调用示例
TMFSafeKeyboardCheckContent *content1 = [TMFSafeKeyboardCheckContent contentWithText:_passwordTextF.text context:_passwordTextF.safeKeyboardWrapper.context];
TMFSafeKeyboardCheckContent *content2 = [TMFSafeKeyboardCheckContent contentWithText:_repeatPasswordTextF.text context:_repeatPasswordTextF.safeKeyboardWrapper.context];
[TMFSafeKeyboardCheckApi textDoubleCheckForContent:content1 secondContent:content2 passwordStrength:pwdStrength repeatNumber:repeatNum completion:^(BOOL pass, NSError * _Nullable error) {
NSLog(@"[TMFSafeKeyboard-Check2]%d, %@", pass, error);
NSString *message;
if (error && error.code == 7) {
message = @"两次密码输入不一致";
} else if (!error && pass == NO) {
message = @"弱密码";
}
[self showAlertTitle:pass?@"通过":@"失败" msg:message];
}];
其他数据模型
TMFSafeKeyboardCheckContent
属性 | 类型 | 描述 |
---|---|---|
text | NSString | 安全键盘加密后的文字 |
context | NSData | 密码加密上下文,在TMFSafeKeyboardWrapper 中获取 |
- 创建方法
+ (instancetype)contentWithText:(NSString *)text
context:(NSData *)context;
TMFKeyboardTextCheckStrength
枚举值(TMFKeyboardTextCheckStrength) | 值(NSInteger) | 说明 |
---|---|---|
TMFKeyboardTextCheckStrengthNone | 0 | 不检测 |
TMFKeyboardTextCheckStrengthSimple | 1 | 纯数字或者字母键盘:包含连续、重复字母或数字为弱密码 |
TMFKeyboardTextCheckStrengthLetter | 2 | 数字+字母键盘:包含连续、重复字母或数字为弱密码;无数字或者字母为弱密码 |
TMFKeyboardTextCheckStrengthCase | 3 | 数字+字母键盘:包含连续、重复字母或数字为弱密码;无数字或者字母为弱密码;无大小写字母为弱密码 |
TMFKeyboardTextCheckStrengthSymbol | 4 | 数字+字母+特殊字符:包含连续、重复字母或数字为弱密码;无数字或者字母为弱密码;无大小写字母为弱密码;无特殊字符为弱密码 |
TMFSafeKeyboardCheckCompletion
参数 | 类型 | 描述 |
---|---|---|
pass | BOOL | 是否通过检测 |
error | NSError | 校验过程中的错误信息 0:操作成功 1:请求参数有误 2:服务端配置有误 3:处理超时 4:查询异常 5:键盘数据已经过期,需要重新输入再验证 6:还原失败 7:两次密码输入不一致 |