为帮助用户更好更快的使用插件,论坛维护了一个示例,示例中包含示例代码供您参考。
nfc 插件概述
nfc插件封装在安卓下对NFC下的NDEF文本数据读写和iOS下对NFC下的NDEF文本数据读取,(备注:iOS系统支持11以上,iphone7以上的机型)
iOS模式下配置相关
1、进入开发者中心设置AppID支持NFC Tag Reading,并且设置项目的Bundle Identifier跟新设置的AppID同步.
2、创建 entitlements文件
YonBuilder移动开发 平台上的开发者,可通过 创建 entitlements 文件 告诉编译服务器开通苹果NFC读取功能。配置方法参考论坛帖子。配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
<string>NDEF</string>
</array>
</dict>
</plist>
3、在应用打包处需要勾选"NFC读取"权限。
4、常见错误码。
错误码 | 错误描述 |
---|---|
1 | 不支持此功能 |
2 | 安全问题 |
100 | 标签连接丢失 |
101 | 重连次数过多 |
102 | 标签响应错误 |
200 | 用户取消会话 |
201 | 会话时间超时 |
202 | 会话意外终止 |
203 | 系统正忙,会话失败 |
204 | 读取的第一个NDEF |
300 | 标签配置无效参数 |
5、format代码含义。
代码 | 英文 | 描述 |
---|---|---|
0 | NFCTypeNameFormatEmpty | 空信息 |
1 | NFCTypeNameFormatNFCWellKnown | NFCWellKnown |
2 | NFCTypeNameFormatMedia | RFC 2046 定义的媒体类型 |
3 | NFCTypeNameFormatAbsoluteURI | 统一使用资源标识标准 |
4 | NFCTypeNameFormatNFCExternal | 使用外部类型定义的值 |
5 | NFCTypeNameFormatUnknown | 未知 |
6 | NFCTypeNameFormatUnchanged | 该数据不是分块数据记录的第一条记录 |
6、type代码含义。
代码 | 描述 |
---|---|
T | TEXT |
U | URI |
Android模式下
常见错误码。
错误码 | 错误描述 |
---|---|
-1 | 未知错误 |
1 | 您的设备不支持NFC |
2 | 请在系统设置中开启NFC |
3 | 取消NFC操作 |
4 | 写入数据不能为空 |
5 | NFC Tag是只读的 |
6 | NFC Tag的空间不足 |
7 | 该NFC标签不支持NDEF格式 |
8 | 从标签读取数据Parcelable对象为空 |
9 | NFC数据不是NDEF文本格式数据 |
Android:4.0及以上 iOS:11.0及以上
判断设备是否支持NFC(iOS请在初始化之前进行验证)
readingAvailable(callback(ret, err))
ret:
{
status: true, //布尔型;true||false
}
err:
{
msg : 'Your system version is too low'
}
var demo = api.require('nfc');
demo.readingAvailable(function(ret, err){
alert(JSON.stringify(ret) + " " +JSON.stringify(err));
});
iOS、Android系统
可提供的1.0.3及更高版本
识别结果监听(Android模式设置此参数可以达到整个App内拦截,不会弹出手机类其他应用)
addEventListener(callback(ret))
ret:
{
status: true, //布尔型;true||false
result : '', //标签文本内容数据
resultHex : '', //标签16进制数据
tagId : '1233123' //标签ID
resultJson:{//标签内容 (iOS是此JSON格式)
format : '',//载体的类型名称格式,由NDEF规范定义
identifier : '',//标识,由NDEF规范定义
type : '',//载体的类型,由NDEF规范定义
payload : ''//载体中的未解析数据,由NDEF规范定义
plaloadLength : 0,//长度
encoding : '',//isParseContent为true返回 type = T 有效
language : '',//isParseContent为true返回type = T 有效
payloadArr : '',//isParseContent为true返回
data : '',//解析结果
}
}
var demo = api.require('nfc');
demo.addEventListener(function(ret, err){
api.alert({msg: JSON.stringify(ret)});
});
iOS、Android系统
可提供的1.0.2及更高版本
移除NFC数据监听
removeEventListener()
var demo = api.require('nfc');
demo.removeEventListener();
iOS、Android系统
可提供的1.0.0及更高版本
配置读写标签界面UI元素(不执行本接口则选用插件默认UI布局方案)
initPageConfig({params}, callback(ret,err))
isDebug:
backgroundColor:
title:
{
text : '请读卡1', //标题 默认值:请读卡
color : '#000000', //标题字体颜色 默认值:#FFFFFF
background : '#551A8B',//标题栏背景色 默认值:#48C997
layoutHeight : 45 //标题栏高度 默认值:45
}
center:
{
logo : 'widget://res/nfc_read.png', //png,jpg,gif类型的图片logo文件路径 支持fs:// widget:// 存在默认图片
text : '122221', //文字说明 默认值:请将NFC标签或者贴纸靠近手机背面
color : '#00EE00', //文字说明字体颜色 默认值:#000000
}
alertMessages:
{
tips0 : '准备扫描,请将卡片贴近手机',
tips1 : '读取成功',
tips2 : '写入失败',
tips3 : '存在多个标签',
tips4 : '连接NFC标签失败',
tips5 : '查询NFC标签状态失败',
tips6 : '标签不是NDEF格式',
tips7 : '读取NFC标签失败',
tips8 : 'NFC标签为空',
tips9 : '写入成功',
}
ret:
{
status: true //布尔型;true|false
}
err:
{
errorCode: 1 ,
errorMessage : '您的设备不支持NFC'
}
var demo = api.require('nfc');
demo.initPageConfig({
isDebug : true, //开启时,不支持nfc的手机可以打开界面看UI效果
backgroundColor : '#FF4040', //页面背景色
title : {
text : '请读卡1', //标题
color : '#000000', //标题字体颜色
background : '#551A8B', //标题栏背景色
layoutHeight : 45 //标题栏高度
},
center : {
logo : 'widget://res/nfc_read.png', //图片logo文件路径
text : '请将NFC标签或者贴纸靠近手机背面11', //文字说明
color : '#00EE00', //文字说明字体颜色
}
},function(ret){
api.alert({msg: JSON.stringify(ret)});
});
Android系统
可提供的1.0.0及更高版本
写NFC标签文本或者16进制数据
writeText({params}, callback(ret, err))
isOnlyFirst:
type:
mimeType:
data:
isTag:
ret:
{
status: true, //布尔型;true||false
result : '写入成功' //仅status: true 有值
}
err:
{
errorCode: 3 ,
errorMessage : '取消NFC操作'
}
var demo = api.require('nfc');
demo.writeText({
data : '我是测试数据12345678fffgs'
},function(ret, err){
alert(JSON.stringify(ret) + " " +JSON.stringify(err));
});
iOS、Android系统
可提供的1.0.0及更高版本
读NFC标签文本数据
readText({params},callback(ret, err))
isOnlyFirst:
isParseContent:
isTag:
ret:
{
status: true, //布尔型;true||false
result : '', //标签内容
resultHex : '', //16进制内容
tagId : '1233123', //标签ID
resultJson:{//标签内容 (iOS是此JSON格式)
format : '',//载体的类型名称格式,由NDEF规范定义
identifier : '',//标识,由NDEF规范定义
type : '',//载体的类型,由NDEF规范定义
payload : ''//载体中的未解析数据,由NDEF规范定义
plaloadLength : 0,//长度
encoding : '',//isParseContent为true返回 type = T 有效
language : '',//isParseContent为true返回type = T 有效
payloadArr : '',//isParseContent为true返回
data : '',//解析结果
}
}
err:
{
errorCode: 3 ,
errorMessage : '取消NFC操作'
}
var demo = api.require('nfc');
demo.readText(function(ret, err){
alert(JSON.stringify(ret) + " " +JSON.stringify(err));
});
iOS、Android系统
可提供的1.0.0及更高版本