Aplicaciones empaquetadas

Una aplicación empaquetada es una Open Web App que tiene todos sus recursos (HTML, CSS, JavaScript, manifiesto y demás) empaquetados en un archivo zip, en lugar de tenerlos en un servidor web. Una aplicación empaquetada es simplemente un archivo zip con el manifiesto de la aplicacion en su directorio raíz. El manifiesto debe ser llamado manifest.webapp.

Una direferencia de una aplicación alojada es que una aplicación empaquetada, es que debe especificar una ruta de arranque en el manifiesto en tanto que se trata de un campo opcional en una aplicación alojada.

Nota: Actualmente (Enero 2013) Firefox Marketplace solamente soporta aplicaciones empaquetadas para Firefox OS.

Propósito de las aplicaciones empaquetadas.

El propósito de una aplicación empaquetada, es tener una forma viable de proveer aplicaciones que tengan acceso a APIs sensibles en el dispositivo. Las aplicaciones deben ser verificadas por la tienda donde es distribuida (como Firefox Markerplace). La tienda revisa la aplicación y si la encuentra aceptable, firma el archivo zip de la aplicación con su llave privada. Esto da a los usuarios de la aplicación más seguridad de que han sido revisados problemas potenciales de seguridad, privacidad y capacidad.

Tipos de aplicaciones empaquetadas.

Aplicaciones privilegiadas

Una aplicación privilegiada es aprobada por la Firefox Marketplace usando un proceso especial. Esto significa que provee más seguridad a los usuarios cuando la aplicación quiere accesar a ciertas APIs sensibles del dispositivo. Esto equivale a las aplicaciones nativas en plataformas como iOS o Android. Para especificar que se trata de una aplicación privilegiada agregue el campo type a su archivo manifest.webapp  y establezca el valor de privileged.
Una aplicación privilegiada tiene las siguientes características :
  • Es aprobada por una tienda de aplicaciones después de la revisión de código o equivalente.
  • Los recursos de la aplicación son firmados por la tienda de aplicaciones.
  • Permite usar ciertas APIs Web sensibles a las que contenido no confiable no puede accesar.
  • Aplica Politicas de seguridad de contenido (CSP). Una aplicacion con privilegios utiliza estas CSP:
    "default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"
  • Implementa otros requisitos relacionados con la seguridad. Vea Seguridad para mas informacion.
Aplicación certificada
Una aplicacion certificada está destinada a una función crítica del sistema como el marcado por defecto o la configuración del sistema en un teléfono inteligente. Este tipo de aplicación podría ser usada para funciones críticas en un teléfono con Firefox OS. No está destinada para aplicaciones de terceros por lo que la mayoría de desarrolladores no pueden utilizarlas. Una aplicación certificada es una aplicación empaquetada similar a una con privilegios, excepto que todos los permisos del dispositivos son implícitos, lo que significa que son habilitados sin la aprobación explícita del usuario. A Una aplicación certificada debe ser aprovada por el fabricante (OEM) o compañía (carrier) para tener la aprobación implícta para usar APIs críticas. Para especificar que una aplicación es certificada, agregue el campo type a su archivo manifest.webapp y establecer su valor a certified.
Las siguientes son las CSP de una aplicación certificada, las cuales, son lígeramente direfentes de las de una con privilegios:
"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"
Esto hace parecer que las reglas en las CSP son ligeramente más flexibles para las aplicaciones con privilegios que en las aplicaciones certificadas. Si quiere saber las razones de esto, vea las Políticas CSP por defecto y Bug 768029.
Aplicaciones empaquetadas planas
Usted también puede hacer una simple aplicación empaquetada en un archivo zip. La tienda la firma, pero no implementa el proceso especial de autenticación como en las aplicaciones certificadas o con privilegios. Estas aplicaciones no pueden usar ciertas Web APIs sensibles. Tampoco está sujeta a las CSP como las aplicaciones certificadas o con privilegios. Este tipo de aplicación puede ser útil si quiere que todos los recursos de su aplicación estén disponibles cuando el usuario la usa por primera vez sin descargarlos. Este tipo de aplicación empaquetada no requiere el campo type en su archivo manifest.webapp por que el valor por defecto para type (web) es correcto.

Diferencias con las aplicaciones hospedadas

Las aplicaciones empaquetadas tienen las mismas capacidades que las aplicaciones web de código abierto normales (aplicaciones "alojadas"), pero las aplicaciones empaquetadas tienen algunas diferencias:

  • No tienen origen en Internet. La política de una aplicación por origen (one-app-per-origin) que gobierna a las aplicaciones hospedadas no aplica para las aplicaciones empaquetadas.
  • Las aplicaciones empaquetadas usan un protocolo interno especial en el archivo zip: app://<uuid>. Ejemplo: Cuando usted carga el contenido de /index.html en una aplicacion empaquetada, en realidad esta cargando algo como lo siguiente: (el UUID sera diferente):
    app://550e8400-e29b-41d4-a716-446655440000/index.html

    El UUID es generado al azar en el momento de la instalacion, lo cual significa que es único en cada dispositivo en la que es instalada la aplicación. El protocolo  app:// será útil en futuras versiones en tiempo de ejecución, pagos y flujos de OAuth.

  • El archivo del manifiesto debe ser llamado manifest.webapp.
  • Los recursos son accedidos desde un archivo zip, el cual es almacenado en el dispositivo donde son instalados.
  • Son instalados con una funcion API mozApps diferente: installPackage().
  • Aplican una CSP para todo el contenido de la aplicación (una aplicación también puede usar una CPS, pero no la requiere).
  • También pueden incrustar contenido remoto en iframes, pero dicho contenido no tendrá acceso a APIs privilegiadas ni las CSP por defecto le serán aplicadas.
  • Tienen un proceso de actualizacion para obtener las nuevas versiones para los usuarios; las aplicaciones hospedades no lo necesitan de este proceso.

Las aplicaciones empaquetadas también pueden hacer cosas como acceder a bases de datos en un servidor web como una aplicación hospedada.

Usando APIs Web sensibles

Hay Web APIs que pueden ser usadas maliciosamente por lo que el acceso a estas debe ser controlado. Para cada API sensible a la que se quiera acceder, ustede debe agregar una entrada al campo permissions en el  manifiesto de la aplicación.

Algunas APIs sensibles pueden ser accedidas por aplicaciones hospedadas normales, pero otras APIs requieren que usted use una aplicación empaquetada (con privilegios o certificada). Vea Permisos de aplicaciones para una tabla que describe los requisitos..

Aplicaciones empaquetadas de la tienda de Firefox (Firefox Marketplace).

La tienda de Firefox (Firefox Marketplace) maneja a las aplicaciones empaquetadas de forma diferente que las aplicaciones hospedadas. Cuando usted manda una aplicación empaquetada, su archivo zip es almacenado en los servidores de la Tienda y genera un nuevo manifiesto llamado el "mini-manifiesto" que está basado en el manifiesto de la aplicación que se encuentra en el archivo zip. Cuando un usuario installa su aplicación, el mini-manifiesto es pasado a la función installPackage() en la aplicación instalada. El mini-manifiesto existe para propósitos de instalación y actualización y no es usado cuando la aplicación se ejecuta.

Prueba de instalación de una aplicación empaquetada (con Simulador)

Para instalar una aplicación empaquetada en un dispositivo Firefox OS usando el simulador, vea la  sección "Push to Device" en la guía del Simulador.

Prueba de instalación de una aplicación empaquetada (sin Simulador)

Si quieres probar localmente la instalación de tu aplicación empaquetada, aquí hay otra forma de hacerlo. Usa los siguietnes pasos para instalar una aplicación empaquetada en un teléfono usando un servidor Web que está en tu red local. Puede ser un servidor local que se ejecute en la computadora en la que estás desarrollandol. Esto también de dará una idea de cómo funciona la instalación de aplicaciones empaquetadas.

Requisitos

  • El servidor Web debe estar en la misma red que el teléfono y debe de estar habilitado para recibir peticiones de la red local.
  • El teléfono debe ejecutar Firefox OS y tener el Wi-fi encendido.
  • Modifique las rutas usadas en el siguiente código de ejemplo para que coincidan con su servidor..
  • Obtenga la dirección IP de su servidor y úsela en lugar de <server-ip> en los siguientes ejemplos. Si el servidor no utiliza un puerto estándar, use este también. Ejemplo de una dirección IP sin un puerto estándar:
    10.10.12.1:8080

Pasos

  1. Tenga su aplicación empaquetada disponible y dele el nombre de package.zip. Este archivo tiene todos los recursos, incluyendo el archivo del manifiesto.
  2. Cree un archivo llamado package.manifest y agregue el siguiente contenido. Este es un mini-manifiesto usado por aplicaciones empaquetadas dentro del archivo zip. Vea Campos del mini-manifiesto si quiere más información acerca de los mini-manifiestos.
    {
      "name": "My App",
      "package_path": "http://<server-ip>/package.zip",
      "version": "1.0"
    }
  3. Cree un archivo llamado install.html con el siguiente contenido . Este contiene el código JavaScript que llama a la aplicación empaquetada (installPackage()) y a las funciones callbacks para las notificaciones de éxito o falla.
    <html>
      <body>
        <p>Packaged app installation page</p>
        <script>
          // This URL must be a full url.
          var manifestUrl = 'http://<server-ip>/package.manifest';
          var req = navigator.mozApps.installPackage(manifestUrl);
          req.onsuccess = function() {
            alert(this.result.origin);
          };
          req.onerror = function() {
            alert(this.error.name);
          };
        </script>
      </body>
    </html>
  4. Copie el archivo package.zip, package.manifest, e install.html dentro de la carpeta raíz del documento en el servidor.
  5. Utilice el navegador en el teléfono para abrir  http://<server-ip>/install.html y confirme la entrada para instalar la aplicación. El script le dará una la indicación de que la instalación fue exitosa o falló.

Nota: Si usted quiere probar aplicaciones certificadas (descritas anteriormente) encienda el "modo de desarrolador" ("developer mode")  en el dispositivo que quiera instalar la aplicación (con Firefox OS) y asegúrese de especificar el type correcto en su archivo manifest.webapp.

Campos del mini-manifiesto

Aqui hay un ejemplo de los campos del mini-manifiesto (mini-manifest):

{
  "name": "My app",
  "package_path": "http://thisdomaindoesnotexist.org/myapp.zip",
  "version": "1.0",
  "size": 172496,
  "release_notes": "First release",
  "developer": {
    "name": "Developer Name",
    "url": "http://thisdomaindoesnotexist.org/"
  },
  "locales": {
    "fr_FR": {
      "name": "Mon application"
    },
    "se_SE": {
      "name": "Min balla app"
    }
  },
  "icons": {
    "16": "/icons/16.png",
    "32": "/icons/32.png",
    "256": "/icons/256.png"
  }
}

Cuando el Firefox Marketplace genera un mini-manifiesto para tu aplicacion,  extrae informacion desde tu manifiesto de la aplicacion para algunos campos. Usted puede encontrar documentación para estos campos en el  manifiesto de la aplicación. Los campos únicos del mini-manifiesto son package_path, release_notes, y size. Los campos name, version, developer, y locales en su manifiesto de la aplicación deben ser exactamente los mismos que en su mini-manifiesto.

Aquí hay información sobre el mini-manifiesto que se relaciona con su uso a nivel local para sus propias pruebas::

name
(requerido) El nombre de la aplicación. La longitud máxima es de 128 caracteres.
package_path
(Requerido) Una URL completa donde el zip de la aplicación puede ser encontrado.
version
La versión de la aplicación.
size
El tamaño del zip de la aplicación en bytes. No es necesario para las pruebas locales pero se utiliza para mostrar una barra de progreso durante la instalación.
release_notes
Información acerca del lanzamiento de la aplicación. En el Marketplace esta información proviene de la página web que es parte del proceso de envío..
developer
Información acerca del desarrolador, contiene los campos name y url.
locales
Información de localización.
icons
Iconos usados por la aplicación.

Actualizando aplicaciones empaquetadas

Para información sobre actualizar aplicaciones, vea Actualizando aplicaciones.

Ejemplo de aplicación empaquetada

Firefox OS Boilerplate App

Etiquetas y colaboradores del documento

Contributors to this page: Aglezabad, teoli, chrisdavidmills, driverInside
Última actualización por: Aglezabad,