一门APP开发教程

标题: wapapp 网页封装app接入nfc 网站打包的APP接入js启用NFC 近场通信 [打印本页]

作者: 隔壁老王    时间: 2020-6-22 13:02
标题: wapapp 网页封装app接入nfc 网站打包的APP接入js启用NFC 近场通信
wapapp 网页封装app接入nfc 网站打包的APP接入js启用NFC 近场通信
♦ 使用步骤:
1. 检测设备是否支持 NFC 功能并且已启用;
2. 调用 setListener 设置监听器,NFC 标签数据及操作状态都在此监听器中返回;
3. 调用 enableForegroundDispatch 让本 APP 处于前台激活状态时接管 NFC 调度;
4. 将设备靠近 NFC 标签时会自动读取数据并完成指定的操作;
♦ 目前仅支持 NDEF TAG 写入


状态检测与设置
isSupported 检测设备是否支持 NFC 功能
  1. jsBridge.nfc.isSupported(function(succ, data) {
  2.   alert(data.isSupported ? "支持" : "不支持");
  3. });
复制代码

isEnabled 检测设备是否已启用 NFC
  1. jsBridge.nfc.isEnabled(function(succ, data) {
  2.   alert(data.isEnabled ? "已启用" : "已停用");
  3. });
复制代码

openSettings 转到 NFC 设置
  1. jsBridge.nfc.openSettings();
复制代码


事件监听
setListener 设置监听器
如需接口调用事件,请设置此监听器;
  1. //请设置此监听器监听读写数据和事件
  2. jsBridge.nfc.setListener(function(event, data) {
  3.   show({
  4.     event: event,
  5.     data : data
  6.   });
  7. });

  8. //请拉到页面底部查看回调数据信息
  9. $('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

  10. /**
  11. 回调参数说明:
  12. event - 事件代码,字符串类型,可能的值:

  13.   //将设备靠近 NFC 标签时会自动读取数据
  14.   //数据在 data 参数中返回
  15.   NDEF_DISCOVERED   发现了 NDEF TAG 标签
  16.   TECH_DISCOVERED   发现了支持特定技术的 TAG 标签
  17.   TAG_DISCOVERED    发现了 TAG 标签

  18.   //写入 NDEF TAG
  19.   //写入操作的数据是一次性的
  20.   //写入成功、失败或取消后都会清除待写入的数据,如需再次写入需调用 write 接口重新准备写入的数据
  21.   NDEF_PENDING_WRITE     待写入数据(请将设备靠近 NFC 标签)
  22.   NDEF_WRITE_SUCCESS     写入成功
  23.   NDEF_WRITE_FAILED      写入失败
  24.   NDEF_WRITE_CANCELED    取消写入(设备靠近 NFC 标签时不再写入)

  25.   //只读 NDEF TAG
  26.   //只读操作是一次性的
  27.   //只读操作成功、失败或取消后都会清除只读操作,如需再次执行只读操作需调用 makeReadOnlyNdef 接口重新准备只读操作
  28.   NDEF_PENDING_MAKE_READ_ONLY    待执行置为只读的操作(请将设备靠近 NFC 标签)
  29.   NDEF_MAKE_READ_ONLY_SUCCESS    置为只读成功
  30.   NDEF_MAKE_READ_ONLY_FAILED     置为只读失败
  31.   NDEF_MAKE_READ_ONLY_CANCELED   取消执行置为只读的操作(设备靠近 NFC 标签时不再执行置为只读的操作)

  32.   //写入 MifareUltralight TAG Page
  33.   //写入操作的数据是一次性的
  34.   //写入成功、失败或取消后都会清除待写入的数据
  35.   MIFAREULTRALIGHT_PENDING_WRITE_PAGE     待写入分页数据(请将设备靠近 NFC 标签)
  36.   MIFAREULTRALIGHT_WRITE_PAGE_SUCCESS     分页写入成功
  37.   MIFAREULTRALIGHT_WRITE_PAGE_FAILED      分页写入失败
  38.   MIFAREULTRALIGHT_WRITE_PAGE_CANCELED    取消分页写入(设备靠近 NFC 标签时不再写入)
  39.   //收发 MifareUltralight TAG 原始数据
  40.   //收发操作的数据是一次性的
  41.   //收发成功、失败或取消后都会清除待发送的数据
  42.   MIFAREULTRALIGHT_PENDING_TRANSCEIVE     待收发数据(请将设备靠近 NFC 标签)
  43.   MIFAREULTRALIGHT_TRANSCEIVE_SUCCESS     收发成功
  44.   MIFAREULTRALIGHT_TRANSCEIVE_FAILED      收发失败
  45.   MIFAREULTRALIGHT_TRANSCEIVE_CANCELED    取消收发(设备靠近 NFC 标签时不再发送)

  46. data  - 事件数据,JSON 对象
  47. **/
复制代码



removeListener 移除监听器
  1. //移除监听器,不会再收到回调通知
  2. //在需要时可重新调用 setListener
  3. jsBridge.nfc.removeListener();
复制代码

NFC 调度
enableForegroundDispatch 启用前台调度
• APP当前窗口处于前台激活状态时处理 NFC 事件调度;
• 请先执行 setListener 监听 NFC 事件调度及数据;
  1. //请开启调度以便 APP 在前台激活状态时能处理 NFC 任务调度
  2. //将设备靠近标签后会监听到 NDEF_DISCOVERED 或 TECH_DISCOVERED 或 TAG_DISCOVERED 事件
  3. jsBridge.nfc.enableForegroundDispatch(function(succ, data) {
  4.   alert(succ ? "已启用" : JSON.stringify(data));
  5. });
复制代码


disableForegroundDispatch 停用前台调度
  1. //APP不再处理 NFC 任务调度
  2. jsBridge.nfc.disableForegroundDispatch(function(succ, data) {
  3.   alert(succ ? "已停用" : JSON.stringify(data));
  4. });
复制代码


写入 NDEF TAG
writeNdefUri 写入 URI 数据
  1. //写入 URI 数据
  2. //调用成功后会监听到 NDEF_PENDING_WRITE 事件
  3. //将设备靠近标签后会监听到 NDEF_WRITE_SUCCESS 或 NDEF_WRITE_FAILED 事件
  4. jsBridge.nfc.writeNdefUri({
  5.   //必须,字符串类型,Uri 字符串
  6.   uri: "https://m.baidu.com",
  7.   //可选,布尔类型,写入数据之后是否将标签置为只读状态(置为只读后标签将不再可写),默认 false
  8.   makeReadOnly: false
  9. }, function(succ, data) {
  10.   if (succ) {
  11.     alert("待写入,请将设备靠近 NDEF TAG 标签。");
  12.   } else {
  13.     alert(JSON.stringify(data));
  14.   }
  15. });
复制代码

writeNdefText 写入 TEXT 文本数据
  1. //写入 TEXT 文本数据
  2. //调用成功后会监听到 NDEF_PENDING_WRITE 事件
  3. //将设备靠近标签后会监听到 NDEF_WRITE_SUCCESS 或 NDEF_WRITE_FAILED 事件
  4. jsBridge.nfc.writeNdefText({
  5.   //必须,字符串类型,文本内容
  6.   text: "任意文本数据,Any Text。",
  7.   //可选,布尔类型,写入数据之后是否将标签置为只读状态(置为只读后标签将不再可写),默认 false
  8.   makeReadOnly: false
  9. }, function(succ, data) {
  10.   if (succ) {
  11.     alert("待写入,请将设备靠近 NDEF TAG 标签。");
  12.   } else {
  13.     alert(JSON.stringify(data));
  14.   }
  15. });
复制代码


writeNdefMime 写入 MIME 数据
  1. //写入 MIME 数据
  2. //调用成功后会监听到 PENDING_WRITE 事件
  3. //将设备靠近标签后会监听到 NDEF_WRITE_SUCCESS 或 NDEF_WRITE_FAILED 事件
  4. jsBridge.nfc.writeNdefMime({
  5.   //必须,字符串类型, MimeType 类型
  6.   mimeType: "text/plain",
  7.   //必须,字符串类型,bytes 数组的16进制格式
  8.   //Chinese Dream! 中国梦!(UTF8 Encoded Bytes Array)
  9.   rawBytes: "4368696E65736520447265616D2120E4B8ADE59BBDE6A2A6EFBC81",
  10.   //可选,布尔类型,写入数据之后是否将标签置为只读状态(置为只读后标签将不再可写),默认 false
  11.   makeReadOnly: false
  12. }, function(succ, data) {
  13.   if (succ) {
  14.     alert("待写入,请将设备靠近 NDEF TAG 标签。");
  15.   } else {
  16.     alert(JSON.stringify(data));
  17.   }
  18. });
复制代码


writeNdefText 写入 TEXT 文本数据后置为只读标签
  1. //写入 TEXT 文本数据后置为只读标签
  2. //请谨慎操作,置为只读后标签将不再可写!!!
  3. jsBridge.nfc.writeNdefText({
  4.   text: "任意文本数据,Any Text,ReadOnly !!!",
  5.   ////写入后,将标签置为只读状态
  6.                 makeReadOnly: true
  7. }, function(succ, data) {
  8.   if (succ) {
  9.     alert("待写入,请将设备靠近 NDEF TAG 标签。");
  10.   } else {
  11.     alert(JSON.stringify(data));
  12.   }
  13. });
复制代码

cancelWriteNdef 取消写入 NDEF_PENDING_WRITE
  1. //取消待执行的写入操作
  2. //调用成功后会监听到 NDEF_WRITE_CANCELED 事件,将设备靠近标签将不再执行写入操作
  3. jsBridge.nfc.cancelWriteNdef(function(succ, data) {
  4.   if (succ) {
  5.     alert("已取消 NDEF_PENDING_WRITE");
  6.   } else {
  7.     alert(JSON.stringify(data));
  8.   }
  9. });
复制代码



只读 NDEF TAG
makeReadOnlyNdef 将标签置为只读状态
  1. //将标签置为只读状态
  2. //调用成功后会监听到 NDEF_PENDING_MAKE_READ_ONLY 事件
  3. //将设备靠近标签后会监听到 NDEF_MAKE_READ_ONLY_SUCCESS 或 NDEF_MAKE_READ_ONLY_FAILED 事件
  4. jsBridge.nfc.makeReadOnlyNdef(function(succ, data) {
  5.   if (succ) {
  6.     alert("待置为只读状态,请将设备靠近 NDEF TAG 标签。");
  7.   } else {
  8.     alert(JSON.stringify(data));
  9.   }
  10. });
复制代码


cancelMakeReadOnlyNdef 取消只读 NDEF_PENDING_MAKE_READ_ONLY
  1. //取消待执行置为只读的操作
  2. //调用成功后会监听到 NDEF_MAKE_READ_ONLY_CANCELED 事件,将设备靠近标签将不再执行置为只读的操作
  3. jsBridge.nfc.cancelMakeReadOnlyNdef(function(succ, data) {
  4.   if (succ) {
  5.     alert("已取消 NDEF_PENDING_MAKE_READ_ONLY");
  6.   } else {
  7.     alert(JSON.stringify(data));
  8.   }
  9. });
复制代码


写入 MifareUltralight TAG
writeMifareUltralightPage 写入 MifareUltralight 页
  1. //写入 MifareUltralight 页
  2. jsBridge.nfc.writeMifareUltralightPage({
  3.   //必须,从0开始的页次
  4.   index: 16,
  5.   //必须,4字节数据的16进制格式
  6.   data : "61626364"
  7. }, function(succ, data) {
  8.   if (succ) {
  9.     alert("待写入,请将设备靠近 MifareUltralight TAG 标签。");
  10.   } else {
  11.     alert(JSON.stringify(data));
  12.   }
  13. });
复制代码


cancelWriteMifareUltralightPage 取消写入 MifareUltralight 页
  1. //取消写入 MifareUltralight 页
  2. jsBridge.nfc.cancelWriteMifareUltralightPage(function(succ, data) {
  3.   if (succ) {
  4.     alert("已取消 MIFAREULTRALIGHT_PENDING_WRITE_PAGE");
  5.   } else {
  6.     alert(JSON.stringify(data));
  7.   }
  8. });
复制代码


transceiveMifareUltralight 收发 MifareUltralight 原始数据
将原始数据发送到 MifareUltralight TAG 并接收响应
  1. //收发 MifareUltralight 原始数据
  2. jsBridge.nfc.transceiveMifareUltralight({
  3.   //必须,字符串类型,原始 bytes 数组的16进制格式
  4.   //示例:第0F页写入 ABCD 字符
  5.   rawBytes: "A20F41424344"
  6. }, function(succ, data) {
  7.   if (succ) {
  8.     alert("待收发,请将设备靠近 MifareUltralight TAG 标签。");
  9.   } else {
  10.     alert(JSON.stringify(data));
  11.   }
  12. });
复制代码


cancelTransceiveMifareUltralight 取消收发 MifareUltralight 原始数据
  1. //取消收发 MifareUltralight 原始数据
  2. jsBridge.nfc.cancelTransceiveMifareUltralight(function(succ, data) {
  3.   if (succ) {
  4.     alert("已取消 MIFAREULTRALIGHT_PENDING_TRANSCEIVE");
  5.   } else {
  6.     alert(JSON.stringify(data));
  7.   }
  8. });
复制代码







欢迎光临 一门APP开发教程 (https://bbs.yimenapp.com/) Powered by Discuz! X3.4