nfc 近场通信 -九游会国际

webapp快捷打包
nfc 近场通信
转到模块插件

敬告:此 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。

状态检测与设置

issupported 检测设备是否支持 nfc 功能

//支持 android & ios(从 ios 11, iphone 7 开始支持)
jsbridge.nfc.issupported(function(succ, data) {
  alert(data.issupported ? "支持" : "不支持");
});

isenabled 检测设备是否已启用 nfc

//支持 android & ios
//ios 始终返回 true,如果已禁用 nfc 功能,执行 enableforegrounddispatch 接口时会提示打开 nfc 功能
jsbridge.nfc.isenabled(function(succ, data) {
  alert(data.isenabled ? "已启用" : "已停用");
});

opensettings 转到 nfc 设置

//支持 android
jsbridge.nfc.opensettings();

事件监听

setlistener 设置监听器

• 如需接口调用事件,请设置此监听器;

//支持 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 对象
**/

removelistener 移除监听器

//支持 android & ios
//移除监听器,不会再收到回调通知
//在需要时可重新调用 setlistener
jsbridge.nfc.removelistener();

nfc 调度(nfc 连接会话)

enableforegrounddispatch 启用前台调度(开启连接会话)

• 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));
  }
});

disableforegrounddispatch 停用前台调度(结束连接会话)

//支持 android & ios
//app不再处理 nfc 任务调度
jsbridge.nfc.disableforegrounddispatch(function(succ, data) {
  alert(succ ? "已停用" : json.stringify(data));
});

写入 ndef tag

writendefuri 写入 uri 数据

//支持 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));
  }
});

writendeftext 写入 text 文本数据

//支持 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));
  }
});

writendefmime 写入 mime 数据

//支持 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));
  }
});

writendeftext 写入 text 文本数据后置为只读标签

//支持 android
//写入 text 文本数据后置为只读标签
//请谨慎操作,置为只读后标签将不再可写!!!
jsbridge.nfc.writendeftext({
  text: "任意文本数据,any text,readonly !!!",
  ////写入后,将标签置为只读状态
                makereadonly: true
}, function(succ, data) {
  if (succ) {
    alert("待写入,请将设备靠近 ndef tag 标签。");
  } else {
    alert(json.stringify(data));
  }
});

cancelwritendef 取消写入 ndef_pending_write

//支持 android
//取消待执行的写入操作
//调用成功后会监听到 ndef_write_canceled 事件,将设备靠近标签将不再执行写入操作
jsbridge.nfc.cancelwritendef(function(succ, data) {
  if (succ) {
    alert("已取消 ndef_pending_write");
  } else {
    alert(json.stringify(data));
  }
});

只读 ndef tag

makereadonlyndef 将标签置为只读状态

//支持 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));
  }
});

cancelmakereadonlyndef 取消只读 ndef_pending_make_read_only

//支持 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

writemifareultralightpage 写入 mifareultralight 页

//支持 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));
  }
});

cancelwritemifareultralightpage 取消写入 mifareultralight 页

//支持 android
//取消写入 mifareultralight 页
jsbridge.nfc.cancelwritemifareultralightpage(function(succ, data) {
  if (succ) {
    alert("已取消 mifareultralight_pending_write_page");
  } else {
    alert(json.stringify(data));
  }
});

transceivemifareultralight 收发 mifareultralight 原始数据

将原始数据发送到 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));
  }
});

canceltransceivemifareultralight 取消收发 mifareultralight 原始数据

//支持 android
//取消收发 mifareultralight 原始数据
jsbridge.nfc.canceltransceivemifareultralight(function(succ, data) {
  if (succ) {
    alert("已取消 mifareultralight_pending_transceive");
  } else {
    alert(json.stringify(data));
  }
});

示例数据

读取 ndef tag - ndef_discovered 事件

//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。"
                            }
                        ]
                    }
                ]
            }
        }
    }
};

监听回调数据:

网站地图