У меня есть карта 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
Niks 23 Окт 2018 в 09:07

2 ответа

Лучший ответ

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

  • Тип записи абсолютного URI,
  • URI известного типа форума NFC и
  • на форуме NFC хорошо известный текст типа.

Заголовок записи объявляет, что запись является абсолютным типом записи 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"
+-------------------------+----------------------------------------------------------------
3
Michael Roland 29 Окт 2018 в 20:15

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

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

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

2
Harry 23 Окт 2018 в 12:36
52942151