0.0.14 • Published 11 months ago

nfcreader-sdk v0.0.14

Weekly downloads
-
License
MIT
Repository
-
Last release
11 months 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

11 months ago

0.0.12

11 months ago

0.0.11

11 months ago

0.0.10

11 months ago

0.0.9

11 months ago

0.0.8

11 months ago

0.0.7

11 months ago

0.0.6

11 months ago

0.0.5

11 months ago

0.0.4

11 months ago

0.0.3

11 months ago

0.0.2

11 months ago

0.0.1

11 months ago