跳到内容
Tauri

NFC

在 Android 和 iOS 上读写 NFC 标签。

此插件需要 Rust 版本至少为 **1.77.2**

平台 级别 备注
Windows
Linux
macOS
Android
iOS

安装 NFC 插件即可开始使用。

使用你的项目包管理器添加依赖项

npm run tauri add nfc

NFC 插件需要为 iOS 进行原生配置。

要在 iOS 上访问 NFC API,您必须调整目标 iOS 版本,在 Info.plist 文件中配置用法描述,并向您的应用程序添加 NFC 功能。

NFC 插件需要 iOS 14+。这是使用 Tauri CLI v2.8 及更高版本创建的 Tauri 应用程序的默认设置,但您可以编辑 Xcode 项目进行配置。

src-tauri/gen/apple/<project-name>.xcodeproj/project.pbxproj 文件中,将所有 IPHONEOS_DEPLOYMENT_TARGET 属性设置为 14.0

/* Begin XCBuildConfiguration section */
<random-id> /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
...
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
};
name = release;
};
<random-id> /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
...
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
};
name = debug;
};

或者,您可以在 Xcode 中通过 General > Minimum Deployments > iOS 配置来设置部署目标。

在 iOS 上,NFC 插件需要 NFCReaderUsageDescription 信息属性列表值,该值应描述您的应用程序为何需要扫描或写入 NFC 标签。

src-tauri/Info.ios.plist 文件中,添加以下代码片段

src-tauri/Info.ios.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NFCReaderUsageDescription</key>
<string>Read and write various NFC tags</string>
</dict>
</plist>

此外,iOS 要求将 NFC 功能与您的应用程序关联。

此功能可以在 Xcode 中,通过项目的“Signing & Capabilities”选项卡,点击“+ Capability”按钮并选择“Near Field Communication Tag Reading”功能来添加(有关更多信息,请参阅 向目标添加功能),或者通过将以下配置添加到 gen/apple/<app-name>_iOS/<app-name>_iOS.entitlements 文件中来实现

gen/apple/<app-name>_iOS/<app-name>_iOS.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
</array>
</dict>
</plist>

NFC 插件在 JavaScript 和 Rust 中都可用,允许您扫描和写入 NFC 标签。

并非所有移动设备都具有扫描 NFC 标签的功能,因此在使用扫描和写入 API 之前,您应该检查可用性。

import { isAvailable } from '@tauri-apps/plugin-nfc';
const canScanNfc = await isAvailable();

该插件可以扫描通用 NFC 标签或带有 NDEF(NFC 数据交换格式)消息的 NFC 标签,这是一种将类型数据封装在 NFC 标签中的标准格式。

import { scan } from '@tauri-apps/plugin-nfc';
const scanType = {
type: 'ndef', // or 'tag',
};
const options = {
keepSessionAlive: false,
// configure the messages displayed in the "Scan NFC" dialog on iOS
message: 'Scan a NFC tag',
successMessage: 'NFC tag successfully scanned',
};
const tag = await scan(scanType, options);

NFC 扫描仪还可以根据特定的 URI 格式、MIME 类型或 NFC 标签技术进行过滤。在这种情况下,扫描将只检测与所提供过滤器匹配的标签。

import { scan, TechKind } from '@tauri-apps/plugin-nfc';
const techLists = [
// capture anything using NfcF
[TechKind.NfcF],
// capture all MIFARE Classics with NDEF payloads
[TechKind.NfcA, TechKind.MifareClassic, TechKind.Ndef],
];
const tag = await scan({
type: 'ndef', // or 'tag'
mimeType: 'text/plain',
uri: {
scheme: 'https',
host: 'my.domain.com',
pathPrefix: '/app',
},
techLists,
});

write API 可用于将有效载荷写入 NFC 标签。如果没有扫描到带有 keepSessionAlive: true 的标签,应用程序将首先扫描一个 NFC 标签。

import { write, textRecord, uriRecord } from '@tauri-apps/plugin-nfc';
const payload = [uriRecord('https://tauri.org.cn'), textRecord('some payload')];
const options = {
// the kind is only required if you do not have a scanned tag session alive
// its format is the same as the argument provided to scan()
kind: {
type: 'ndef',
},
// configure the messages displayed in the "Scan NFC" dialog on iOS
message: 'Scan a NFC tag',
successfulReadMessage: 'NFC tag successfully scanned',
successMessage: 'NFC tag successfully written',
};
await write(payload, options);

默认情况下,所有潜在危险的插件命令和范围都被阻止,无法访问。您必须修改 capabilities 配置中的权限才能启用这些功能。

有关更多信息,请参阅功能概述,并参阅分步指南以使用插件权限。

src-tauri/capabilities/default.json
{
"permissions": [
...,
"nfc:default",
]
}

默认权限

此权限集配置了 NFC 插件可用的操作类型。

已授予权限

允许检查 NFC 功能是否可用以及扫描附近的标签。写入标签需要手动启用。

此默认权限集包括以下内容

  • allow-is-available
  • allow-scan

权限表

标识符 描述

nfc:allow-is-available

启用 is_available 命令,不带任何预配置范围。

nfc:deny-is-available

拒绝 is_available 命令,不带任何预配置范围。

nfc:allow-scan

启用 scan 命令,不带任何预配置范围。

nfc:deny-scan

拒绝 scan 命令,不带任何预配置范围。

nfc:allow-write

启用 write 命令,不带任何预配置范围。

nfc:deny-write

拒绝 write 命令,不带任何预配置范围。


© 2025 Tauri 贡献者。CC-BY / MIT