2017年苹果在 WWDC 大会上 开放了 iOS11 读取 NDEF 标准格式的 NFC 功能,但只限于 iPhone 7 及以上的机型。iOS13 开始支持 ISO14443、ISO15693 的读取。
支持NFC的设备: 1、iOS11上的手机只支持读的功能,可以通过手机的NFC功能读标签. 2、iOS13以上的系统支持写的功能。 3、支持NFC的最低设备为iPhone 7和iPhone 7Plus
注意:readTag、setTips、stopReadTag三个接口需要在iOS13以上设备
插件使用攻略
1、登录苹果开发者中心,配置包名(Bundle Identifier)申请 NFC 权限,如下图所示:
2、创建 entitlements 文件,告诉 YonBuilder移动开发 应用打包服务器 APP 申请访问 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>NDEF</string>
</array>
</dict>
</plist>
3、应用打包时勾选、填写访问 NFC 提示语,如下图所示:
当前设备是否支持 NFC 功能
available()
ret:
{
status: //布尔类型;是否支持,true|false
}
var mobileNFC = api.require('mobileNFC');
mobileNFC.available(function(ret) {
if (ret.status) {
api.alert({ msg: "支持 NFC 功能!" });
} else {
api.alert({ msg: "不支持 NFC 功能!" });
}
});
iOS11 及以上系统
可提供的 1.0.0 及更高版本
添加识别 NDEF 结果的监听
addEventListener(callback(ret))
ret:
{
status: , //布尔类型;是否获取成功 deprecated
eventType:'', //字符串类型;交互事件类型;取之范围:
//didDetectNDEFs:在iOS11-iOS12上读取成功的回调
//didDetectTags:在iOS13上读取带tag成功的回调
//connectToTagFail:链接 tag 失败
//connectToTagSuccess:链接成功,可以开始读写了
//queryNDEFStatusFail:查询tag 状态失败
//queryNDEFNotSupported:不是NDEF标签
messages:[ //数组类型;仅当 eventType 为didDetectNDEFs 时有效
records:[{
type:, //字符串类型;载体的类型
identifier:, //字符串类型;载体的标识
payload: , //字符串类型;载体中的未解析数据
typeNameFormat: //数字类型;载体的类型名称格式
// 0:Empty
// 1:NFCWellKnown
// 2:Media
// 3:AbsoluteURI
// 4:NFCExternal
// 5:Unknown
// 6:Unchanged
}]
]
}
err:
{
code: , //布尔类型;是否获取成功
msg:, //字符串类型;
}
var mobileNFC = api.require('mobileNFC');
mobileNFC.addEventListener(function(ret, err) {
if (ret.status) {
api.alert({ msg: JSON.stringify(ret) });
} else {
api.alert({ msg: JSON.stringify(err)});
}
});
iOS11 及以上系统
可提供的 1.0.0 及更高版本
开始识别 NDEF
begin({params})
title:
multiple:
var mobileNFC = api.require('mobileNFC');
mobileNFC.begin({
title: '您正在使用 NFC 功能',
multiple: false
});
iOS11 及以上系统
可提供的 1.0.0 及更高版本
停止识别 NDEF
invalidate()
var mobileNFC = api.require('mobileNFC');
mobileNFC.invalidate();
iOS11 及以上系统
可提供的 1.0.0 及更高版本
开始读取 NDEF 数据。注意本接口仅支持iOS13以上设备。
read(callback(ret))
ret:
{
eventType:'', //字符串类型;交互事件类型;取之范围:
//readNDEFFail:读取错误
//messageNull:信息为空
//readSuccess:读取成功
records:[{ //数组类型;仅当 readSuccess 为didDetectNDEFs 时有效
type:, //字符串类型;载体的类型
identifier:, //字符串类型;载体的标识
payload: , //字符串类型;载体中的未解析数据
typeNameFormat: //数字类型;载体的类型名称格式
// 0:Empty
// 1:NFCWellKnown
// 2:Media
// 3:AbsoluteURI
// 4:NFCExternal
// 5:Unknown
// 6:Unchanged
}]
}
err:
{
code: , //布尔类型;是否获取成功
msg:, //字符串类型;
}
var mobileNFC = api.require('mobileNFC');
mobileNFC.read(function(ret, err) {
if (ret.eventType == 'readSuccess') {
api.alert({ msg: JSON.stringify(ret) });
} else {
api.alert({ msg: JSON.stringify(err)});
}
});
iOS13 及以上系统
可提供的 1.0.1 及更高版本
写 NDEF 数据。注意本接口仅支持iOS13以上设备。
write({params},callback(ret))
type:
identifier:
payload:
typeNameFormat:
ret:
{
status:'' //布尔类型;
}
err:
{
code: , //布尔类型;是否获取成功
msg:, //字符串类型;
}
var mobileNFC = api.require('mobileNFC');
mobileNFC.write({
type:'U',
identifier:'123456',
payload:'www.apicloud.com',
typeNameFormat:1
},function(ret, err) {
if (ret.eventType == 'readSuccess') {
api.alert({ msg: JSON.stringify(ret) });
} else {
api.alert({ msg: JSON.stringify(err)});
}
});
iOS13 及以上系统
可提供的 1.0.1 及更高版本
打开NFC,读取ISO14443、ISO15693卡片信息。
readTag(callback(ret,err))
ret:
{
status: //是否成功
id: //status为true时返回卡片物理id
msg: //status为false时返回错误信息
}
err:
{
code: , //布尔类型;是否获取成功
msg:, //字符串类型;
}
var mobileNFC = api.require('mobileNFC');
mobileNFC.readTag(function(ret,err) {
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
}
}
iOS 系统
可提供的1.0.2及更高版本
关闭读取
stopReadTag()
var mobileNFC = api.require('mobileNFC');
mobileNFC.stopReadTag();
iOS 系统
可提供的1.0.2及更高版本
设置提示文案
setTips({params})
tips:
var mobileNFC = api.require('mobileNFC');
mobileNFC.setTips({
tips:"识别成功!"
});
iOS 系统
可提供的1.0.2及更高版本