Ahora es posible leer y escribir en etiquetas NFC.
¿Qué es Web NFC?
NFC significa Comunicaciones de campo cercano, una tecnología inalámbrica de corto alcance. que opera a 13.56 MHz, lo que permite la comunicación entre dispositivos a distancia inferior a 10 cm y una velocidad de transmisión de hasta 424 kbit/s.
NFC web proporciona a los sitios la capacidad de leer y escribir en etiquetas NFC cuando están cerca del dispositivo del usuario (por lo general, de 5 a 10 cm, de 2 a 4 pulgadas). El alcance actual se limita al formato de intercambio de datos NFC (NDEF), un formato liviano. formato de mensaje binario que funciona en diferentes formatos de etiquetas.
Casos de uso sugeridos
Web NFC se limita a NDEF porque las propiedades de seguridad de lectura y la escritura de datos NDEF son más fáciles de cuantificar. Operaciones de E/S de bajo nivel (p.ej., ISO-DEP, NFC-A/B, NFC-F), modo de comunicación entre pares y tarjeta basada en host No se admite la emulación (HCE).
Estos son algunos ejemplos de sitios que pueden usar Web NFC:
- Los museos y las galerías de arte pueden mostrar información adicional sobre una exhibición Cuando el usuario toca con su dispositivo una tarjeta NFC cerca de la exposición.
- Los sitios de administración de inventario pueden leer o escribir datos en la etiqueta NFC en un para actualizar la información sobre su contenido.
- Los sitios de conferencias pueden usarlo para escanear insignias NFC durante el evento y asegurarse de que para evitar que se realicen más cambios en la información que se escribe en ellos.
- Los sitios pueden usarlo para compartir los secretos iniciales necesarios para el dispositivo o el servicio de un sistema operativo, y también implementar datos de configuración en operaciones .
Estado actual
Paso | Estado |
---|---|
1. Crear explicación | Completo |
2. Crea el borrador inicial de la especificación | Completo |
3. Recopila comentarios y iterar en el diseño | Completo |
4. Prueba de origen | Completo |
5. Lanzamiento | Completo |
Usar NFC web
Detección de funciones
La detección de funciones en hardware es diferente de la que es probable que estés acostumbrado.
La presencia de NDEFReader
indica que el navegador es compatible con NFC web, pero
si el hardware requerido está presente. En particular, si el hardware es
si falta, se rechazará la promesa que devuelven ciertas llamadas. Te daré
detalles cuando describo NDEFReader
.
if ('NDEFReader' in window) { /* Scan and write NFC tags */ }
Terminología
Una etiqueta NFC es un dispositivo NFC pasivo, lo que significa que funciona con tecnología magnética. inducción cuando hay un dispositivo NFC activo (como un teléfono) cerca. Etiquetas NFC vienen en muchas formas y modas, como calcomanías, tarjetas de crédito, muñecas y más.
El objeto NDEFReader
es el punto de entrada en Web NFC que expone la funcionalidad.
para preparar acciones de lectura o escritura que se completan cuando una etiqueta NDEF
se acerca. El NDEF
en NDEFReader
significa intercambio de datos de NFC
Es un formato ligero de mensaje binario y estandarizado por el Foro de NFC.
El objeto NDEFReader
sirve para actuar sobre los mensajes NDEF entrantes de las etiquetas NFC.
y para escribir mensajes NDEF en etiquetas NFC dentro del rango.
Una etiqueta NFC que admite NDEF es como una nota adhesiva. Cualquier persona puede leerlo a menos que sea de solo lectura, cualquiera puede escribir allí. Contiene un solo NDEF que encapsula uno o más registros NDEF. Cada registro NDEF es un Estructura binaria que contiene una carga útil de datos y la información de tipo asociada Web NFC admite los siguientes tipos de registros estandarizados del foro de NFC: vacío, texto, URL, póster inteligente, tipo de MIME, URL absoluta, tipo externo, desconocido y local el tipo de letra.
Escanear etiquetas NFC
Para escanear etiquetas NFC, primero crea una instancia de un nuevo objeto NDEFReader
. Llamando a scan()
devuelve una promesa. Es posible que se le solicite al usuario si el acceso no se había autorizado anteriormente.
otorgada. La promesa se resolverá si se cumplen todas las siguientes condiciones:
- Solo se llamó en respuesta a un gesto del usuario, como un gesto táctil o hacer clic con el mouse.
- El usuario permitió que el sitio web interactúe con dispositivos NFC.
- El teléfono del usuario es compatible con NFC.
- El usuario habilitó NFC en su teléfono.
Una vez que se resuelve la promesa, los mensajes NDEF entrantes estarán disponibles
suscripción a eventos reading
a través de un objeto de escucha de eventos También deberías suscribirte
a eventos de readingerror
para recibir notificaciones cuando haya etiquetas NFC incompatibles
proximidad.
const ndef = new NDEFReader();
ndef.scan().then(() => {
console.log("Scan started successfully.");
ndef.onreadingerror = () => {
console.log("Cannot read data from the NFC tag. Try another one?");
};
ndef.onreading = event => {
console.log("NDEF message read.");
};
}).catch(error => {
console.log(`Error! Scan failed to start: ${error}.`);
});
Cuando hay una etiqueta NFC cerca, se activa un evento NDEFReadingEvent
. Integra
contiene dos propiedades únicas:
serialNumber
representa el número de serie del dispositivo (p. ej., 00-11-22-33-44-55-66) o una cadena vacía si no hay ninguna disponible.message
representa el mensaje NDEF almacenado en la etiqueta NFC.
Para leer el contenido del mensaje NDEF, realiza un bucle a lo largo de message.records
y
procesar a sus miembros de data
de forma adecuada en función de su recordType
El miembro data
se expone como un DataView
, ya que permite controlar.
en los que los datos están codificados en UTF-16.
ndef.onreading = event => {
const message = event.message;
for (const record of message.records) {
console.log("Record type: " + record.recordType);
console.log("MIME type: " + record.mediaType);
console.log("Record id: " + record.id);
switch (record.recordType) {
case "text":
// TODO: Read text record with record data, lang, and encoding.
break;
case "url":
// TODO: Read URL record with record data.
break;
default:
// TODO: Handle other records with record data.
}
}
};
Escribir etiquetas NFC
Para escribir etiquetas NFC, primero crea una instancia de un nuevo objeto NDEFReader
. Llamando
write()
muestra una promesa. Es posible que se le solicite al usuario si no se otorgó el acceso.
otorgadas anteriormente. En este punto, un mensaje NDEF está "preparado" y promete
se resolverá si se cumplen todas las siguientes condiciones:
- Solo se llamó en respuesta a un gesto del usuario, como un gesto táctil o hacer clic con el mouse.
- El usuario permitió que el sitio web interactúe con dispositivos NFC.
- El teléfono del usuario es compatible con NFC.
- El usuario habilitó NFC en su teléfono.
- El usuario presionó una etiqueta NFC y se escribió correctamente un mensaje NDEF.
Para escribir texto en una etiqueta NFC, pasa una cadena al método write()
.
const ndef = new NDEFReader();
ndef.write(
"Hello World"
).then(() => {
console.log("Message written.");
}).catch(error => {
console.log(`Write failed :-( try again: ${error}.`);
});
Para escribir un registro de URL en una etiqueta NFC, pasa un diccionario que represente un valor NDEF.
mensaje a write()
. En el siguiente ejemplo, el mensaje NDEF es un diccionario
con una clave records
. Su valor es un array de registros; en este caso, una URL.
registro definido como un objeto con una clave recordType
establecida en "url"
y un data
configurada en la cadena de URL.
const ndef = new NDEFReader();
ndef.write({
records: [{ recordType: "url", data: "https://w3c.github.io/web-nfc/" }]
}).then(() => {
console.log("Message written.");
}).catch(error => {
console.log(`Write failed :-( try again: ${error}.`);
});
También es posible escribir varios registros en una etiqueta NFC.
const ndef = new NDEFReader();
ndef.write({ records: [
{ recordType: "url", data: "https://w3c.github.io/web-nfc/" },
{ recordType: "url", data: "https://web.dev/nfc/" }
]}).then(() => {
console.log("Message written.");
}).catch(error => {
console.log(`Write failed :-( try again: ${error}.`);
});
Si la etiqueta NFC contiene un mensaje NDEF que no debe sobrescribirse, establece
la propiedad overwrite
a false
en las opciones que se pasan a write()
. En ese caso, la promesa que se devuelve se rechazará si se rechaza un mensaje NDEF.
ya se almacenó en la etiqueta NFC.
const ndef = new NDEFReader();
ndef.write("Writing data on an empty NFC tag is fun!", { overwrite: false })
.then(() => {
console.log("Message written.");
}).catch(error => {
console.log(`Write failed :-( try again: ${error}.`);
});
Hacer que las etiquetas NFC sean de solo lectura
Para evitar que usuarios maliciosos reemplacen el contenido de una etiqueta NFC, es posible hacer que las etiquetas NFC sean permanentemente de solo lectura. Esta operación es un proceso unidireccional y no se puede revertir. Una vez que una etiqueta NFC se establece en solo lectura, no se puede escribir a los usuarios.
Para que las etiquetas NFC sean de solo lectura, primero crea una instancia de un nuevo objeto NDEFReader
. Llamando
makeReadOnly()
muestra una promesa. Es posible que se le solicite al usuario si no se otorgó el acceso.
otorgadas anteriormente. La promesa se resolverá si se cumplen todas las siguientes condiciones
se cumplen:
- Solo se llamó en respuesta a un gesto del usuario, como un gesto táctil o hacer clic con el mouse.
- El usuario permitió que el sitio web interactúe con dispositivos NFC.
- El teléfono del usuario es compatible con NFC.
- El usuario habilitó NFC en su teléfono.
- El usuario presionó una etiqueta NFC y esta se estableció correctamente como de solo lectura.
const ndef = new NDEFReader();
ndef.makeReadOnly()
.then(() => {
console.log("NFC tag has been made permanently read-only.");
}).catch(error => {
console.log(`Operation failed: ${error}`);
});
A continuación, se explica cómo hacer que una etiqueta NFC sea de solo lectura de forma permanente después de escribir en ella.
const ndef = new NDEFReader();
try {
await ndef.write("Hello world");
console.log("Message written.");
await ndef.makeReadOnly();
console.log("NFC tag has been made permanently read-only after writing to it.");
} catch (error) {
console.log(`Operation failed: ${error}`);
}
Como makeReadOnly()
está disponible para Android en Chrome 100 o versiones posteriores, verifica lo siguiente:
si esta función es compatible con lo siguiente:
if ("NDEFReader" in window && "makeReadOnly" in NDEFReader.prototype) {
// makeReadOnly() is supported.
}
Seguridad y permisos
El equipo de Chrome diseñó e implementó Web NFC usando los principios básicos se define en Controlar el acceso a una plataforma web potente Funciones, como control del usuario, transparencia y ergonomía
Debido a que NFC expande el dominio de la información potencialmente disponible para aplicaciones maliciosas sitios web, la disponibilidad de NFC se restringe para maximizar reconocimiento y control del uso de NFC.
La NFC web solo está disponible para marcos de nivel superior y contextos de navegación segura (HTTPS)
solo). Los orígenes deben solicitar primero el permiso "nfc"
mientras controlan un
un gesto del usuario (p. ej., un clic en un botón). Los NDEFReader
scan()
, write()
y
Los métodos makeReadOnly()
activan un mensaje del usuario si el acceso no estaba previamente
otorgada.
document.querySelector("#scanButton").onclick = async () => {
const ndef = new NDEFReader();
// Prompt user to allow website to interact with NFC devices.
await ndef.scan();
ndef.onreading = event => {
// TODO: Handle incoming NDEF messages.
};
};
La combinación de una solicitud de permiso iniciada por el usuario y elementos físicos el movimiento de colocar el dispositivo sobre una etiqueta NFC de destino refleja el selector patrón que se encuentra en el otro archivo y las APIs de acceso a dispositivos.
Para realizar un escaneo o escribir, la página web debe estar visible cuando el usuario toca una etiqueta NFC con su dispositivo. El navegador usa la respuesta táctil para indicar presiona. El acceso a la radio NFC se bloquea si la pantalla está apagada o el dispositivo está bloqueado. En el caso de las páginas web no visibles, se recomienda recibir y enviar contenido NFC se suspende y se reanuda cuando una página web vuelve a estar visible.
Gracias a la API de visibilidad de páginas, es posible hacer un seguimiento de cuándo se documentan cambios en la visibilidad.
document.onvisibilitychange = event => {
if (document.hidden) {
// All NFC operations are automatically suspended when document is hidden.
} else {
// All NFC operations are resumed, if needed.
}
};
Libro de recetas
A continuación, te mostramos algunas muestras de código para comenzar.
Verifica el permiso
La API de Permissions permite verificar si el permiso "nfc"
se
otorgada. Este ejemplo muestra cómo escanear etiquetas NFC sin la interacción del usuario si
se le haya otorgado acceso previamente o, de lo contrario, mostrará un botón. Ten en cuenta que los mismos
funciona para escribir etiquetas NFC, ya que usa el mismo permiso bajo la
de un vehículo.
const ndef = new NDEFReader();
async function startScanning() {
await ndef.scan();
ndef.onreading = event => {
/* handle NDEF messages */
};
}
const nfcPermissionStatus = await navigator.permissions.query({ name: "nfc" });
if (nfcPermissionStatus.state === "granted") {
// NFC access was previously granted, so we can start NFC scanning now.
startScanning();
} else {
// Show a "scan" button.
document.querySelector("#scanButton").style.display = "block";
document.querySelector("#scanButton").onclick = event => {
// Prompt user to allow UA to send and receive info when they tap NFC devices.
startScanning();
};
}
Anular operaciones de NFC
El uso de la primitiva AbortController
facilita la anulación de NFC
las operaciones. En el siguiente ejemplo, se muestra cómo pasar el signal
de un
AbortController
a través de las opciones de NDEFReader scan()
, makeReadOnly()
,
write()
y anulan ambas operaciones de NFC al mismo tiempo.
const abortController = new AbortController();
abortController.signal.onabort = event => {
// All NFC operations have been aborted.
};
const ndef = new NDEFReader();
await ndef.scan({ signal: abortController.signal });
await ndef.write("Hello world", { signal: abortController.signal });
await ndef.makeReadOnly({ signal: abortController.signal });
document.querySelector("#abortButton").onclick = event => {
abortController.abort();
};
Leer luego de la escritura
Usa write()
y, luego, scan()
con AbortController
.
permite leer una etiqueta NFC después de escribirle un mensaje.
El siguiente ejemplo muestra cómo escribir un mensaje de texto a una etiqueta NFC y leerlo
el nuevo mensaje en la etiqueta NFC. Dejará de buscar luego de tres segundos.
// Waiting for user to tap NFC tag to write to it...
const ndef = new NDEFReader();
await ndef.write("Hello world");
// Success! Message has been written.
// Now scanning for 3 seconds...
const abortController = new AbortController();
await ndef.scan({ signal: abortController.signal });
const message = await new Promise((resolve) => {
ndef.onreading = (event) => resolve(event.message);
});
// Success! Message has been read.
await new Promise((r) => setTimeout(r, 3000));
abortController.abort();
// Scanning is now stopped.
Lee y escribe un registro de texto
El registro de texto data
se puede decodificar con una instancia de TextDecoder
que tiene el
registro encoding
. Ten en cuenta que el idioma del registro de texto es
disponible a través de su propiedad lang
.
function readTextRecord(record) {
console.assert(record.recordType === "text");
const textDecoder = new TextDecoder(record.encoding);
console.log(`Text: ${textDecoder.decode(record.data)} (${record.lang})`);
}
Para escribir un registro de texto simple, pasa una cadena al método write()
de NDEFReader.
const ndef = new NDEFReader();
await ndef.write("Hello World");
Los registros de texto son UTF-8 de forma predeterminada y asumen el idioma actual del documento, pero
se pueden especificar ambas propiedades (encoding
y lang
) con la sintaxis completa
para crear un registro NDEF personalizado.
function a2utf16(string) {
let result = new Uint16Array(string.length);
for (let i = 0; i < string.length; i++) {
result[i] = string.codePointAt(i);
}
return result;
}
const textRecord = {
recordType: "text",
lang: "fr",
encoding: "utf-16",
data: a2utf16("Bonjour, François !")
};
const ndef = new NDEFReader();
await ndef.write({ records: [textRecord] });
Leer y escribir un registro de URL
Usa TextDecoder
para decodificar el data
del registro.
function readUrlRecord(record) {
console.assert(record.recordType === "url");
const textDecoder = new TextDecoder();
console.log(`URL: ${textDecoder.decode(record.data)}`);
}
Para escribir un registro de URL, pasa un diccionario de mensajes NDEF a NDEFReader
write()
. El registro de URL contenido en el mensaje NDEF se define como un
un objeto con una clave recordType
establecida en "url"
y una clave data
establecida en la URL
una cadena vacía.
const urlRecord = {
recordType: "url",
data:"https://w3c.github.io/web-nfc/"
};
const ndef = new NDEFReader();
await ndef.write({ records: [urlRecord] });
Leer y escribir un registro de tipo MIME
La propiedad mediaType
de un registro de tipo MIME representa el tipo de MIME del
Carga útil del registro NDEF para que data
se pueda decodificar de forma correcta. Por ejemplo, usa
JSON.parse
para decodificar texto JSON y un elemento Image para decodificar datos de imágenes.
function readMimeRecord(record) {
console.assert(record.recordType === "mime");
if (record.mediaType === "application/json") {
const textDecoder = new TextDecoder();
console.log(`JSON: ${JSON.parse(decoder.decode(record.data))}`);
}
else if (record.mediaType.startsWith('image/')) {
const blob = new Blob([record.data], { type: record.mediaType });
const img = new Image();
img.src = URL.createObjectURL(blob);
document.body.appendChild(img);
}
else {
// TODO: Handle other MIME types.
}
}
Para escribir un registro de tipo MIME, pasa un diccionario de mensajes NDEF a NDEFReader
write()
. El registro de tipo MIME incluido en el mensaje NDEF se define
como un objeto con una clave recordType
establecida en "mime"
, una clave mediaType
establecida en
el tipo de MIME real del contenido y una clave data
configurada para un objeto que puede
ser un objeto ArrayBuffer
o proporcionar una vista de un objeto ArrayBuffer
(p.ej.,
Uint8Array
y DataView
).
const encoder = new TextEncoder();
const data = {
firstname: "François",
lastname: "Beaufort"
};
const jsonRecord = {
recordType: "mime",
mediaType: "application/json",
data: encoder.encode(JSON.stringify(data))
};
const imageRecord = {
recordType: "mime",
mediaType: "image/png",
data: await (await fetch("icon1.png")).arrayBuffer()
};
const ndef = new NDEFReader();
await ndef.write({ records: [jsonRecord, imageRecord] });
Leer y escribir un registro de URL absoluta
El registro de URL absoluta data
se puede decodificar con un TextDecoder
simple.
function readAbsoluteUrlRecord(record) {
console.assert(record.recordType === "absolute-url");
const textDecoder = new TextDecoder();
console.log(`Absolute URL: ${textDecoder.decode(record.data)}`);
}
Para escribir un registro de URL absoluta, pasa un diccionario de mensajes NDEF al
NDEFReader write()
. El registro de URL absoluta contenido en el archivo NDEF
El mensaje se define como un objeto con una clave recordType
establecida en "absolute-url"
.
y una clave data
establecida en la cadena de URL.
const absoluteUrlRecord = {
recordType: "absolute-url",
data:"https://w3c.github.io/web-nfc/"
};
const ndef = new NDEFReader();
await ndef.write({ records: [absoluteUrlRecord] });
Leer y escribir un registro de póster inteligente
Un registro de póster inteligente (utilizado en anuncios en revistas, folletos, vallas publicitarias,
etc.), describe cierto contenido web como un registro NDEF que contiene un NDEF
mensaje como su carga útil. Llama a record.toRecords()
para transformar data
en una lista.
de los registros que se encuentran en el registro Smart poster. Debe tener un registro de URL,
registro de texto para el título, un registro de tipo MIME para la imagen y algunas etiquetas
registros de tipo local como ":t"
, ":act"
y ":s"
, respectivamente, para el
el tipo, la acción y el tamaño
del registro de póster inteligente.
Los registros de tipo local son únicos solo dentro del contexto local de la
registro NDEF. Úsalas cuando el significado de los tipos no importa fuera de
del contexto local del registro contenedor y cuando el uso del almacenamiento es
“compute.vmExternalIpAccess”. Los nombres de registros de tipos locales siempre comienzan con :
en Web NFC (p.ej.,
":t"
, ":s"
y ":act"
). Esto permite diferenciar un registro de texto de un registro
escribir registro de texto, por ejemplo.
function readSmartPosterRecord(smartPosterRecord) {
console.assert(record.recordType === "smart-poster");
let action, text, url;
for (const record of smartPosterRecord.toRecords()) {
if (record.recordType == "text") {
const decoder = new TextDecoder(record.encoding);
text = decoder.decode(record.data);
} else if (record.recordType == "url") {
const decoder = new TextDecoder();
url = decoder.decode(record.data);
} else if (record.recordType == ":act") {
action = record.data.getUint8(0);
} else {
// TODO: Handle other type of records such as `:t`, `:s`.
}
}
switch (action) {
case 0:
// Do the action
break;
case 1:
// Save for later
break;
case 2:
// Open for editing
break;
}
}
Para escribir un registro de póster inteligente, pasa un mensaje NDEF al write()
de NDEFReader
. El registro de póster inteligente contenido en el mensaje NDEF se define como un
con una clave recordType
establecida en "smart-poster"
y una clave data
establecida en
un objeto que representa (una vez más) un mensaje NDEF contenido en el
Smart poster.
const encoder = new TextEncoder();
const smartPosterRecord = {
recordType: "smart-poster",
data: {
records: [
{
recordType: "url", // URL record for smart poster content
data: "https://my.org/content/19911"
},
{
recordType: "text", // title record for smart poster content
data: "Funny dance"
},
{
recordType: ":t", // type record, a local type to smart poster
data: encoder.encode("image/gif") // MIME type of smart poster content
},
{
recordType: ":s", // size record, a local type to smart poster
data: new Uint32Array([4096]) // byte size of smart poster content
},
{
recordType: ":act", // action record, a local type to smart poster
// do the action, in this case open in the browser
data: new Uint8Array([0])
},
{
recordType: "mime", // icon record, a MIME type record
mediaType: "image/png",
data: await (await fetch("icon1.png")).arrayBuffer()
},
{
recordType: "mime", // another icon record
mediaType: "image/jpg",
data: await (await fetch("icon2.jpg")).arrayBuffer()
}
]
}
};
const ndef = new NDEFReader();
await ndef.write({ records: [smartPosterRecord] });
Leer y escribir un registro de tipo externo
Para crear registros definidos por la aplicación, usa registros de tipos externos. Pueden
contienen un mensaje NDEF como carga útil a la que se puede acceder con toRecords()
. Su
name contiene el nombre de dominio de la organización emisora, dos puntos y un tipo
nombre que tenga al menos un carácter, por ejemplo, "example.com:foo"
.
function readExternalTypeRecord(externalTypeRecord) {
for (const record of externalTypeRecord.toRecords()) {
if (record.recordType == "text") {
const decoder = new TextDecoder(record.encoding);
console.log(`Text: ${textDecoder.decode(record.data)} (${record.lang})`);
} else if (record.recordType == "url") {
const decoder = new TextDecoder();
console.log(`URL: ${decoder.decode(record.data)}`);
} else {
// TODO: Handle other type of records.
}
}
}
Para escribir un registro de tipo externo, pasa un diccionario de mensajes NDEF al
NDEFReader write()
. El registro de tipo externo contenido en el archivo NDEF
mensaje se define como un objeto con una clave recordType
establecida en el nombre del
tipo externo y una clave data
configurada en un objeto que representa un mensaje NDEF
contenidos en el registro de tipo externo. Ten en cuenta que la clave data
también se puede
un objeto ArrayBuffer
o proporciona una vista de un elemento ArrayBuffer
(p.ej.,
Uint8Array
y DataView
).
const externalTypeRecord = {
recordType: "example.game:a",
data: {
records: [
{
recordType: "url",
data: "https://example.game/42"
},
{
recordType: "text",
data: "Game context given here"
},
{
recordType: "mime",
mediaType: "image/png",
data: await (await fetch("image.png")).arrayBuffer()
}
]
}
};
const ndef = new NDEFReader();
ndef.write({ records: [externalTypeRecord] });
Leer y escribir un registro vacío
Un registro vacío no tiene carga útil.
Para escribir un registro vacío, pasa un diccionario de mensajes NDEF al NDEFReader
write()
. El registro vacío contenido en el mensaje NDEF se define como
un objeto con una clave recordType
configurada en "empty"
const emptyRecord = {
recordType: "empty"
};
const ndef = new NDEFReader();
await ndef.write({ records: [emptyRecord] });
Navegadores compatibles
La NFC web está disponible en Android en Chrome 89.
Sugerencias para desarrolladores
Esta es una lista de las cosas que me hubiese gustado saber cuando empecé a jugar con Web NFC:
- Android controla las etiquetas NFC a nivel del SO antes de que esté operativo la NFC web.
- Puedes encontrar un ícono de NFC en material.io.
- Usa el registro NDEF
id
para identificar con facilidad un registro cuando sea necesario. - Una etiqueta NFC sin formato que admite NDEF contiene un único registro de tipo vacío.
- Escribir un registro de aplicación para Android es sencillo, como se muestra a continuación.
const encoder = new TextEncoder();
const aarRecord = {
recordType: "android.com:pkg",
data: encoder.encode("com.example.myapp")
};
const ndef = new NDEFReader();
await ndef.write({ records: [aarRecord] });
Demostraciones
Consulta el ejemplo oficial y algunas demostraciones geniales de NFC web:
- Demostración de tarjetas
- Demostración de alimentos
- Sensor RSP de Intel NFC
- MEMO de contenido multimedia
Comentarios
El Grupo de la Comunidad de NFC Web y la Al equipo de Chrome le gustaría conocer tus opiniones y experiencias con Web NFC.
Cuéntanos sobre el diseño de la API
¿Existe algún aspecto de la API que no funcione según lo esperado? ¿O hay o propiedades faltantes que necesites para implementar tu idea?
Presenta un problema de especificaciones en el repositorio web de NFC en GitHub o agrega lo que piensas en un problema existente.
Informar un problema con la implementación
¿Encontraste un error en la implementación de Chrome? ¿O la implementación diferente de la especificación?
Informa un error en https://new.crbug.com. Asegúrate de incluir tantos
detalles como puedas, proporcionar instrucciones sencillas para reproducir el error y contar con
Componentes establecidos en Blink>NFC
. Glitch funciona muy bien para
para compartir repros rápidos y fáciles.
Demostrar apoyo
¿Planeas usar NFC web? Tu asistencia pública ayuda al equipo de Chrome prioriza funciones y muestra a otros proveedores de navegadores la importancia de respaldarlos.
Envía un tweet a @ChromiumDev con el hashtag
#WebNFC
y cuéntanos dónde y cómo la utilizas.
Vínculos útiles
- Especificación
- Demostración de NFC web | Fuente de demostración de NFC web
- Seguimiento de errores
- Entrada de ChromeStatus.com
- Componente de parpadeo:
Blink>NFC
Agradecimientos
Muchas gracias a los miembros de Intel por implementar Web NFC. Google Chrome depende de una comunidad de confirmadores que trabajan juntos para trasladar Chromium. el proyecto. No todos los confirmadores de Chromium son empleados de Google, y estos los colaboradores merecen un reconocimiento especial.