0.0.14 • Published 2 years ago

nfcreader-sdk v0.0.14

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

NFCReader-SDK 用于开发基于 NFCReader 应用上的功能扩展插件

  • NFCReader是一款基于 android 操作系统之上的 NFC 读写工具软件,可在各大应用商店搜索“NFCReader”进行下载(同时也可直接点击进行下载
  • 功能扩展插件本质上是使用 TaroJS 3.x(官方文档链接) 开发的 H5应用(SPA),运行于 NFCReader 应用中的 WebView 中
  • SDK将原本复杂的 NFC 读写操作进行了封装,以简单的函数调用展示出来,具备基本前端开发技能的同学均可轻松的开发出属于自己的NFC读写插件,实现特有的业务逻辑
  • 插件SDK的使用完全免费,开发完成的插件审核通过后便可发布在 NFCReader 插件市场上,供其他用户有偿/无偿下载使用
  • 对于付费插件的收入,开发者可无门槛提现至指定的支付宝或微信账户
  • 开发中遇到的任何问题均可在抖音/快手中搜索“NFCReader”,与官方客服进行沟通和解决

SDK 安装

项目根目录下执行命令安装插件SDK

npm install --save nfcreader-sdk

SDK初始化

// 在Tarojs项目中的入口文件中进行SDK初始化 app.js
import { System } from 'nfcreader-sdk';

function APP({ children }){

	useLaunch(() =>{

		System.init('你的插件ID');

	});
}

注意:SDK初始化必须在其他接口调用前进行,否则会造成接口异常

插件调试

  • Tarojs 项目本地运行(npm run dev\:h5)
  • 手机运行 NFCReader 软件,我的——插件管理——插件开发调试
  • 输入项目本地 IP 地址后开启调试
  • 建议安装 vconsole,并在项目启动阶段进行初始化,方便查看调试日志

项目打包

打包前需修改项目配置,config/index.js

一定要将publicPath修改为“./”,否则插件无法正常加载,切记!!!

一定要将publicPath修改为“./”,否则插件无法正常加载,切记!!!

一定要将publicPath修改为“./”,否则插件无法正常加载,切记!!!

const config = {
	//...
	h5: {
		//...
		publicPath: './',
		//...
	},
	//...
}

项目需构建打包为 H5 应用

npm run build:h5

插件审核&发布

  • 打包完成的插件,添加到 zip 压缩包
  • 手机运行 NFCReader 软件,我的——插件管理——找到对应 ID 的插件项目
  • 选择压缩包并上传,等待审核即可
  • 审核通过后,开发者可将插件发布至插件市场或分享给其他用户使用

API

M1.readSectorByNFC(keyArray: SectorKey[]) : Promise\

通过 NFC 读取 M1 标签扇区数据

参数为密钥对象数组

interface SectorKey {
	/** 扇区索引编号,取值0-15 */
	sector: number;
	/** 扇区A密钥,6字节hex数值 */
	keyA: string;
	/** 扇区B密钥,6字节hex数值 */
	keyB: string;
	/** 扇区访问控制指令,4字节hex数值 */
	keyC?: string;	
};

返回Promise,当resolve时,对象属性如下

interface ReadDataResponse {
	/** SDK执行标识符,true为执行成功;false为执行失败 */
	status: boolean;
	data: {
		/** 扇区第0块数据,16字节hex数值 */
        b0: string;
        /** 扇区第1块数据,16字节hex数值 */
        b1: string;
        /** 扇区第2块数据,16字节hex数值 */
        b2: string;
        /** 扇区A密钥,6字节hex数值 */
        keyA: string;
        /** 扇区B密钥,6字节hex数值 */
        keyB: string;
        /** 扇区访问控制指令,4字节hex数值 */
        keyC: string;
	} | null;
	/** SDK操作回执消息 */
	msg: string;
}

M1.readSectorByPN532(keyArray: SectorKey[]): Promise\

通过 PN532 芯片读卡器读取 M1 标签扇区数据

参数和返回值类型见 M1.readSectorByNFC

M1.readSectorWithUI(keyArray: SectorKey[], NFCActionCallback: (result: ReadDataResponse) => void, PN532ActionCallback: (result: ReadDataResponse) => void): void

调用宿主 UI 读取 M1 标签扇区数据(用户自行选择使用 NFC或者PN532操作)

参数和回调函数参数类型见 M1.readSectorByNFC

M1.writeBlockByNFC(sectorIndex: number, blockIndex: number, data: string, key: SectorKey): Promise\

通过 NFC 向 M1 标签写入块数据

参数类型见函数签名及M1.readSectorByNFC

返回值为Promise,当resolve时,对象属性如下

/** SDK响应格式 */
interface SDKResponse {
    /** SDK执行标识符,true为执行成功;false为执行失败 */
    status: boolean;
    /** SDK操作回执消息 */
    msg: string;
}

M1.writeBlockByPN532(sectorIndex: number, blockIndex: number, data: string, key: SectorKey): Promise\

通过 PN532 芯片读卡器向 M1 标签写入块数据

参数及返回值见 M1.writeBlockByNFC

M1.writeSectorByNFC(dataArray: SectorData[], keyArray: SectorKey[], isWriteB0: boolean): Promise\

通过 NFC 向 M1 标签写入扇区数据

参数类型见函数签名,写入数据对象属性如下

interface SectorData {
	sector: number;
	data: {
		/** 扇区第0块数据,16字节hex数值 */
        b0: string;
        /** 扇区第1块数据,16字节hex数值 */
        b1: string;
        /** 扇区第2块数据,16字节hex数值 */
        b2: string;
        /** 扇区A密钥,6字节hex数值 */
        keyA: string;
        /** 扇区B密钥,6字节hex数值 */
        keyB: string;
        /** 扇区访问控制指令,4字节hex数值 */
        keyC: string;
	};
}

返回值为Promise,同 M1.writeBlockByNFC

M1.writeSectorByPN532(dataArray: SectorData[], keyArray: SectorKey[], isWriteB0: boolean): Promise\

通过 PN532 芯片读卡器向 M1 标签写入扇区数据

参数类型及返回值同 M1.writeSectorByNFC

M1.writeSectorWithUI(dataArray: SectorData[], keyArray: SectorKey[], NFCActionCallback: (result: SDKResponse) => void, PN532ActionCallback: (result: SDKResponse) => void)\:void

调用宿主 UI 向 M1 标签写入扇区数据(用户自行选择使用 NFC 或者 PN532 操作)

参数及回调函数参数见上述其他接口

M1.selectKeyByUI(): Promise\

调用宿主 UI 选择用户保存的密钥文件数据

返回值为Promise,当 resolve 时,返回的对象属性如下

interface ReadKeyResponse {
	/** SDK执行标识符,true为执行成功;false为执行失败 */
	status: boolean;
	data: {
		/** 扇区索引编号,取值0-15 */
        sector: number;
        /** 扇区A密钥,6字节hex数值 */
        keyA: string;
        /** 扇区B密钥,6字节hex数值 */
        keyB: string;
        /** 扇区访问控制指令,4字节hex数值 */
        keyC?: string;
	};
	/** SDK操作回执消息 */
	msg: string;
}

M1.selectCardByUI(): Promise\

调用宿主 UI 选择用户保存的 M1 标签文件数据

返回值对象属性见上述其他接口

System.init(devID: string): void

初始化 SDK

参数及返回值见函数签名

System.connectPN532(): Promise\

连接 PN532 芯片读卡器

返回值为 Promise,当 resolve 时,返回对象属性如下:

interface ConnectPN532Response {
	/** SDK执行标识符,true为执行成功;false为执行失败 */
	status: boolean;
	data: {
		/** PN532是否连接标识符 */
		isConnected: boolean;
	};
	/** SDK操作回执消息 */
	msg: string;
}

System.getPN532Status(): Promise\

获取 PN532 芯片读卡器状态

返回值为 Promise, 当 resolve 时, 返回对象属性如下:

interface PN532StatusResponse {
	/** SDK执行标识符,true为执行成功;false为执行失败 */
	status: boolean;
	data: {
		/** PN532是否连接标识符 */
		isConnected: boolean;
		/** PN532是否插入手机 */
        isDevInsert: boolean;
	};
	/** SDK操作回执消息 */
	msg: string;
}

System.getUserInfo(): Promise\

获取插件使用用户的基础资料

返回值为 Promise, 当 resolve 时,返回对象属性如下:

interface UserinfoResponse {
	/** SDK执行标识符,true为执行成功;false为执行失败 */
	status: boolean;
	data: {
		/** 用户ID */
		id: string;
		/** 用户昵称 */
		nickName: string;
		/** 用户头像 */
		avatar: string;
	};
	/** SDK操作回执消息 */
	msg: string;
}

System.getNFCStatus(): Promise\

获取手机 NFC 开关状态

返回值为 Promise,当 resolve 时, 返回对象属性如下:

interface NFCStatusResponse {
	/** SDK执行标识符,true为执行成功;false为执行失败 */
	status: boolean;
	data: {
		/** NFC开关是否开发 */
		isOpen: boolean;
	};
	/** SDK操作回执消息 */
	msg: string;
}

System.openNFCSettings(): void

打开手机 NFC 设置界面

System.copyToClipboard(text: string): void

复制文本到手机剪贴板

Ui.showToast(msg: string, during?: ToastDuring): void

调用安卓原生 Toast 进行消息展示

参数见函数签名及下面所示

type ToastDuring = 'short' | 'long';

Ui.createModal(config: ModalConfig, confirmCallback: () => void, cancelCallback?: () => void): Modal

根据配置创建一个模态 Modal

confirmCallback 为确认按钮点击回调,位于 Modal 右下角;cancelCallback 为取消按钮点击回调,位于 Modal 左下角,配置项属性如下

interface ModalConfig {
    /** 标题配置 */
    title: {
    	/** 标题文字,最大长度6 */
    	text: string;
    	/** 标题背景色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
    	bgColor?: string;
    	/** 文字颜色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
    	fontColor?: string;
    };
    content: {
        /** 弹窗内容 */
        text: string;
        /** 文字颜色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
        fontColor?: string;
        /** 文字对齐方式 */
        textAlign?: 'left' | 'center' | 'right';
    };
    subContent?: {
        /** 弹窗子内容 */
        text: string;
        /** 文字颜色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
        fontColor?: string;
        /** 文字对齐方式 */
        textAlign?: 'left' | 'center' | 'right';
    };
    confirmBtn: {
        /** 取消按钮文字,最大长度6 */
        text: string;
        /** 按钮背景色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
        bgColor?: string;
        /** 文字颜色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
        fontColor?: string;
    };
    cancelBtn?: {
        /** 确定按钮文字,最大长度6 */
        text: string;
        /** 按钮背景色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
        bgColor?: string;
        /** 文字颜色,rgba(0,0,0,0)/rgb(0,0,0)/#000000/black */
        fontColor?: string;
    };
};

返回值为 Modal 类型,对象属性如下:

interface Moda {
	/** 显示弹窗 */
	show(): void;
	/** 隐藏弹窗 */
	hide(): void;
}

Event.addRWPercentListener(name: EventName, callback: (event: EventPercent) => void): void

添加 NFC/PN532 数据读写进度监听函数

事件名称属性及回调函数参数对象属性如下:

type EventName = 'nfcReadPercent' | 'nfcWritePercent' | 'pn532ReadPercent' | 'pn532WritePercent';

interface EventPercent {
	/** 操作进度数值 */
	value: number;
}

Event.removeRWPercentListener(name: EventName, callback: (event: EventPercent) => void): void

移除 NFC/PN532 数据读写进度监听函数

参数同 Event.addRWPercentListener

持续关注

后续将逐步开放其他 NFC 协议的读写 SDK,如 NDEF 标签、CPU 标签等,敬请持续关注

0.0.14

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago