*注意：iOS平台的NFC功能暂无支持计划，当前版本仅支持Android平台。*

# ohyes-nfc

一个用于uni-app的NFC读取插件，支持Android的NFC标签读取功能。

## 免责声明
- 源码无后门代码。
- 由第三方SDK而导致的任何损失,与作者无关。
- 使用本插件而导致的任何损失,与作者无关。
- 使用该插件即代表同意免责声明。

## 是否使用第三方SDK?
- 无

## 我有需求怎么办? 
发送邮件到 helloword202507@163.com  感谢支持

## 功能特性

- 🔍 **NFC标签读取** - 支持多种NFC标签类型的读取
- 🏷️ **多种标签格式** - 支持NDEF、Mifare Classic、Mifare Ultralight、ISO-DEP等
- 📊 **详细信息获取** - 获取标签ID、技术列表、内容、内存使用情况等
- 🔒 **安全验证** - 支持标签签名验证和密码保护检测

## 支持的标签类型

- **NDEF标签** - NFC Forum Type 1-5
- **Mifare Classic** - 1K/4K标签
- **Mifare Ultralight** - 轻量级标签
- **ISO-DEP** - ISO14443-4标准标签
- **NFC-A/B/F/V** - 各种NFC技术标准

## 安装

将插件导入到你的uni-app项目中：

1. 下载插件包
2. 将插件放入项目的`uni_modules`目录
3. 重新编译项目

## 权限配置

### Android权限

插件会自动添加以下权限到AndroidManifest.xml：

```xml
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.VIBRATE" />
```

## 使用方法

### 基本用法

  参考示例工程

## API文档

### enableNFCRead()

启用NFC读取模式

### disableNFCRead()

停用NFC读取模式

### isNFCSupported()

检查当前设备是否支持NFC功能

**返回值：**
- `boolean` - true表示设备支持NFC，false表示不支持

### isNFCEnabled()

检查当前设备NFC功能是否已打开

**返回值：**
- `boolean` - true表示NFC已启用，false表示NFC未启用

### openNFCSettings()

跳转到系统NFC设置页面，用户可以手动打开NFC开关

### onNFCListener(callback:(res:NFCInfo)=>void)

监听NFC返回数据,全局唯一,重复调用会覆盖

## NFCInfo数据结构

读取成功后返回的NFC信息对象包含以下字段：

```typescript
interface NFCInfo {
  id: string              // 标签唯一ID
  techList: string[]      // 支持的技术列表
  type: string           // 标签类型
  size: number           // 标签容量（字节）
  isWritable: boolean    // 是否可写
  content: string        // 标签内容
  atqa: string          // ATQA值（NFC-A技术）
  sak: string           // SAK值（NFC-A技术）
  signature: string     // 签名状态
  passwordProtected: boolean  // 是否密码保护
  dataFormat: string    // 数据格式
  recordCount: number   // NDEF记录数量
  usedBytes: number     // 已使用字节数
  freeBytes: number     // 剩余字节数
}
```

### 字段说明

- **id**: 标签的唯一标识符，通常为十六进制字符串
- **techList**: 标签支持的NFC技术，如["NfcA", "Ndef", "MifareUltralight"]
- **type**: 标签类型描述，如"Type 2 (Ultralight)"
- **size**: 标签总容量，单位为字节
- **isWritable**: 标签是否支持写入操作
- **content**: 解析后的标签内容，包括文本、URL等
- **atqa/sak**: NFC-A技术的技术参数
- **signature**: 标签签名验证状态
- **dataFormat**: 数据格式，如"NFC Forum Type 2"
- **recordCount**: NDEF消息中的记录数量
- **usedBytes/freeBytes**: 内存使用情况

## 支持的内容类型

插件能够解析以下类型的NFC内容：

### NDEF记录类型
- **文本记录** - 纯文本内容，支持多语言
- **URI记录** - 网址、电话、邮箱等链接
- **MIME记录** - 多媒体内容
- **外部类型** - 自定义格式

### 非NDEF标签
- **Mifare Classic** - 读取扇区和块数据
- **Mifare Ultralight** - 读取页面数据
- **ISO-DEP** - 读取历史字节和高层响应

## 平台支持

| 平台 | 支持状态 | 说明 |
|------|----------|------|
| Android | ✅ 完全支持 | 支持所有NFC功能，包括多种标签类型 |

## 注意事项

1. **设备要求**: 设备必须支持NFC功能
2. **权限**: Android需要NFC权限，iOS需要在设置中启用NFC
3. **距离**: NFC读取需要设备与标签距离很近（通常<4cm）
4. **性能**: 读取大容量标签时可能需要较长时间
5. **兼容性**: 不同厂商的NFC标签可能有细微差异

## 错误处理

常见错误及处理方法：

- **"NFC不可用"** - 检查设备是否支持NFC并已启用
- **"读取超时"** - 确保标签与设备距离足够近
- **"标签格式不支持"** - 标签可能损坏或使用了不支持的格式
- **"权限被拒绝"** - 检查应用是否有NFC权限

## 更新日志

### v1.0.0
- 初始版本发布
- 支持Android平台NFC读取
- 支持多种标签类型和格式
- 提供详细的标签信息

