@kefah/nativescript-otp
作者:kefah | v1.0.8
A Nativescript 插件,用于自动填充 iOS 和 Android 的单次密码 OTP
npm i --save @kefah/nativescript-otp

@kefah/nativescript-otp

社交按钮

@kefahB - @kefah/nativescript-otp stars - @kefah/nativescript-otp dependency - @kefah/nativescript-otp

仓库元数据

License issues - @kefah/nativescript-otp

A Nativescript 插件,用于自动填充 iOS 和 Android 的单次密码 OTP

文档

view - Documentation

目录

安装

ns plugin add @kefah/nativescript-otp

OR

npm i @kefah/nativescript-otp

限制

iOS:此功能从 iOS 12.0 开始可用,不会与旧版本兼容

设置

唯一的设置是针对需要将哈希码附加到短信的 Android,此过程稍微复杂一些,此插件提供了一个名为 getAppSignatures() 的辅助函数,可以生成 开发 哈希码,无法保证相同的哈希码在 生产 中有效,为此您需要手动生成。

通过调用 getAppSignatures() 获取开发哈希码,这将日志记录到控制台

PS:请使用 getAppSignatures() 获取哈希码后将其注释掉,不再需要

JS: packageName: org.nativescript.plugindemo Hash: I+D7XdR0yWS

开始之前

在大多数情况下,OTP 是一个 整数 值,如果可能,请避免使用字母字符。

由于某种原因,在 iOS 中,OTP 识别在某些默认键盘类型上有时无法工作,如果您遇到问题,请尝试将键盘类型设置为 整数

<notp:NativescriptOtp keyboardType="integer" hint="{{ L('activation_code') }}" text="{{ code }}" autocorrect="false" class="otp"/>

以下是一些成功接收短信的最佳实践

  • 请尽量在您的短信中使用以下关键词: Code Passcode Password is
  • <#> 开头您的短信,我不确定这一点,因为它不在文档中
  • 不要在短信和哈希码之间放置多行文本
  • 使用简短代码
  • 仅使用数字和字母字符
<#> your code is: 1234988
I+D7XdR0yWS

用法

此插件实现了 Nativescript TextField,因此您可以将其用于代替常规的 TextField。

首先在您的页面中包含插件

<Page xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:notp="@kefah/nativescript-otp" navigatingTo="navigatingTo" class="page">

然后使用插件代替 TextField

<notp:NativescriptOtp hint="OTP" class="otp" text="{{ otp }}"/>

完整示例

<Page xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:notp="@kefah/nativescript-otp" navigatingTo="navigatingTo" class="page">

<Page.actionBar>
<ActionBar title="otp" icon="" class="action-bar">
</ActionBar>
</Page.actionBar>

<StackLayout class="p-20">
<ScrollView class="h-full">
<StackLayout>
<Button text="Test otp >" tap="{{ testIt }}" class="btn btn-primary"/>
<notp:NativescriptOtp hint="OTP" class="otp" text="{{ otp }}"/>
</StackLayout>
</ScrollView>
</StackLayout>
</Page>

将插件注册为监视传入短信,并传递一个回调函数,当插件捕获到短信时,此回调函数将被填充。

视图模型

import {NativescriptOtp, OTPResultInterface} from '@kefah/nativescript-otp';


export class DemoSharedOtp extends DemoSharedBase {


constructor() {
super();
console.log('test nativescript-otp!');
let otp = new NativescriptOtp();
otp.registerForOTP((otp: OTPResultInterface) => {
if(otp) {
console.error("OTP", otp);
this.set("otp", otp.otp)
// do other staff
// trigger verify...
return;
}
// No OTP was found
})
}
}

API

方法 类型 描述 iOS Android
registerForOTP: (cb) 函数 将插件注册为监视传入短信 x x
unregisterForOTP 函数 注销监视 x x
parseMsg(msg, regex) 函数 此函数将解析短信以提取代码,除非您的代码是特殊的并且需要不同的 regex,否则您不需要调用它,然后作为第二个参数传递您的范围 x
getAppSignatures() 函数 用于获取 Android 开发哈希码的辅助函数 x

生成 Android 哈希码

package=_yourp_package_name_
keystore=debug.keystore
keystorepass=android
alias=androiddebugkey

keytool -exportcert -alias $alias -keystore $keystore -storepass $keystorepass | xxd -p | tr -d "[:space:]" | echo -n $package `cat` | openssl sha256 test.txt | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
keytool -exportcert -alias androiddebugkey -keystore debug.keystore -storepass android | xxd -p | tr -d "[:space:]" | echo -n $package `cat` | openssl sha256 | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

如何测试

iOS

遗憾的是,iOS 需要在真实设备上测试短信,苹果不允许在模拟器上模拟传入短信。

Android

这非常简单,请参见下面的图片

Capture d’écran 2022-12-28 à 12 45 52 Capture d’écran 2022-12-28 à 12 48 26

许可证

MIT 发布,作者:@kefahB