跳到内容
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 API,允许您扫描和写入 NFC 标签。

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

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

该插件既可以扫描普通 NFC 标签,也可以扫描带有 NDEF (NFC 数据交换格式) 消息的 NFC 标签,NDEF 是在 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 标签写入有效载荷 (payload)。如果没有使用 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 命令,无需任何预先配置的作用域。


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