更新记录

1.0.0(2021-04-09)

用于iOS NFC数据交互,支持 1.NDEF标签读取 2.NFCISO15693Tag、NFCMiFareTag标签数据收发


平台兼容性

Android iOS
× 适用版本区间:11 - 15

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


测试环境

HBuilder X 3.1.6 基座SDK版本1.9.9.80552

引用方式

var nfcHelper = uni.requireNativePlugin("GLLNFCUniPlugin-Helper")

API

iOS 11 NFCNDEFReaderSession

  • nfcNDEFReaderAvaliable()
/*!
 * @method 同步判断是否支持NFCNDEFReaderSession
 */
// 示例
var ret = nfcHelper.nfcNDEFReaderAvaliable()
var tipText = null
if(ret) {
    tipText = "支持NFC读取"
}else {
    tipText = "不支持NFC读取"
}
console.log(tipText)
  • nfcNDEFReaderAvaliableCallback(callback)
/*!
 * @method 异步判断是否支持NFCNDEFReaderSession
 * @param callback  回调方法,回传参数给 js端。格式为NSDictionary其中包含
 *      resultCode:是否支持
 *      resultMsg:详细信息
 */
// 示例
// 调用异步方法
nfcHelper.nfcNDEFReaderAvaliableCallback((ret) => {
        var tipText = null
        if(ret) {
            tipText = "支持NFC读取"
        }else {
            tipText = "不支持NFC读取"
        }
        console.log(tipText)
    })
  • invalidateNDEFReaderSession()
/*!
 * @method 关闭NFCNDEFReaderSession标签扫描功能
 */
// 示例
nfcHelper.invalidateNDEFReaderSession()
  • beginNDEFReaderSessionWithParams(option, callback)
/*!
 * @method 开启NFCNDEFReaderSession标签扫描功能
 * @param params js 端调用方法时传递的参数。格式如下
 *      invalidateAfterFirstRead:读完一个NDEF数据后是否继续读取,默认NO
 *      alertMessage:扫描标签时弹窗下显示的提示内容,默认不显示
 * @param callback 回调方法,回传参数给 js端。格式为NSDictionary其中包含
 *      resultCode:状态码,成功时为9000
 *      resultMsg:状态码描述
 *      payloads:读取的NDEF数据,NSDictionary格式,其中包含以下字段
 *          typeName:标签类型名称,字符串格式。可能为Empty、NFCWellKnown、Media、AbsoluteURI、NFCExternal、Unknown、Unchanged、空
 *          payload:标签数据,NSData数据格式
 *          type:标签类型,NSData数据格式
 *          indentifier:标签标识,NSData数据格式
 *
 * @note 开启一个session,并且同时只能开启一个
 * @note session最多扫存活60s,超时必须重启新session
 * @note App完全在前台模式,切入后台失效
 */
// 示例
// 调用异步方法
nfcHelper.beginNDEFReaderSessionWithParams({
        'invalidateAfterFirstRead': true,
        'alertMessage': '靠近NFC标签'
    },
    (ret) => {
        nfcHelper.invalidateNDEFReaderSession()
        setTimeout(() =>{
            uni.showToast({
                title:'异步方法 ' + JSON.stringify(ret),
                icon: "none"
            })
        }, 2.0);
    })

iOS 13 NFCTagReaderSession

  • nfcTagReaderAvaliable()
/*!
 * @method 同步判断是否支持NFCTagReaderSession
 */
// 示例
var ret = nfcHelper.nfcTagReaderAvaliable()
var tipText = null
if(ret) {
    tipText = "支持NFC读取"
}else {
    tipText = "不支持NFC读取"
}
console.log(tipText)
  • nfcTagReaderAvaliableCallback(callback)
/*!
 * @method 异步判断是否支持NFCTagReaderSession
 * @param callback  回调方法,回传参数给 js端。格式为NSDictionary其中包含
 *      resultCode:是否支持
 *      resultMsg:详细信息
 */
// 示例
nfcHelper.nfcTagReaderAvaliableCallback((ret) => {
    var tipText = null
        if(ret) {
            tipText = "支持NFC读取"
        }else {
            tipText = "不支持NFC读取"
        }
        console.log(tipText)
    })
  • beginTagReaderSessionAndConnectTagWithParams(option, callback)
/*!
 * @method 开启NFCTagReaderSession标签扫描功能并建立连接
 * @param params js 端调用方法时传递的参数。格式为NSDictionary其中
 *      alertMessage:扫描标签时弹窗下显示的提示内容,默认不显示
 * @param callback 回调方法,回传参数给 js端。格式为NSDictionary其中包含
 *      resultCode:状态码,9000为标签靠近手机后连接成功,连接成功后才可以进行数据收发交互
 *      resultMsg:状态码描述,格式为NSString字符串
 *
 * @note 开启一个session,并且同时只能开启一个
 * @note session最多扫存活60s,超时必须重启新session
 * @note App完全在前台模式,切入后台失效
 */
// 示例
// 调用异步方法
nfcHelper.beginTagReaderSessionAndConnectTagWithParams({
        'alertMessage': '靠近NFC标签'
    },
    (ret) => {
        if (ret.resultCode == 9000) {
            this.writeDataToTag()
        }else {
            setTimeout(() =>{
                uni.showToast({
                    title:'异步方法 ' + JSON.stringify(ret),
                    icon: "none"
                })
            }, 2.0);
        }
    })
  • invalidateTagReaderSession()
/*!
 * @method 关闭NFCNDEFReaderSession标签扫描功能
 */
// 示例
nfcHelper.invalidateTagReaderSession()
  • writeTo15693TagWithParams(option, callback)
/*!
 * @method 对15693标签进行数据收发交互,需先建立连接再使用该方法
 * @param params js 端调用方法时传递的参数。格式如下
 *      commandCode:标签为15693时存在,Custom command code defined by the IC manufacturer.  Valid range is 0xA0 to 0xDF inclusively.
 *      writeData:Custom request parameters defined by the command.
 * @param callback 回调方法,回传参数给 js端。格式为NSDictionary其中包含
 *      resultCode:状态码,9000为数据收发成功,标签返回数据请看描述信息。
 *      resultMsg:状态码描述,格式为NSString字符串。当数据收发成功时,此字段数据为Hex字符串类型。
 *
 * @discussion                      Custom command (0xA0 to 0xDF command code) as defined in ISO15693-3 specification.  IC manufacturer code from the tag is
 *                                  automatically inserted after the command byte before appending the custom request parameters in forming the packet.
 */
// 示例
// 15693标签
nfcHelper.writeTo15693TagWithParams({
        'commandCode': 0xC0,
        'writeData': '0600',
    },
    (ret) => {
        nfcHelper.invalidateTagReaderSession()
        setTimeout(() =>{
            uni.showToast({
                title:'异步方法 ' + JSON.stringify(ret),
                icon: "none"
            })
        }, 2.0);
    })
  • writeToMifareTagWithParams(option, callback)
/*!
 * @method 对Mifare标签进行数据收发交互
 * @param params js 端调用方法时传递的参数。格式如下
 *      writeData:Custom request parameters defined by the command.
 * @param callback 回调方法,回传参数给 js端。格式为NSDictionary其中包含
 *      resultCode:状态码,9000为数据收发成功,标签返回数据请看描述信息。
 *      resultMsg:状态码描述,格式为NSString字符串。当数据收发成功时,此字段数据为Hex字符串类型。
 *
 */
// 示例
// Mifare标签
nfcHelper.writeToMifareTagWithParams({
        'commandCode': 0xC0,
        'writeData': '0600',
    },
    (ret) => {
        nfcHelper.invalidateTagReaderSession()
        setTimeout(() =>{
            uni.showToast({
                title:'异步方法 ' + JSON.stringify(ret),
                icon: "none"
            })
        }, 2.0);
    })

隐私、权限声明

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

1.manifest.json中选择App权限模块,找到iOS隐私信息访问许可描述中的“使用NFC(NFCReaderUsageDescription)”添加描述 2.云打包时证书配置 a.打开https://developer.apple.com/account/ b.左侧选择identifiers找到你项目的profile对应的bundle id打开 c.找到NFC Tag Reader选上以后下载证书更新到打包选项

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

插件不采集任何数据

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

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