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 archivomanifest.webapp
y establezca el valor deprivileged
. - 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 archivomanifest.webapp
y establecer su valor acertified
. - 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 archivomanifest.webapp
por que el valor por defecto paratype
(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
- Tenga su aplicación empaquetada disponible y dele el nombre de
package.zip
. Este archivo tiene todos los recursos, incluyendo el archivo del manifiesto. - 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": "https://<server-ip>/package.zip", "version": "1.0" }
- 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 = 'https://<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>
- Copie el archivo
package.zip
,package.manifest
, einstall.html
dentro de la carpeta raíz del documento en el servidor. - Utilice el navegador en el teléfono para abrir
https://<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": "https://thisdomaindoesnotexist.org/myapp.zip", "version": "1.0", "size": 172496, "release_notes": "First release", "developer": { "name": "Developer Name", "url": "https://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
yurl
. 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.