我有一张Mifare ULC卡。当我将此卡点击到支持NFC的设备上时,它应该在没有任何其他NFC应用程序的情况下打开手机中的默认浏览器。

我已将下面的NDEF URL数据编码到标签中,但是当我扫描标签时,它无法打开浏览器。谁能指导我在哪里做错了?

03 - tag for the NDEF
12 - length of the NDEF msg (18 Bytes)
D3    Record header (of first and only record)
      Bit 7 = MB = 1: first record of NDEF message
      Bit 6 = ME = 1: last record of NDEF message
      Bit 5 = CF = 0: last or only record of chain
      Bit 4 = SR = 1: short record length field
      Bit 3 = IL = 0: no ID/ID length fields
      Bit 2..0 = 011 = 0x3: Absolute URI Record type
01    Type Length = 1 byte
0E    Payload length = 14 bytes
55    Type field "U" (in US-ASCII) = for URI record
02656E02676F6F676C652E636F6D    Payload field (decoded according to the value of the Type field)- 14 Bytes

02    Status byte
      Bit 7 = 0: Text is UTF-8 encoded
      Bit 6 = 0: Not used
      Bit 5..0 = 0x02: Length of IANA language code field
656E  IANA language code field
      "en" (in US-ASCII) = Text is in English
02676F6F676C652E636F6D URL 0x02 = https://www. (URI identifier code) + 676F6F676C652E636F6D = google.com
      "https://www.google.com" (in UTF-8)

最佳答案

您在这里混合了几种不同的记录类型:

  • 绝对URI记录类型
  • 是NFC论坛的知名类型URI,而
  • 是NFC论坛的著名类型Text。

  • 您的记录标题将记录声明为绝对URI记录类型(TNF = 3)。此记录类型使用的是类型名称字段(该字段告诉应用程序如何解释记录有效负载)的URI。因此,在这种情况下,URI不是实际的记录有效负载,而仅仅是记录内容的描述符。在您的情况下,这样的记录可能如下所示:

    + ------------------------- + ----------------------- -----------------------------------------
    | D3 |记录标题(MB = ME = 1,CF = 0,SR = 1,IL = 0,TNF = 0x3)
    + ------------------------- + ----------------------- -----------------------------------------
    | 16 |类型长度(22字节)
    + ------------------------- + ----------------------- -----------------------------------------
    | 00 |有效载荷长度(0字节)
    + ------------------------- + ----------------------- -----------------------------------------
    | 68 74 74 70 73 3A 2F 2F |类型名称(“https://www.google.com”)
    | 77 77 77 2E 67 6F 6F 67 |
    | 6C 65 2E 63 6F 6D |
    + ------------------------- + ----------------------- -----------------------------------------

    尽管Android仍会将此记录视为URI并应在Web浏览器中打开它,但是NDEF规范的创建者当然不是想要使用绝对URI记录的。

    相反,NFC论坛为此指定了URI众所周知的类型。由于类型名称(“U”)和有效负载格式的某些部分与URI众所周知的记录类型的匹配,因此您已经使用了其中的一部分。但是,为了声明您的记录是一个众所周知的类型记录,您需要将TNF字段设置为1。此外,URI记录类型的有效负载包括一个标识符字节(URI前缀)和截短的URI。 。

    + ------------------------- + ----------------------- -----------------------------------------
    | D1 |记录标题(MB = ME = 1,CF = 0,SR = 1,IL = 0,TNF = 0x1)
    + ------------------------- + ----------------------- -----------------------------------------
    | 01 |类型长度(1个字节)
    + ------------------------- + ----------------------- -----------------------------------------
    | 0B |有效负载长度(11个字节)
    + ------------------------- + ----------------------- -----------------------------------------
    | 55 |类型名称(“U”)
    + ------------------------- + ----------------------- -----------------------------------------
    | 02 67 6F 6F 67 6C 65 2E |有效负载:标识符代码= 2(前缀“https:// www。”),
    | 63 6F 6D |截断的URI =“google.com”
    + ------------------------- + ----------------------- -----------------------------------------

    10-07 19:50
    查看更多