更新记录

1.0.0(2022-09-09)

1:初次提交 2:实现读卡器插件初始化、读卡、写卡、预设密码等功能


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 9.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


1. 插件使用

插件引入方式: const NFCCard = uni.requireNativePlugin('king-nfc-card');

2.API说明

初始化SDK initSDK()

隐藏客屏 setCallBack(result=>{})

参数 类型 默认值 说明
result function 返回数据

返回的是Json字符串需要进行JSOPN.parse(data);

callBack(data){
    console.log("返回值",data);
    let json = JSON.parse(data);
    if (json.code == 'fail') {
        return;
    }
    switch (json.type) {
        case 'findCard':
            break;
        case 'setPassword':
            break;
        case 'rFicClicked':
            break;
        case 'readData':
            break;
        case 'writeData':
            break;
        case 'writeAndSet':
            break;
    }
}

打开设备 openDev()

关闭设备 closeDev()

蜂鸣 deep()

关闭设备 closeDev()

关闭设备 closeDev()

寻卡 findCardClicked()

认证 rFICClicked(secNr,keyModel)

参数 类型 默认值 说明
secNr number 扇区
keyModel number 密码Key值1-6

读块 readCardInfoClicked(secNr,becNr)

参数 类型 默认值 说明
secNr number 扇区
becNr number

写块 writeCardInfoClicked(secNr,becNr,data)

参数 类型 默认值 说明
secNr number 扇区
becNr number
data string 数据:“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00”

写数据并修改密码 writeCardInfoAndSetPassword(secNr,becNr,data,newPassword)

参数 类型 默认值 说明
secNr number 扇区
becNr number
data string 数据:“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00”
newPassword string 数据:newPassword=this.passwordA+this.passwordCtrl+this.passwordB;

写密码 setPassword(secNr,key,password)

参数 类型 默认值 说明
secNr number 扇区
keyModel number 密码Key值1-6 A密码1-3,B密码:4-6
password string 密码:“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00”

寻卡-认证-读卡 readCardInfo(secNr,becNr,key)

参数 类型 默认值 说明
secNr number 扇区
becNr number
key number 密码Key值1-6

json参数说明 json参数完全自定义:state设置消息类型,data设置消息数据

参数 类型 默认值 说明
state String 消息类型,用于客屏html接收数据后判断消息类型
data Object 消息内容{xx:aa}

Demo

<template>
    <view>
        <view style="display: flex;flex-direction: row;">
            <view>新卡</view>
            <switch color="#FFCC33" style="transform:scale(0.7)" :checked="isNewCard" @change="changeCardType"/>
        </view>
        <button @click="initSDK">初始化SDK</button>
        <button @click="openDev">连接设备</button>
        <button @click="closeDev">断开设备</button>
        <button @click="findCardClicked">寻卡</button>
        <button @click="rFICClicked">认证</button>
        <button @click="readCardInfoClicked">读块</button>
        <button @click="writeCardInfoClicked">写块</button>
        <button @click="writeCardInfoAndSetPassword">写数据并修改密码</button>
        <button @click="deep">蜂鸣</button>
        <button @click="setPassword">写密码</button>
        <button @click="setPreinstallPassword">设置预设密码</button>
        <button @click="readCardInfo">寻卡-认证-读卡</button>
    </view>
</template>

<script>
    const NFCCard = uni.requireNativePlugin('king-nfc-card');
    export default {
        data() {
            return {
                isNewCard:true,
                defaultPassword:"FFFFFFFFFFFF",
                passwordA:"FFFFFFFFFFFF",
                passwordB:"FFFFFFFFFFFF",
                passwordCtrl:"08778F69",//AB密码权限,不建议修改
                secNr:2,
                becNr:0,
                keyModel:4,
            }
        },
        methods: {
            changeCardType(value){
                console.log("选择状态",value.detail.value);
                this.isNewCard=value.detail.value;
            },
            initSDK(){
                NFCCard.initSDK();
                NFCCard.setCallBack(this.callBack)

            },
            callBack(data){
                console.log("返回值",data);
                console.log(data.code)
                let json = JSON.parse(data);
                if (json.code == 'fail') {
                    return;
                }
                switch (json.type) {
                    case 'findCard':
                    console.log("寻卡结束-认证");

                        // this.rFICClicked();
                        break;
                    case 'setPassword':
                        // nfcSDK.rFICClicked();
                        break;
                    case 'rFicClicked':
                        this.readCardInfoClicked();
                        break;
                    case 'readData':
                        break;
                    case 'writeData':
                        break;
                    case 'writeAndSet':
                        break;
                }
            },
            openDev(){
                NFCCard.openDev();
                let password=this.isNewCard?this.defaultPassword:this.passwordB;
                setTimeout(()=>{                NFCCard.setPassword(this.secNr,this.keyModel,password);},1000)
            },
            closeDev(){
                NFCCard.closeDev();
            },
            findCardClicked(){
                console.log("寻卡-----")
                NFCCard.findCardClicked();
            },
            rFICClicked(){
                console.log("认证卡---")
                NFCCard.rFICClicked(this.secNr,this.keyModel);
            },
            readCardInfoClicked(){
                NFCCard.readCardInfoClicked(this.secNr,this.becNr);
            },
            writeCardInfoClicked(){
                NFCCard.writeCardInfoClicked(this.secNr,this.becNr,"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00");
            },
            writeCardInfoAndSetPassword(){
                let newPassword=this.passwordA+this.passwordCtrl+this.passwordB;
                NFCCard.writeCardInfoAndSetPassword(this.secNr,this.becNr,"FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000",newPassword);
            },
            deep(){
                NFCCard.deep();
            },
            setPassword(){
                let password=this.isNewCard?this.defaultPassword:this.passwordB;
                NFCCard.setPassword(this.secNr,this.keyModel,password);
            },
            setPreinstallPassword(){
                NFCCard.setPassword(this.secNr,1,this.passwordA);
                NFCCard.setPassword(this.secNr,5,this.passwordB);
            },
            readCardInfo(){//需要先写入预设密码,密码是写着读卡器上写一次就可以
                NFCCard.readCardInfo(this.secNr,this.becNr,1);
            }
        }
    }
</script>

<style>

</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问