Categorías: Labs

Crear una aplicación de pago para Firefox OS

Este artículo fue originalmente publicado en el blog de Mozilla Hacks. Traducción por Tamia Ramírez.
Firefox Marketplace

A primera vista, Firefox Marketplace para Firefox OS puede parecer similar a la Apple Store o Google Play Store, pero hay una diferencia clave importante: no te encierra en Mozilla o en un dispositivo con Firefox OS. Te permite vender una aplicación web que funcionará en cualquier dispositivo web abierto a través del protocolo de recibo. Esto significa que mercados fuera de Mozilla pueden vender aplicaciones empaquetadas para Firefox OS tan solo implementando este protocolo. De esta forma los usuarios no notarán la diferencia al usar aplicaciones de pago independientemente de la tienda en la que se hayan adquirido.

Cuando otros dispositivos soporten este protocolo, teóricamente los usuarios podrán pagar una sola vez por una app y usarla en cualquier otro dispositivo. El objetivo de Mozilla con este proyecto es validar el concepto de pago descentralizado para luego entrar en un ciclo de mejora continua. Mozilla extiende la invitación a otros desarrolladores para que ayuden a lograr que el protocolo de recibos de pago funcione correctamente y de esta manera lograr que las aplicaciones pagadas sean realmente portables y abiertas como la web.

Para desarrolladores

Es responsabilidad de cada aplicación pagada el validar el estado de su propio recibo de pago. Si eres un desarrollador con intenciones de vender aplicaciones para Firefox OS, este artículo te dará una idea de como implementar el protocolo de validación de recibo. También puede resultar interesante para aquellos que deseen construir un ambiente de ejecución web o una tienda de aplicaciones pagadas compatible con el protocolo de recibos.

El API navigator.mozApps es el encargado de exponer los recibos de pago de un dispositivo a tu aplicación. La manera más simple de validar un recibo es incluir una librería como receipverifier.js del lado del cliente, y utilizar el URL de verificación de proveedor incluido en el recibo. En la documentación de la librería receipverifier.js encontrará más detalle, pero en realidad implementar la validación de recibo de pago es tan fácil como invocar el siguiente código cuando tu aplicación inicia:

mozmarket.receipts.Prompter({
storeURL: "https://marketplace.firefox.com/app/tu-app",
supportHTML: '<a href="mailto:tu@tuapp.com">email tu@tuapp.com</a>',
verify: true
});

¡Listo! Este es un ejemplo de una validación de alto nivel que también despliega un aviso al usuario en su pantalla en caso de que no se encuentre el recibo, o en caso de que sea inválido. Para una validación a un nivel más bajo puedes consultar la documentación de la librería.

En la aplicación Private Yacht puedes encontrar un ejemplo de una validación más compleja que ha sido utilizada para pruebas. Esta aplicación muestra como hacer una validación de recibo de pago desde el lado del cliente usando la librería receiptverifier.js, y cómo hacer una validación del lado del servidor usando la libería Node.js. Adicionalmente tenemos disponible una librería de Python (y otra especialmente para Django) que puede ser usada para hacer validaciones del lado del servidor.

¿Cómo funciona? Cada recibo de pago es realmente un conjunto de elementos en formato JSON. Uno de ellos contiene el enlace a un servicio web de verificación de recibos; este enlace es el que se utiliza para realizar la verificación. También existe la opción de hacer una validación sin conexión, pero para esto es necesario mantener sincronizada información clave sobre el recibo y por el momento algunos detalles como reembolso y renovación no están bien soportados en este caso.

Por defecto, un recibo solo puede ser originado desde un URL que se encuentre registrado en el manifiesto de tu aplicación bajo el parámetro installs_allowed_from. Como desarrollador, deberás coordinar el proceso de pagos directamente con las tiendas de apps, por lo que también vas a querer limitar quién puede vender tu aplicación. Debido a lo abierto que puede resultar JavaScript del lado del cliente, puedes tener mayor control sobre la lista de vendedores al validar recibos del lado del servidor (o sea, en tu propio servidor).

Las aplicaciones de pago en Firefox Marketplace aún no están disponibles, pero muy pronto lo estarán. Si desde ya incluyes en tu aplicación la validación de recibos de pago, vas a estar listo cuando el flujo de registro lo soporte.

Protección contra el fraude

Permitir que las aplicaciones puedan venderse desde cualquier tienda web es crucial en la visión de Mozilla. Sin embargo, descentralizar el protocolo de recibos sin dejar desprotegidos los componentes de las aplicaciones (sin utilizar DRM) resulta un gran reto. Ya existen mecanismos del lado del cliente que le permiten al usuario acceder aplicaciones de pago como un proxy DNS, sin embargo también existen formas de mitigarlo como CSP, CORS y HSTS, solo para mencionar algunos. El estado actual del sistema de pago de aplicaciones de iOS/Android no es muy diferente. Hay un bug pendiente que hará que los sitios de ventas de aplicaciones sean más efectivos, y es Mozilla quien espera evolucionar el sistema cada vez más a medida que desarrolladores y sitios de ventas de apps participen en el proceso. Cambiar a apps firmadas y empaquetadas debería ofrecer una capa más de protección para sus componentes, pero este patrón fue diseñado más para resolver los requerimientos sobre permisos.

Y como siempre, si encuentras algún problema, por favor registra bugs. Si es un problema con la plataforma de aplicaciones, selecciona Core (componente DOM:Apps), o selecciona Marketplace (componente Payments/Refunds).

The following two tabs change content below.

jorgev

Add-ons Developer Relations Lead at Mozilla
Jorge trabaja para el equipo de complementos de Mozilla, y se dedica a Mozilla Hispano y Mozilla Costa Rica en su tiempo libre. Actualmente está encargado del blog de Mozilla Hispano Labs.