Как правильно кодировать URL-адрес в теге NFC? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть карта Mifare ULC.Когда я подключаю эту карту к устройству с поддержкой NFC, она должна открыть браузер по умолчанию в телефоне без каких-либо дополнительных приложений NFC.

Я закодировал указанные ниже данные URL NDEF для тега, но при сканировании тега браузер не открывается.Кто-нибудь может направить меня туда, где я совершил ошибку?

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)

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Здесь вы смешиваете несколько разных типов записей:

  • Абсолютный тип записи URI,
  • URI-формат общеизвестного типа NFC Forum и
  • хорошо известный тип NFC Forum Text.

Ваш заголовок записи объявляет запись как абсолютный тип записи URI (TNF = 3).Этот тип записи использует URI для поля имени типа (поле, которое указывает приложениям, как интерпретировать полезную нагрузку записи).Следовательно, URI не является фактической полезной нагрузкой записи в этом случае, а является только дескриптором содержимого записи.В вашем случае такая запись может выглядеть следующим образом:

+-------------------------+----------------------------------------------------------------
| D3                      | Record header (MB = ME = 1, CF = 0, SR = 1, IL = 0, TNF = 0x3)
+-------------------------+----------------------------------------------------------------
| 16                      | Type Length (22 bytes)
+-------------------------+----------------------------------------------------------------
| 00                      | Payload Length (0 bytes)
+-------------------------+----------------------------------------------------------------
| 68 74 74 70 73 3A 2F 2F | Type Name ("https://www.google.com")
| 77 77 77 2E 67 6F 6F 67 |
| 6C 65 2E 63 6F 6D       |
+-------------------------+----------------------------------------------------------------

Хотя Android по-прежнему будет обрабатывать эту запись как URI и открывать ее в веб-браузере, это, безусловно, не то, что создатели NDEFСпецификация предполагала использовать абсолютные записи URI.

Вместо этого NFC Forum указал для этой цели общеизвестный тип URI.Вы уже использовали эти части, поскольку имя вашего типа («U») и части формата вашей полезной нагрузки совпадают с частями известного типа записи URI.Однако для того, чтобы объявить вашу запись общеизвестной записью типа, необходимо установить в поле TNF значение 1. Более того, полезная нагрузка типа записи URI состоит из одного байта идентификатора (префикс сокращенного URI) и усеченного URI..

+-------------------------+----------------------------------------------------------------
| D1                      | Record header (MB = ME = 1, CF = 0, SR = 1, IL = 0, TNF = 0x1)
+-------------------------+----------------------------------------------------------------
| 01                      | Type Length (1 byte)
+-------------------------+----------------------------------------------------------------
| 0B                      | Payload Length (11 bytes)
+-------------------------+----------------------------------------------------------------
| 55                      | Type Name ("U")
+-------------------------+----------------------------------------------------------------
| 02 67 6F 6F 67 6C 65 2E | Payload: Identifier code = 2 (prefix "https://www."),
| 63 6F 6D                |          truncated URI = "google.com"
+-------------------------+----------------------------------------------------------------
0 голосов
/ 23 октября 2018

Вам необходимо удалить «поле кода языка» и байт, который вы назвали «байт статуса».

Первый байт после типа записи (55h - который вы назвали полем типа) должен быть идентификатором URI (02h, который определяет 'https://www.'). Затем ваш URI.

Проверьте новую длину полезной нагрузки, и я быстро рассчитал ее как 12 символов (0Ch).

...