进阶

使用默认的键盘配置方式

无需额外配置,直接使用 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; // 可输入类型按键

具体按键区域划分如下图(数字键盘为例):

digit_keyboard_MarkMan

/// 自定义键位数据供应者
/// @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 shuffleYES(键位布局随机乱序);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 自定义设置

除了上述自定设置之外,还提供了更多键位样式自定义设置,具体如下图: undefined

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:两次密码输入不一致
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""