模板版本:v0.2.2
[!TIP] Github 地址
请到三方库的 Releases 发布地址查看配套的版本信息:@react-native-oh-tpl/react-native-sensitive-info Releases 。对于未发布到npm的旧版本,请参考安装指南安装tgz包。
进入到工程目录并输入以下命令:
npm install @react-native-oh-tpl/react-native-sensitive-info
yarn add @react-native-oh-tpl/react-native-sensitive-info
下面的代码展示了这个库的基本使用场景:
[!WARNING] 使用时 import 的库名不变。
import React, { useCallback, useState } from 'react';
import { Alert, Button, SafeAreaView, Text } from 'react-native';
import SInfo from 'react-native-sensitive-info';
const SensitiveInfoDemo = () => {
const handleAddUsingSetItemOnPress = useCallback(() => {
SInfo.setItem('key1', 'value1', {
sharedPreferencesName: 'exampleApp',
keychainService: 'exampleApp',
}).catch((err) => {
Alert.alert('Error', err);
});
}, []);
const handleReadingDataWithoutFingerprint = useCallback(async () => {
try {
const data = await SInfo.getItem('key1', {
sharedPreferencesName: 'exampleApp',
keychainService: 'exampleApp',
});
Alert.alert('Data stored:', data);
} catch (err) {
Alert.alert('Error', String(err));
}
}, []);
const [logText, setLogText] = useState('');
async function runTest() {
const options = {
sharedPreferencesName: 'exampleAppTest',
keychainService: 'exampleAppTest',
};
let dbgText = '';
dbgText += `setItem(key1, value1): ${await SInfo.setItem(
'key1',
'value1',
options,
)}\n`;
dbgText += `setItem(key2, value2): ${await SInfo.setItem(
'key2',
'value2',
options,
)}\n`;
dbgText += `setItem(key3, value3): ${await SInfo.setItem(
'key3',
'value3',
options,
)}\n`;
dbgText += `getItem(key2): ${await SInfo.getItem('key2', options)}\n`;
dbgText += `delItem(key2): ${await SInfo.deleteItem('key2', options)}\n`;
dbgText += `getAllItems():\n`;
const allItems = await SInfo.getAllItems(options);
for (const key in allItems) {
dbgText += ` - ${key} : ${allItems[key]}\n`;
}
setLogText(dbgText);
}
runTest();
return (
<SafeAreaView style={{ margin: 10 }}>
<Button
title="Add item using setItem"
onPress={handleAddUsingSetItemOnPress}
/>
<Button
title="Read data without fingerprint"
onPress={handleReadingDataWithoutFingerprint}
/>
<Text>{logText}</Text>
</SafeAreaView>
);
};
export default SensitiveInfoDemo;
本库已经适配了 Codegen
,在使用前需要主动执行生成三方库桥接代码,详细请参考 Codegen 使用文档。
目前 HarmonyOS 暂不支持 AutoLink,所以 Link 步骤需要手动配置。
首先需要使用 DevEco Studio 打开项目里的 HarmonyOS 工程 harmony
{
...
"overrides": {
"@rnoh/react-native-openharmony" : "./react_native_openharmony"
}
}
目前有两种方法:
- 通过 har 包引入(在 IDE 完善相关功能后该方法会被遗弃,目前首选此方法);
- 直接链接源码。
方法一:通过 har 包引入(推荐)
[!TIP] har 包位于三方库安装路径的
harmony
文件夹下。
打开 entry/oh-package.json5
,添加以下依赖
"dependencies": {
"@rnoh/react-native-openharmony": "file:../react_native_openharmony",
"@react-native-oh-tpl/react-native-sensitive-info": "file:../../node_modules/@react-native-oh-tpl/react-native-sensitive-info/harmony/react_native_sensitive_info.har"
}
点击右上角的 sync
按钮
或者在终端执行:
cd entry
ohpm install
方法二:直接链接源码
[!TIP] 如需使用直接链接源码,请参考直接链接源码说明
打开 entry/src/main/ets/组件RNPackagesFactory.ts,添加:
...
+ import { RNSensitiveInfoPackage } from '@react-native-oh-tpl/react-native-sensitive-info/ts';
@Builder
export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
return [
new SamplePackage(ctx),
+ new RNSensitiveInfoPackage(ctx)
];
}
点击右上角的 sync
按钮
或者在终端执行:
cd entry
ohpm install
然后编译、运行即可。
要使用此库,需要使用正确的 React-Native 和 RNOH 版本。另外,还需要使用配套的 DevEco Studio 和 手机 ROM。
请到三方库相应的 Releases 发布地址查看 Release 配套的版本信息:@react-native-oh-tpl/react-native-sensitive-info Releases
在 YourProject/entry/src/main/module.json5补上配置
"requestPermissions": [ { "name": "ohos.permission.ACCESS_BIOMETRIC" }, ]
[!TIP] "Platform"列表示该属性在原三方库上支持的平台。
[!TIP] "HarmonyOS Support"列为 yes 表示 HarmonyOS 平台支持该属性;no 则表示不支持;partially 表示部分支持。使用方法跨平台一致,效果对标 iOS 或 Android 的效果。
Name | Description | Type | Required | Platform | HarmonyOS Support |
---|---|---|---|---|---|
isSensorAvailable() | Indicates the overall availability of fingerprint sensor. It will resolve to true or false | function | no | Android、iOS | yes |
cancelFingerprintAuth () | Canceling fingerprint authentication | function | no | Android、iOS | yes |
hasEnrolledFingerprints () | It will return true if detected otherwise returns false | function | no | Android、iOS | yes |
setItem() | Insert new data into the storage. | function | yes | Android、iOS | yes |
getItem() | Get an item from storage | function | yes | Android、iOS | yes |
getAllItems() | Get all items from storage. | function | yes | Android、iOS | yes |
deleteItem() | Delete an item from storage | function | yes | Android、iOS | yes |
setInvalidatedByBiometricEnrollment() | Set invalid enrollment by biometrics | function | yes | Android | yes |
[!TIP] "Platform"列表示该属性在原三方库上支持的平台。
[!TIP] "HarmonyOS Support"列为 yes 表示 HarmonyOS 平台支持该属性;no 则表示不支持;partially 表示部分支持。使用方法跨平台一致,效果对标 iOS 或 Android 的效果。
Name | Description | Type | Required | Platform | HarmonyOS Support |
---|---|---|---|---|---|
kSecAccessControl | A secure storage area provided for storing sensitive information such as passwords, keys, etc | object | no | iOS | no |
kSecAttrAccessible | Used to enhance data security | object | no | iOS | no |
kSecAttrSynchronizable | Set when adding or querying Keychain data items | boolean | no | iOS | no |
keychainService | A tool provided for securely storing sensitive information | string | no | iOS | no |
sharedPreferencesName | The name parameter used to specify the file name | string | no | Android | yes |
touchID | Unlock devices, verify identities, and make secure payments | boolean | no | Android、iOS | no |
showModal | display a dialog box | boolean | no | iOS | no |
kSecUseOperationPrompt | Use constants related to authentication | string | no | iOS | no |
kLocalizedFallbackTitle | Handling biometric authentication attributes such as Touch ID and Face ID | string | no | iOS | no |
strings | Android stores information | object | no | Android | no |
由于iOS用的Keychain系统,kSecAccessControl、 kSecAttrAccessible、 kSecAttrSynchronizable、keychainService、showModal、kSecUseOperationPrompt、kLocalizedFallbackTitle 这些属性是该系统独有,strings里面的header、description、hint、success、notRecognized、cancel、cancelled、这些是Android的Keystore系统所需要的,所以这里的属性HarmonyOS不能统一支持
本项目基于 The MIT License (MIT) ,请自由地享受和参与开源。