智能门锁
那款只能门锁最好
根据2024年的智能门锁推荐和测评,以下是一些表现较好的智能门锁品牌和型号:
-
飞利浦301FVP:这款智能门锁以其高性价比受到推荐。它具备7种解锁方式,包括3D人脸识别技术,以及130°广角猫眼和3.5英寸室内高清大屏。这款门锁的人脸识别技术可以应对素颜、浓妆、戴帽子等多种情况,并且具有远程可视功能。价格方面,领券后大约在1999元左右,性价比很高。
-
飞利浦702FVP:作为飞利浦的旗舰款产品,这款智能门锁配置齐全,包括3D人脸识别、电子猫眼、高清大屏、远程可视等功能。它的智能猫眼视野范围达到165°,并且支持远程可视功能,适合对智能门锁有较高要求的用户。
-
凯迪仕K20 Pro Max:这款智能锁配置齐全,包括智能猫眼、高清室内大屏、远程可视通话、3D人脸识别等。虽然在测评中人脸识别开锁反应稍慢,但日常使用影响不大,适合对智能门锁功能有全面需求的用户。
-
德施曼V7Plus:这款智能锁在千元价位内提供了4200mAh大容量锂电池,续航超长,支持7种解锁方式,包括指纹、密码、手机APP、小程序等。它还支持手机互联,可以管理解锁信息和查看开锁记录等,适合预算有限但希望体验智能门锁便利性的用户。
-
小米全自动智能门锁Pro:这款智能门锁集合了门锁、门铃、摄像头三项功能,全自动开锁方式,关门自动上锁。它还具备230万像素的摄像头,可以清晰查看门外情况,并且支持米家多场景智能联动,适合有智能家居生态基础的用户。
-
华为智能门锁Pro:这款门锁在猫眼功能上表现出色,采用1080P高清分辨率摄像头,夜视效果好。如果你对猫眼功能有较高要求,可以考虑这款产品。
-
鹿客S50F全自动智能指纹锁:这款智能锁支持多种解锁方式,包括指纹、密码、蓝牙等,采用直插式C级全铜锁芯,安全性能高。它还具备双重报警设置,能够及时预警 异常状态,适合追求高安全性的用户。
选择智能门锁时,除了考虑品牌和型号,还应该根据自己的需求和预算来决定。例如,如果你需要远程监控功能,那么选择带有智能猫眼和远程可视功能的门锁会更适合。如果你更注重性价比,那么飞利浦301FVP或德施曼V7Plus可能是更好的选择。
这些智能门锁的安全性如何?
智能门锁的安全性是用户非常关心的问题,以下是一些主流智能门锁品牌的安全性特点:
-
飞利浦智能门锁:
- 飞利浦DDL702-FVP-7HW采用雷达传感器,能够侦测门外异常逗留并推送告警信息,提升安全性 。
- 具备防拆、系统锁定、徘徊逗留等安全告警功能,异常情况实时推送至手机 。
- 室内面板设有4英寸LCD显示屏,方便查看来访客人及门外情况,无需另外安装传统猫眼 。
- 支持多种解锁方式,包括指纹、密码、卡片、钥匙等,满足不同家庭成员的使用需求 。
-
凯迪仕K20 Pro Max:
- 拥有13重安全设计,包括3D人脸识别、可视猫眼等,提供全面的安全保障 。
- 采用瑞典FPC半导体指纹识别技术,自带AI芯片,提高使用的快捷性与安全性 。
- 支持临时密码功能,方便远程为访客开门 。
-
德施曼V7 Plus:
- 采用指纹识别技术,确保只有授权用户才能进入家门 。
- 具有防撬报警功能,一旦有人试图非法闯入,系统会立即发出警报 。
- 采用锂电池供电,绿色环保,且续航能力强 。
-
小米全自动智能门锁Pro:
- 采用C级直插式锁芯,是目前最高级别的锁芯,即使外面板被破坏也无法打开门锁 。
- 锁舌采用一体化精铸不锈钢材质,耐用且安全 。
- 支持多维半导体指纹识别,识别率较高,提供较高的安全性 。
-
华为智能门锁Pro:
- 采用软件级加密,Harmony TEE OS通过CC EAL5+级安全认证,保障人脸、指纹等关键隐私数据本地存储 。
- 支持多种安全告警,如防错误试开报警、防撬报警、离家布防报警等 。
- 采用直插式C级锁芯,有效防止暴力破坏 。
-
鹿客S50F全自动智能指纹锁:
- 支持米家APP联动,可以设置智能生活场景,提高家庭安全 。
- 具备应急供电口,即使门锁没电也可以用移动电源临时供电开锁 。
总体来说,这些智能门锁品牌在安全性方面都有一定的保障,包括但不限于多种生物识别技术、防撬报警、临时密码功能、加密数据存储等。不过,消费者在选购时还应考虑自己的具体需求和预算,选择最适合自己的智能门锁产品。
Newland NSDK MDB开发指南
修订表
- 版本1.0,2023年8月31日,创建文档。
- 版本1.1,2023年9月25日,更新“MDBFunctionCallBack”及其参数描述。
- 版本1.2,2023年11月23日,增加第3章“事务流程”以介绍API调用流程。
Newland NSDK MDB开发指南 修订版 V1.2 福建新大陆支付技术有限公司 2023年11月
1. 引言 本文档旨在介绍NSDK MDB库的接口和所有参数。
2. 接口
2.1 初始化
MDBModule
类
- 方法:
void init()
- 描述:初始化MDB模块库。在调用其他接口之前必须先调用此方法。
- 异常:
MDBException
2.2 设置MDB配置
MDBModule
类
- 方法:
void setMDBConfig(MDBConfiguration mdbConfiguration)
- 参数:
mdbConfiguration
:MDB配置数据,详情见下文“MDBConfiguration”。
- 描述:设置MDB配置。可以使用“MDBConfiguration”对象一次性设置所有配置。
- 异常:
MDBException
MDBConfiguration
类定义了各种配置参数,包括无现金配置信息、国家代码、货 币单位、小数位数、最大响应时间、是否支持退款、是否支持显示、是否支持多售货、是否支持现金销售等。
当然,这里是翻译的内容:
2.2 设置 MDB 配置
可以通过一个 MDBConfiguration
对象设置所有配置:
class MDBConfiguration {
/* 无现金配置信息,例如,目前仅支持 Level 01 */
byte featureLevel = (byte) 0x01; /* 表示读卡器的功能级别 */
byte countryCodeH = (byte) 0x18; /* 国家代码由 countryCodeH 和 countryCodeL 组成,左侧数字为 0 表示使用国际电话代码来表示国家。例如,美国代码是 00 01H(countryCodeH = 00 和 countryCodeL = 01)。 */
byte countryCodeL = (byte) 0x40; /* 左侧数字为 1 表示使用 ISO 4217 数字货币代码的最新版本。例如,美元代码为 18 40H(countryCodeH = 18 和 countryCodeL = 40)。 */
byte scaleFactor = (byte) 0x01; /* 用于缩放 VMC 和读卡器之间传输的所有货币值的乘数 */
byte decimalPlaces = (byte) 0x02; /* 用于通信货币值的小数位数 */
byte maxResponseTime = (byte) 0x1E; /* 应用程序最大响应时间(秒) */
byte refundSupport = (byte) 0x01; /* 表示读卡器是否支持退款 */
byte displaySupport = (byte) 0x01; /* 表示读卡器是否支持显示 */
byte multiVendSupport = 0; /* 表示读卡器是否支持多次销售 */
byte cashSaleSupport = 0; /* 表示读卡器是否支持现金销售 */
byte cashlessAddress = 0x10; /* 表示读卡器的地址,0x10 或 0x60 */
/* Level03 可选功能 */
byte fileTransLayerSupport = 0; /* 是否支持文件传输层 */
byte monetaryFormat = 0; /* 0 = 16 位货币格式(默认),1 = 32 位货币格式 */
byte multiCurrencySupport = 0; /* 支持多货币/多语言 */
byte negativeVendAllow = 0; /* 允许负销售 */
byte dataEntryAllow = 0; /* 允许数据输入 */
byte alwaysIdleAllow = (byte) 0x01; /* 允许“始终空闲”状态 */
/* 设备信息索引 */
byte[] manufactureCode = "NLD".getBytes(); /* 制造商代码 - ASCII - 最多 3 字节 */
byte[] serialNumber = null; /* 序列号 - ASCII - 12 字节 */
byte[] modelNumber = null; /* 型号 - ASCII - 12 字节 */
byte[] softwareVersion = null; /* 软件版本 - 打包的 BCD - 2 字节 */
/* 消息处理 */
int sessionIdleTimeout = 60;
int vendTimeout = 60;
/* 调试级别 */
int debug = 0;
......
}
以上是关于 MDBConfiguration
类的详细配置说明。
2.3 设置MDB回调
MDBModule
类
- 方法:
void setMDBCallback(MDBFunctionCallBack mdbCallback)
- 参数:
mdbCallback
:要设置到MDB模块的函数回调,之后在接收到相应指令时将触发这些回调。
- 描述:设置MDB函数回调到库中,可以使用这些回调执行详细操作。
- 异常:
MDBException
MDBFunctionCallBack
接口定义了一系列回调方法,包括重置、设置MCU配置信息、获取价格信息、启用和禁用读卡器、请求售货进度、取消售货、售货成功、售货失败、售货超时、会话完成、现金销售、请求充值、协商最大退款金额、获取VMC信息、启用L3特性等。
2.4 执行MDB
MDBModule
类
- 方法:
void perform()
- 描述:执行MDB直到调用“停止”。
2.5 停止MDB
MDBModule
类
- 方法:
void stop()
- 描述:停止事务并释放事务线程。
2.6 获取MDB设备信息
MDBModule
类
- 方法:
byte[] getMDBDeviceInfo(MDBDeviceInfoType infoType)
- 参数:
infoType
:MDB设备信息的类型,详情见下文。
- 描述:通过输入的类型获取MDB信息。
- 异常:
MDBException
2.7 清理配置
MDBModule
类
- 方法:
void cleanUp()
- 描述:清理设置到MCU的配置。这只能在“停止事务”之后和退出应用程序之前调用一次。
- 异常:
MDBException
3. 事务流程 3.1 API调用流程 3.2 初始化流程 3.3 标准售货流程
方向
每个人都应该得到商业报酬
数据的价值
关于启动通信流程
流程图
在启动页(SplashActivity)预处理完成后,在下载参数接口获 取当前设备是串口还是用 MDB,再启动对应页面 =》 Activity;
模板工程
一个具有良好开发框架的银行模板项目。它基于Newland SDK实现了各种金融交易。
演示
[demo.apk] 是 BankTemplate,而 [platform.apk] 是一个本地模拟平台。通过这两个apk,可以在开发POS上执行模拟交易。
操作:模拟应用 -> (服务已开启)配置 -> 保存 -> 对话框确认。然后,可以在BankTemplate上执行交易。
注意:模拟平台apk只能在开发POS上执行。
Gradle和环境
Android Studio | Gradle插件版本 | Gradle版本 | Android SDK |
---|---|---|---|
2023.2.1 | 8.0.2 | 8.0 | 33 |
如果打开项目时出现错误,请升级Gradle到最新版本。(Android Studio->帮助->检查更新)
为了方便项目开发,BankTemplate的gradle 进行了一些修改,与原生版本存在以下差异:
- SDK版本
- 库依赖
- 生成的APK名称
- 签名配置
- 命名空间(以前是AndroidManifest.xml中的package)
具体内容,请参见 **[Gradle配置]
UI
BankTemplate开发了基本的主题、元素颜色和尺寸。
它自定义了常见视图和组件,并使用了多个Lottie动画,适应不同屏幕。
具体内容,请参见 [UI]
逻辑流程
当你在启动器上点击BankTemplate时,应用程序将根据以下流程处理:
[App] 被调用。App
将初始化应用程序的基本参数。这个步骤在一个单独的线程上执行,不会影响UI进程。这些参数是应用程序需要初始化的前半部分参数。
//初始化应用程序中的数据
public class App extends BaseApplication {
@Override
public void onCreate() {
...
BaseApplication.SINGLE_EXECUTOR.execute(() -> {
SelfCheckHelper.initAppConfig(this);
});
}
}
然后,[MainActivity] 将被启动。它将在与App
相同的单线程上初始化剩余参数。这样可以使参数的初始化按顺序执行。BankTemplate的所有屏幕都在Fragment
中实现。
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
BaseApplication.SINGLE_EXECUTOR.execute(() -> {
SelfCheckHelper.initDevice(this);
...
mSupportDelegate.switchContent(MainFragment.newInstance());
});
...
}
}
所以[MainFragment]将由MainActivity
打开以显示主菜单。MainFragment
有一个ViewPager来显示[MenuFragment]。MenuFragment
包含主菜单。如果一个屏幕无法显示所有菜单项,你可以滑动屏幕到下一 个屏幕或进入一个[SubMenuFragment]。
public class MainFragment extends BaseFragment {
...
private void initView() {
...
List<MenuFragment> childFragments = createMenuFragments(items.subList(1, items.size()));
binding.viewPager.setAdapter(new FragmentStateAdapter(this) {
@NonNull
@Override
public Fragment createFragment(int position) {
return childFragments.get(position);
}
@Override
public int getItemCount() {
return childFragments.size();
}
});
...
}
...
@Override
public void onResume() {
super.onResume();
if (MainMenu.getInstance().isChanged()) {
initView();
}
}
}
当点击主菜单项时,[TransActivity]将被打开。然后,TransActivity
将开始交易。
public class TransActivity extends BaseActivity {
...
private void transact() {
...
AbstractTrans trans;
try {
Class<? extends AbstractTrans> clz = TransUtils.getTrans(pubBean.getTransType());
if (clz == null) {
LoggerUtils.e("Transaction class is null.");
intent.putExtra(TransTag.MESSAGE, getString(R.string.core_transaction_result_no_such_trans));
intent.putExtra(TransTag.RESULT_CODE, ResultCode.FL);
setResult(RESULT_CANCELED, intent);
finish();
return;
}
LoggerUtils.d("Instantiate transaction: " + clz);
trans = clz.newInstance();
} catch (IllegalAccessException | InstantiationException e) {
...
finish();
return;
}
...
trans.init(this, pubBean);
trans.transact((success) -> {
...
finish();
});
}
...
}
交易
每个交易处理由一个交易类控制。交易类将在TransActivity
启动时调用,并在交易类完成后TransActivity
结束。
具体内容,请参见 [交易] 。
应用设置
[Settings]是一个用于应用设置的交易。当Settings
执行时,它将启动[SettingsActivity]。
SettingsActivity
需要密码。有两个密码用于不同的设置。
- 201003 -> 供应商设置。此密码在代码中是固定的。供应商设置用于紧急处理。
- 000000-> 管理员/商户设置。此密码可以在设置中修改或通过
core/src/main/asset/default_params.ini
进行修改。此设置用于商户配置。
Newland SDK
BankTemplate将所有与SDK库相关的API封装在[sdk_helper]模块中。
它包括以下SDK:
ISO8583
[ISO8583.md] 介绍了如何打包8583数据。
Android 子工程
整体抽象 tpp
[ ] 1. 网络层 [ ] 2. UI [ ] 3. 注入环境变量,百富还是新大陆
Android 串口通信
Turbo Modules 对于隐私合规的意义
Turbo Modules
在之前的架构中 JS 使用的所有 Native Modules(例如蓝牙、地理位置、文件存储等)都必须在应用打开之前进行初始化,这意味着即使用户不需要某些模块,但是它仍然必须在启动时进行初始化。 Turbo Modules 基本上是对这些旧的 Native 模块的增强,现在 JS 将能够持有这些模块的引用,所以 JS 代码可以仅在需要时才加载对应模块,这样可以将显着缩短 RN 应用的启动时间。