更新记录
1.0.15(2024-06-11)
下载此版本
- 解决多个页面使用插件,仅在首次调用插件的页面回调中返回数据的BUG
1.0.14(2024-05-10)
下载此版本
1.0.13(2024-05-10)
下载此版本
查看更多
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.6.8,Android:6.0,iOS:不支持,HarmonyNext:不确定 |
× |
× |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
× |
× |
× |
× |
× |
× |
× |
× |
× |
鱼住未来科技有限公司uniapp读取身份信息插件 yzwl-nfc-reader
使用文档
一、说明
- 本插件基于uniapp的UTS插件技术,集成鱼住未来NFC身份信息读取安卓SDK研发,鱼住未来官方网站
- 安卓原生应用读卡SDK、windows读卡SDK、linux读卡SDK、微信小程序读卡插件、浏览器多功能读卡插件等开发集成SDK和文档 鱼住未来官方网站SDK下载地址
- 本插件目前仅支持Android平台
- 本插件使用过程中需要 网络
- 本插件支持NFC读卡和USB连接专用读卡器读卡
- NFC读卡功能使用环境需要设备支持NFC功能
- USB读卡功能需要使用【专用读卡器】,目前鱼住未来售卖在线版读卡器和离线版读卡器
- 开发集成本插件, 需要【自定义基座】打包功能
- 应用中如有其他需要NFC读取的操作,还请注意:与原生应用生命周期不同。原生安卓应用中会在每个页面(Activity) (理解为onReady)和onPause(理解为onHide或者onUnload)的时候向手机系统申请和释放NFC;
本插件运行过程中,会通过UTSAndroid.onAppActivityResume()方法和UTSAndroid.onAppActivityPause()方法向手机系统申请和释放NFC。
结果就是原生安卓应用仅在NFC读卡页面及应用进入后台和返回前台,向系释放和申请NFC;而uniapp则是应用进入后台(如切换到其他应用,返回桌面等操作)和回到前台向系统释放和申请NFC,和uni应用的页面跳转无关!!!
- 插件使用的NFC应用参数,敬请访问【鱼住云用户控制台】,注册用户、创建NFC应用
- 开发者可以创建【共享计费】类型的应用,系统会赠送20次开发次数!如需更多开发测试次数请通过下方的联系方式,联系我们!
- 如有开发问题请通过下方的联系方式,联系我们!
二、接入
1. 下载安装
2. 页面引入插件 yzwl-nfc-reader
- 需要插件目录的相对路径
- 定义全局变量 thisPage (变量名也可自定义), 作者在开发测试过程中,发现回调函数获取到的读卡结果,通过 this.data 初次赋值过后,页面可以正常渲染,但跳转到其他页面后再返回读卡页面进行读卡操作,获取读卡结果,赋值都正常(watch能查看数据变动),但页面就是未渲染。因此使用全局变量进行赋值,解决此问题。
import * as Reader from "../../uni_modules/yzwl-nfc-reader"
let thisPage;
- 定义页面接受变量 info(Object) 身份数据,progress(int) 读卡进度
data() {
return {
progress: 0,
info: null
}
}
3. NFC初始化并进行登录
- 初始化操作在页面的周期函数onLoad() 或 onShow() 进行,推荐使用 onShow()
- 全局变量thisPage先进行赋值 thisPage = this
- 调用插件方法Reader.initReader(),填写登录参数,及实现回调
- 回调必须实现,参数(res)不可修改,不然会报错,回调说明见下文!
- USB读卡 需要调用Reader.usbAutoReadConfig(false)方法
- 注册页面监听函数newintent,原生应用NFC监听读卡操作是在 页面(activity)的 onNewIntent() 方法中实现的,UTS文档中并未发现,因此需要使用plus.globalEvent.addEventListener来实现,调用 Reader.onNewIntent()方法。
- 集成后,进入页面即可触发读卡操作,不需要手动操作。每个设备的NFC模块在不同位置,读卡时候请保持稳定
Reader.initReader({
data: {
appKey: "",
appSecret: "",
userData: ""
},
success: (res) => {
res.photoBase64Png = "data:image/png;base64," + res.photoBase64Png
thisPage.info = res
console.log("读卡结果:", res)
},
progress: (res) => {
thisPage.progress = res
},
start: (res) => {
thisPage.info = null
console.log("开始读取:", res)
},
end: (res) => {
console.log("结束读取:", res)
},
fail: (res) => {
thisPage.errorMessage = "错误信息:"+ res.msg + ", 错误码:"+ res.code;
console.log("错误信息:", res)
},
})
plus.globalEvent.addEventListener('newintent', function() {
// 轮询调用NFC 异步进行
setTimeout(() => {
Reader.onNewIntent()
}, 500);
});
Reader.usbAutoReadConfig(false)
初始化说明
名称 |
必须实现 |
说明 |
data |
是 |
登录参数,详见下文 |
success |
是 |
成功回调,res为身份信息数据 详见下文 |
fail |
是 |
失败回调,res为json对象,{code:错误码,msg:错误信息} |
progress |
是 |
读卡进度,res为int/number类型 值范围为0~100 |
start |
是 |
读卡开始的操作,客户可在此进行一些操作,如 清空上一次读卡结果 |
end |
是 |
读卡结束的操作,客户可在此进行读卡后操作,如进行人脸比对等等 |
登录参数
名称 |
必须必须 |
说明 |
appKey |
是 |
应用key 可在鱼住云控制台注册用户后创建应用获取 |
appSecret |
是 |
应用Secret 应用创建后获取,创建后及时妥善保存 |
userData |
否 |
用户标识,在共享应用可为空,独立应用必填,否则会读卡失败 |
身份信息字段说明
字段 |
类型 |
说明 |
name |
string |
姓名 |
nation |
string |
民族 |
sex |
string |
性别 |
no |
string |
证件号 |
birth |
string |
出生日期,格式为yyyy-mm-dd |
year |
string |
出生年 |
month |
string |
出生月 |
date |
string |
出生日 |
address |
string |
住址 |
signedDepartment |
string |
签发机关 |
validityBegin |
string |
有效期限开始时间 ,格式为yyyy.mm.dd |
validityEnd |
string |
有效期限结束时间 ,格式为yyyy.mm.dd |
photoBase64Bmp |
string |
证件照的base64数据bmp格式,如需页面展示,请自行在数据前加 "data:image/bmp;base64," |
photoBase64Png |
string |
证件照的base64数据png格式,已做人像抠图,处理如需页面展示,请自行在数据前加 "data:image/png;base64," |
身份数据JSON
{
"sex": "",
"birth": "",
"year": "",
"month": "",
"date": "",
"name": "",
"nation": "",
"no": "",
"signedDepartment": "",
"validityEnd": "",
"photoBase64Bmp": "data:image/bmp;base64,",
"photoBase64Png": "data:image/png;base64,",
"address": "",
"validityBegin": ""
}
4. 移除newintent监听(重要)
- 在跳转到其他页面或者应用返回后台的操作中,需要即使触发NFC操作也不会进行读卡,不然既消耗系统资源又有可能产生计费操作。
为防止这种操作,我们必须在onHide()函数和 onUnload()函数中,调用以下代码移除newintent监听!
onHide() {
plus.globalEvent.removeEventListener('newintent');
},
onUnload() {
plus.globalEvent.removeEventListener('newintent');
}
5. USB读卡器读卡((https://console.aidoing.com.cn))
- 支持手动读卡, 即点击按钮触发事件进行读卡。调用方法如下:
- 页面视图中加入按钮
- method方法中调用 Reader.usbReader()
<button type="primary" @click="doRead">USB读卡</button>
doRead(){
//手动调用USB读一次卡
Reader.usbReader()
}
6. USB读卡器读卡(新功能)
- OTG自动读卡, 即进入页面后进行读卡。调用方法如下:
- onShow()方法中初始化USB并调用自动读卡方法
Reader.usbAutoReadConfig(true)
Reader.usbLoopReader()
- 页面hide或者销毁时, onHide() 和 onUnload() 中移除自动读卡(很重要 不然一直循环)
Reader.usbLoopReaderStop()
三、下载demo示例
四、未来开发计划
- 插件支持USB自动读卡(目前仅支持手动读卡,按钮触发)
- 插件支持读取护照。
五、联系我们