敬告:此 demo 演示为开放测试页面,仅用于开发者快速测试体验应用功能,请严格遵守开发者协议,九游会国际-九游会真人第一品牌。
♦ js-sdk 引用方式:
♦ 普通网页 script 方式加载:下载最新版 ,请在页面上调用 jsbridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge
♦ 使用步骤:
1. 检测设备是否支持 nfc 功能并且已启用;
2. 调用 setlistener 设置监听器,nfc 标签数据及操作状态都在此监听器中返回;
3. 调用 enableforegrounddispatch 让本 app 处于前台激活状态时接管 nfc 调度;
4. 将设备靠近 nfc 标签时会自动读取数据并完成指定的操作;
♦ android 支持写入 ndef tag,ios 仅支持读取 ndef tag。
状态检测与设置
//支持 android & ios(从 ios 11, iphone 7 开始支持) jsbridge.nfc.issupported(function(succ, data) { alert(data.issupported ? "支持" : "不支持"); });
//支持 android & ios //ios 始终返回 true,如果已禁用 nfc 功能,执行 enableforegrounddispatch 接口时会提示打开 nfc 功能 jsbridge.nfc.isenabled(function(succ, data) { alert(data.isenabled ? "已启用" : "已停用"); });
//支持 android jsbridge.nfc.opensettings();
事件监听
• 如需接口调用事件,请设置此监听器;
//支持 android & ios //请设置此监听器监听读写数据和事件 jsbridge.nfc.setlistener(function(event, data) {if (event == "ndef_discovered") show({ event: event, data : data }); }); //请拉到页面底部查看回调数据信息 $('html,body').animate({ scrolltop: $('#view').offset().top }, 500); /** 回调参数说明: event - 事件代码,字符串类型,可能的值: //将设备靠近 nfc 标签时会自动读取数据 //数据在 data 参数中返回 ndef_discovered 发现了 ndef tag 标签 ndef_session_invalidated ndef 会话已失效(仅支持 ios,如需再次读取需再次调用 enableforegrounddispatch 接口) tech_discovered 发现了支持特定技术的 tag 标签 tag_discovered 发现了 tag 标签 //写入 ndef tag //写入操作的数据是一次性的 //写入成功、失败或取消后都会清除待写入的数据,如需再次写入需调用 write 接口重新准备写入的数据 ndef_pending_write 待写入数据(请将设备靠近 nfc 标签) ndef_write_success 写入成功 ndef_write_failed 写入失败 ndef_write_canceled 取消写入(设备靠近 nfc 标签时不再写入) //只读 ndef tag //只读操作是一次性的 //只读操作成功、失败或取消后都会清除只读操作,如需再次执行只读操作需调用 makereadonlyndef 接口重新准备只读操作 ndef_pending_make_read_only 待执行置为只读的操作(请将设备靠近 nfc 标签) ndef_make_read_only_success 置为只读成功 ndef_make_read_only_failed 置为只读失败 ndef_make_read_only_canceled 取消执行置为只读的操作(设备靠近 nfc 标签时不再执行置为只读的操作) //写入 mifareultralight tag page //写入操作的数据是一次性的 //写入成功、失败或取消后都会清除待写入的数据 mifareultralight_pending_write_page 待写入分页数据(请将设备靠近 nfc 标签) mifareultralight_write_page_success 分页写入成功 mifareultralight_write_page_failed 分页写入失败 mifareultralight_write_page_canceled 取消分页写入(设备靠近 nfc 标签时不再写入) //收发 mifareultralight tag 原始数据 //收发操作的数据是一次性的 //收发成功、失败或取消后都会清除待发送的数据 mifareultralight_pending_transceive 待收发数据(请将设备靠近 nfc 标签) mifareultralight_transceive_success 收发成功 mifareultralight_transceive_failed 收发失败 mifareultralight_transceive_canceled 取消收发(设备靠近 nfc 标签时不再发送) data - 事件数据,json 对象 **/
//支持 android & ios //移除监听器,不会再收到回调通知 //在需要时可重新调用 setlistener jsbridge.nfc.removelistener();
nfc 调度(nfc 连接会话)
• app当前窗口处于前台激活状态时处理 nfc 事件调度;
• 请先执行 setlistener 监听 nfc 事件调度及数据;
//支持 android & ios(ios 目前仅支持读取 ndef 标签) //请开启调度以便 app 在前台激活状态时能处理 nfc 任务调度 //将设备靠近标签后会监听到 ndef_discovered 或 tech_discovered 或 tag_discovered 事件 jsbridge.nfc.enableforegrounddispatch({ //是否连续读取,布尔类型,(仅ios需提供) continuous : false, //提示文字,字符串类型,(仅ios需提供) alertmessage: "请将手机靠近展品标签获取更多信息!" }, function(succ, data) { if (jsbridge.ios) { if (!succ) alert(json.stringify(data)); } else { alert(succ ? "已启用,请将手机靠近 nfc 标签。" : json.stringify(data)); } });
//支持 android & ios //app不再处理 nfc 任务调度 jsbridge.nfc.disableforegrounddispatch(function(succ, data) { alert(succ ? "已停用" : json.stringify(data)); });
写入 ndef tag
//支持 android //写入 uri 数据 //调用成功后会监听到 ndef_pending_write 事件 //将设备靠近标签后会监听到 ndef_write_success 或 ndef_write_failed 事件 jsbridge.nfc.writendefuri({ //必须,字符串类型,uri 字符串 uri: "https://m.baidu.com", //可选,布尔类型,写入数据之后是否将标签置为只读状态(置为只读后标签将不再可写),默认 false makereadonly: false }, function(succ, data) { if (succ) { alert("待写入,请将设备靠近 ndef tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //写入 text 文本数据 //调用成功后会监听到 ndef_pending_write 事件 //将设备靠近标签后会监听到 ndef_write_success 或 ndef_write_failed 事件 jsbridge.nfc.writendeftext({ //必须,字符串类型,文本内容 text: "任意文本数据,any text。", //可选,布尔类型,写入数据之后是否将标签置为只读状态(置为只读后标签将不再可写),默认 false makereadonly: false }, function(succ, data) { if (succ) { alert("待写入,请将设备靠近 ndef tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //写入 mime 数据 //调用成功后会监听到 pending_write 事件 //将设备靠近标签后会监听到 ndef_write_success 或 ndef_write_failed 事件 jsbridge.nfc.writendefmime({ //必须,字符串类型, mimetype 类型 mimetype: "text/plain", //必须,字符串类型,bytes 数组的16进制格式 //chinese dream! 中国梦!(utf8 encoded bytes array) rawbytes: "4368696e65736520447265616d2120e4b8ade59bbde6a2a6efbc81", //可选,布尔类型,写入数据之后是否将标签置为只读状态(置为只读后标签将不再可写),默认 false makereadonly: false }, function(succ, data) { if (succ) { alert("待写入,请将设备靠近 ndef tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //写入 text 文本数据后置为只读标签 //请谨慎操作,置为只读后标签将不再可写!!! jsbridge.nfc.writendeftext({ text: "任意文本数据,any text,readonly !!!", ////写入后,将标签置为只读状态 makereadonly: true }, function(succ, data) { if (succ) { alert("待写入,请将设备靠近 ndef tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //取消待执行的写入操作 //调用成功后会监听到 ndef_write_canceled 事件,将设备靠近标签将不再执行写入操作 jsbridge.nfc.cancelwritendef(function(succ, data) { if (succ) { alert("已取消 ndef_pending_write"); } else { alert(json.stringify(data)); } });
只读 ndef tag
//支持 android //将标签置为只读状态 //调用成功后会监听到 ndef_pending_make_read_only 事件 //将设备靠近标签后会监听到 ndef_make_read_only_success 或 ndef_make_read_only_failed 事件 jsbridge.nfc.makereadonlyndef(function(succ, data) { if (succ) { alert("待置为只读状态,请将设备靠近 ndef tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //取消待执行置为只读的操作 //调用成功后会监听到 ndef_make_read_only_canceled 事件,将设备靠近标签将不再执行置为只读的操作 jsbridge.nfc.cancelmakereadonlyndef(function(succ, data) { if (succ) { alert("已取消 ndef_pending_make_read_only"); } else { alert(json.stringify(data)); } });
写入 mifareultralight tag
//支持 android //写入 mifareultralight 页 jsbridge.nfc.writemifareultralightpage({ //必须,从0开始的页次 index: 16, //必须,4字节数据的16进制格式 data : "61626364" }, function(succ, data) { if (succ) { alert("待写入,请将设备靠近 mifareultralight tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //取消写入 mifareultralight 页 jsbridge.nfc.cancelwritemifareultralightpage(function(succ, data) { if (succ) { alert("已取消 mifareultralight_pending_write_page"); } else { alert(json.stringify(data)); } });
将原始数据发送到 mifareultralight tag 并接收响应
//支持 android //收发 mifareultralight 原始数据 jsbridge.nfc.transceivemifareultralight({ //必须,字符串类型,原始 bytes 数组的16进制格式 //示例:第0f页写入 abcd 字符 rawbytes: "a20f41424344" }, function(succ, data) { if (succ) { alert("待收发,请将设备靠近 mifareultralight tag 标签。"); } else { alert(json.stringify(data)); } });
//支持 android //取消收发 mifareultralight 原始数据 jsbridge.nfc.canceltransceivemifareultralight(function(succ, data) { if (succ) { alert("已取消 mifareultralight_pending_transceive"); } else { alert(json.stringify(data)); } });
示例数据
//android 读取 ndef tag 示例数据 var android_sample = { data: null, tag: { id: "04bf87225a6680", technologies: { mifareultralight: { mifareclassictype: "type_ultralight_c", maxtransceivelength: 253, timeout: 618 }, nfca: { maxtransceivelength: 253, timeout: 618, sak: 0, atqa: "4400" }, ndef: { type: "org.nfcforum.ndef.type2", //ndef 消息 ndefmessage: { //16进制的原始数据 raw: "d1012354027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", //ndef 消息记录数组 records: [ { id: "", //16进制记录类型 type: "54", uri: null, //16进制记录荷载(原始 byte 数据流) payload: "027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", //如果 payload 为可读文本,这是里其字符串格式 payload_string: "任意文本数据,any text。", tnf: 1, mimetype: "text/plain" } ], bytelength: 39 }, //ndef 消息数组 ndefmessages: [ { raw: "d1012354027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", records: [ { id: "", type: "54", uri: null, payload: "027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", payload_string: "任意文本数据,any text。", tnf: 1, mimetype: "text/plain" } ], bytelength: 39 } ], cachedndefmessage: { raw: "d1012354027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", records: [ { id: "", type: "54", uri: null, payload: "027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", payload_string: "任意文本数据,any text。", tnf: 1, mimetype: "text/plain" } ], bytelength: 39 }, readonly: true, maxsize: 39, canmakereadonly: true } } } }; //ios 读取 ndef tag 示例数据 var ios_sample = { data: null, tag: { id: "", technologies: { ndef: { type: "", //读取到都第一条 ndef 消息 ndefmessage: { //ndef 消息记录数组 records: [ { id: "", //16进制记录类型 type: "54", uri: null, //16进制记录荷载(原始 byte 数据流) payload: "027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", //如果 payload 为可读文本,这是里其字符串格式 payload_string: "任意文本数据,any text。" } ] }, //读取到的所有 ndef 消息数组 ndefmessages: [ { records: [ { id: "", uri: null, type: "54", payload: "027a68e4bbbbe6848fe69687e69cace695b0e68daeefbc8c416e792054657874e38082", payload_string: "任意文本数据,any text。" } ] } ] } } } };
监听回调数据: