NFC en Firefox OS

6 enero, 2015 4:50 por

Esta es una traducción del artículo original publicado en el blog de Mozilla Hacks.

Firefox OS está siendo desarrollado en colaboración abierta con los socios de Mozilla y la comunidad. En ese espíritu, y en el transcurso de más de un año, los equipos de Mozilla y Deutsche Telekom (DT) trabajaron  juntos para desarrollar un soporte a nivel de plataforma para NFC dentro de Firefox OS. Durante ese tiempo, ambos equipos tuvieron reuniones de producto e ingeniería para el ciclo de desarrollo.

Desde la propuesta la API de NFC, a definir la arquitectura general, y prototipar y completar una implementación a nivel de producción de productos finales, este modelo trabajó tan bien que realmente ayudó a mostrar el poder de lo «abierto» (tecnología abierta y modelo de contribución abierta) para empujar el avance de la web. Después de todo, esto es exactamente lo que Mozilla y Firefox OS representan.

En este artículo, describimos algunos conceptos básicos sobre la implementación de NFC en Firefox OS.

Planificación de NFC

Actualmente en la versión 2.0, Firefox OS soporta compartir contenido con NFC (contactos, imágenes, videos, URLs), así como también la lectura remota de información almacenada en las etiquetas (tags) habilitadas por NFC (lectura de etiquetas). Nuestros casos de usos de intercambio son compatibles con dispositivos habilitados con NFC de otros sistemas operativos como Android/Windows, así que compartir estos contenidos a través de estos dispositivos funcionará correctamente. Nuestra API para NFC (primero introducida en v1.3) ha sido puesta en uso para estos caso de uso de intercambio en v2.0 con aplicaciones básicas.

La planificación completa de B2G está disponible en la wiki.

API de WebNFC

La API de Firefox para NFC permite una comunicación Peer to Peer (P2P) entre 2 dispositivos que soporten el formato de intercambio de tipos de datos de NFC (NDEF). Las etiquetas NFC pasivas que pueden presentarse a sí mismas como etiquetas compatibles NDEF también pueden ser escritas y leídas. La implementación de NFC en Firefox OS está actualmente disponible sólo para aplicaciones certificadas, pero como ya se ha dicho, serán abiertas para aplicaciones del Marketplace tan pronto como la API sea desarrollados para cubrir mas casos de usos y formato de datos.

Un ejemplo de usar esta API

El siguiente código hace una comunicación entre 2 dispositivos NFC (desde la documentación sobre la API de NFC en la MDN):

// Utilidad para conversión de cadenas UTF-8 a Unit8Array.
// O idealmente, simplemente agrega esto a tu aplicación web HTML para usar NfcUtils:
// <script defer src="shared/js/nfc_utils.js"></script>
function fromUTF8(str) {
    if (!str) {
        return null;
    }
    var enc = new TextEncoder('utf-8');
    return enc.encode(str);
}

var tnf     = 1;                                            // Tipo NFC Forum Well Known
var type    = new Uint8Array(fromUTF8("U"));                // tipo URL
var id      = new Uint8Array(fromUTF8(""));                 // id
var payload = new Uint8Array(fromUTF8("u0003mozilla.org")); // datos de la URL, con un prefijo de registro 0x3 reemplazando http://

var ndefRecords = [new MozNDEFRecord(tnf, type, id, payload)];
var nfcdom = window.navigator.mozNfc;
 
nfcdom.onpeerready = function(event) {
    // event.detail es un token de sesión

    var nfcPeer = navigator.mozNfc.getNFCPeer(event.detail);
    var req = nfcpeer.sendNDEF(ndefRecords); // enviar mensajes NDEF a otro dispositivo NFC.
    req.onsuccess = function(e) {
        console.log("Mensaje P2p enviado satisfactoriamente");
    };
    req.onerror = function(e) {
        console.log("Envío P2P fallido!");
    };
};

Puedes encontrar más ejemplos de cómo enviar datos con Firefox OS en Usando la API de NFC.

Tipo de datos soportados actualmente

La API WebNFC soporta actualmente el Formato de Intercambio de Datos NFC (NDEF). Hay planes futuros para tipos no NDEF. De el ejemplo anterior, tiene 4 campos, que están definidos con 3 tipos de datos Unit8Array opcionales. Los TNF y type son usados para enrutar el mensaje para la aplicación web apropiada.

(Fuente: http://git.mozilla.org/?p=releases/gecko.git;a=blob_plain;f=dom/webidl/MozNDEFRecord.webidl;hb=refs/heads/v2.0).

[Constructor(octet tnf, optional Uint8Array type, optional Uint8Array id, optional Uint8Array payload)]
interface MozNDEFRecord
{
    /**
    * Type Name Field (3-bits) - Especifica el tipo de registro NDEF en general.
    *   tnf_empty: 0x00
    *   tnf_well_known: 0x01
    *   tnf_mime_media: 0x02
    *   tnf_absolute_uri: 0x03
    *   tnf_external type: 0x04
    *   tnf_unknown: 0x05
    *   tnf_unchanged: 0x06
    *   tnf_reserved: 0x07
    */
    [Constant]
    readonly attribute octet tnf;

    /**
    * type - Describe el contenido de la carga útil. Esto puede ser un tipo mime
    */
    [Constant]
    readonly attribute Uint8Array? type;

    /**
    * id - El identificador es dependiente de la aplicación.
    */
    [Constant]
    readonly attribute Uint8Array? id;

    /**
    * payload - Binary data blob. El significado de este campo es dependiente
    * de la aplicación.
    */
    [Constant]
    readonly attribute Uint8Array? payload;
};

Ten en cuenta que en las nuevas versiones de Firefox OS, actualizaremos los tipos de datos ligeramente para hacer TNF un tipo enum en vez de uno octet.

El dispositivo Flame de Mozilla soporta NFC, más dispositivos están llegando

Nuestro dispositivo Flame soporta NFC y estamos a la espera de más dispositivos comerciales por parte de nuestros socios, pronto. El dispositivo Flame soporta un chipset NFC de NXP (PN547C2).

Videos

En este enlace puedes ver un video de algunas de las características de intercambio con NFC basadas en Firefox OS.

Las aplicaciones básicas en el dispositivo Flame que usan NFC son:

  • Galería
  • Video
  • Música
  • Configuración
  • Navegador del sistema

Un ejemplo de una aplicación de terceros

Aquí está una aplicación que el Mozillero Dietrich Ayala hizo usando la API de lectura de etiquetas de NFC. BikeCommute es una aplicación que registra una etiqueta NFC para registrar los ciclistas que atienden a la oficina de Mozilla en Portland. La aplicación está ejecutándose en un Nexus 4 con Firefox OS 2.2, y está construida con Famo.us para la interfaz gráfica y PouchDB para el almacenamiento de datos y sincronización a una remota CouchDB. Actualmente, la aplicación sólo lee la dirección de correo electrónico del usuario desde un registro de texto escrito en la etiqueta.

La siguiente versión agregará soporte para ejecutar la aplicación en teléfonos de los usuarios, usando un contacto local en vez de un registro en texto plano, y siendo capaz de configurar la etiqueta NFC desde el dispositivo. El plan es desarrollar una tabla de posiciones desde la integración de datos entre CouchDB y mozillians.org así que podemos desarrollar y competir con otras oficinas y Mozilleros en todo el mundo. El código fuente está disponible en GitHub ¡Y todos los pull request son bienvenidos!

Aquí, un video de demostración de esta aplicación en acción.

Mas documentación sobre NFC

¡Eso es todo!

Estamos realmente emocionados de introducir esta nueva adición a la creciente lista de API y características en Firefox OS. Esperamos que los desarrolladores aprovechen todo lo que NFC hace posible por la forma de compartir de dispositivo a dispositivo y también los servicios como los pagos sin contacto directo planeados en futuro.

¿Cuándo pueden los desarrolladores empezar a usar esta API?

Actualmente esta API está disponible para aplicaciones certificadas. No podemos esperar para finalizar el trabajo para hacer esta API disponible para aplicaciones privilegiadas, para que todos los desarrolladores puedas aprovechar esto. Si deseas seguir el progreso o entrar a ayudar, siéntete libre de seguir el bug 1042851. Estamos apuntando a finalizar el trabajo para la siguiente versión 2.2.

Lo que viene en NFC

En los próximos lanzamientos, con la ayuda de nuestros socios, estamos centrándonos en expandir la cobertura para el soporte de elementos seguros y servicios como pagos basados en NFC. Más sobre esto en otro artículo más adelante. Por favor quédate pendiente.

¡Aquí está la Web Abierta!

The following two tabs change content below.

AngelFQC

Web Developer at BeezNest Latino
Ingeniero de Sistemas y Computación. Desarrollador PHP. Mozilla Peru. Chamilo LMS Developer.

Compartir artículo:

  • ¡Participa!

    Colabora con la comunidad »
    En Mozilla lo importante son las personas. Descubre cómo puedes colaborar.

    Boletín Firefox

    Suscríbete al boletín de novedades de Firefox.

  • Descargas

    Descarga los programas de Mozilla.

    Lo más visto

    cc-by-sa