mozilla

Revision 451619 of App manifest

  • Revision slug: Aplicaciones/Manifest
  • Revision title: App manifest
  • Revision id: 451619
  • Created:
  • Creator: driverInside
  • Is current revision? No
  • Comment

Revision Content

Un Open Web App manifest contiene información que un navegador Web necesita para interactuar con una aplicación. Un manifest es una de las cosas claves que distinguen una Web App de un sitio web. Es un archivo  JSON con un nombre y una descripción para la aplicación, y también puede contener el origen de la aplicación, íconos, y los permisos requeridos por la aplicación, entre otras cosas. El navegador que maneja el manifest debe incorporar un Web runtime.

Para auto-publicar una aplicación desde una página web que permite controlar, se lanza la instalación de la aplicación (por ejemplo, llamando navigator.mozApps.install() desde un botón). Cuando una tienda o marketplace publica una aplicación, se dispara la instalación de la aplicación, proporcionándole al navegador la url del manifest de la aplicación alojada.

Véase About app manifests para un FAQ. También puedes encontrar nuestro útil manifest validator; En esta herramienta se verá tu manifest y te ayudará a erradicar cualquier error.

Ejemplo de Manifest

El siguiente es un manifest mínimo. Tú puedes copiarlo en un archivo de texto y reemplazar los valores con tu información.

Nota: Tu aplicación podría necesitar algo más que un manifest mínimo. Consulta la documentación a continuación sobre todos los campos del manifest.

{
  "name": "My App",
  "description": "My elevator pitch goes here",
  "launch_path": "/",
  "icons": {
    "128": "/img/icon-128.png"
  },
  "developer": {
    "name": "Your name or organization",
    "url": "http://your-homepage-here.org"
  },
  "default_locale": "en"
}

Campos del Manifest

Los siguientes campos están permitidos en el manifest. Sólo hay dos campos obligatorios: name y description. Existen otros campos que son requeridos si usas ciertos campos. Esto se indíca en la documentación.

Los campos en el manifest pueden estar en cualquier orden. Campos en el manifest distintos de los indicados a continuación, serán ignorados.

activities

(Firefox OS, opcional) Especifíca una serie de Web Activities que esta aplicación soporta. Cada propiedad en este campo es una actividad. Nombres de actividades son texto libre de formato, y cada actividad está representada por un objeto. He aquí unas actividades de ejemplo del campo con una actividad denominada share:

"activities": {
"share": {
  "filters": {
    "type": [ "image/png", "image/gif" ]
  },
  "href": "foo.html",
  "disposition": "window"
}
}

El objeto de la actividad share en el ejemplo tiene tres propiedades: filters, href, y disposition. Estas son descritas a continuación.

  • href - (requerido) Cuando otra aplicación o página web inicia una actividad que es compatible con esta aplicación, si esta aplicación es escogida para realizar la actividad, ésta especifíca la página que se abre. Se abrirá en la forma especificada por la propiedad disposition .
  • disposition - (opcional) Especifíca cómo se presenta la página especificada en href cuando una actividad es invocada. El valor, si se especifíca, debe ser uno de los siguientes (si se omite, por defecto será window):
    • window - La página que maneja la actividad es abierta en un nueva "ventana"( en un dispositivo móvil ésta vista sustituirá a la aplicación original que pidió a la actividad). La página debe llamar a  navigator.setMessageHandler para cada actividad que ésta soporta y posteriormente ejecutar la actividad para la cual se recibe un mensaje. Además, si la actividad requiere regresar un valor, la página debe llamar a activity.postResult o activity.postError (Donde activity es el primer argumento suministrado a la función especificada por setMessageHandler) según sea apropiado. Estas especificaciones están especificadas con más detalle en Web Activities.
    • inline - La página que maneja la actividad se abrirá en una superposición (en un disositivo móvil esto será mostrado en una ventana emergente sobre la aplicación original que solicitó la actividad). Comportamiento subsiguiente es exactamente el mismo como si disposition fuese window.
  • filters - (opcional) Un diccionario, cada propiedad de las cuales especifica un filtro. Estos filtrtos se aplicarán mientras se determina las aplicaciones adecuadas para el manejo de una actividad determinada. Los nombres de los filtros son de libre formato, pero sus valores deben ser una cadena o una matriz de cadenas (el tipo exacto depende del filtro ).

appcache_path

(opcional) La ruta absoluta a el cache de la aplicación en el manifest (AppCache). Cuando una Open Web App esta instalada , el AppCache manifest será recogida y analizada, y sus activos estáticas bajo el encabezado CACHE se almacenarán en cache.

"appcache_path": "/cache.manifest"

csp

(opcional) Especifica unContent Security Policy para la aplicación. Esta política se aplica a todas las páginas cargadas en la aplicación. Vease la Apps CSP page for more information.

default_locale

(requerida cuando locales esta presente). Una etiqueta de idioma(RFC 4646) que indica en qué idioma usa tu manifest. No incluya la etiqueta de idioma usada aquí en el campo locales. Esta es una buena práctica para definir default_locale incluso si usted no usa locales. El Firefox OS Marketplace usará esto para conocer en qué idioma está su manifest, para que pueda usar los valores de configuración regional correcta en los campos traducidos. Si no defines default_locale, el Marketplace tiene que adivinar el lenguaje basado en el serving locale. default_locale no es usado por le dispositivo que instala la aplicación

Ejemplo para Inglés:

"default_locale": "en"​

description

(requerida) Una descripción en leible por humanos de la aplicación (la longitud maxima es  1024 caracteres).

developer

(opcional) Información acerca del desarrollador de la aplicación. Information about the developer of the app. Tienes estas propiedades:

  • name - El nombre del desarrolladorThe name of the developer.
  • url - La dirección URL de un sitio que contiene más información sobre el desarrollador de la aplicación. Esta URL tipicamente es mostrada cuando los usuarios hacen clic sobre el nombre del desarrollador de la aplicación mientas visualizan detalles acerca de una aplicación dentro del panel de control (o navegador).

fullscreen

(Sólo Firefox OS , opcional) Establezca esta propiedad a true o false para indicar to indicate el tiempo de ejecución que debera lanzar la aplicación en modo de pantalla completa. Ejemplo:

"fullscreen": "true"

íconos

(opcional) Un mapa del tamaño de los íconos de los URIs de los íconos (que pueden ser  absolute paths o data URIs). Los íconos deben ser cuadrados y están destinados a representar visualmente la aplicación. Los íconos no deberian tener fondos solidos qué se extienden a todas las esquinas del ícono. Rutas comenzando con / son tratadas como relativas a el origen de la aplicación.

Para Windows 7 y Android, los siguientes tamaños de íconos estan soportados:

  • 16 x 16
  • 32 x 32
  • 48 x 48
  • 64 x 64
  • 128 x 128
  • 256 x 256

Para Firefox OS, los íconos deben ser proporcionados sin una gota de sombra y una close cropped canvas en los siguientes tamaños:

  • 30 x 30
  • 60 x 60

Tu puedes seguir app icon guidelines para Firefox OS.

Nota: Firefox OS Marketplace requiere que todas las aplicaciones subidas tengan un ícono como mínimo de al menos 128 x 128.

Tu puedes especificar múltiples íconos como este ejemplo:

"icons": {
  "16": "/img/icon-16.png",
  "48": "/img/icon-48.png",
  "128": "/img/icon-128.png"
}

installs_allowed_from

(opcional) Un arreglo de origenes (scheme+dominio, por ejemplo https://marketplace.example.com) qué están permitidos para lanzar al instalación de esta aplicación. Este campo te permite habilitar explicitamente sólo ciertos sitios o tiendas, con quien tiene una relación para instalar la aplicación. El arreglo ["*"] significa qué las instalaciones de esta aplicación estan permitidas desde cualquier sitio. Este es el valor predeterminado. Nota qué [] sería no permitir la instalación desde cualquier sitio, incluyendo nuestro propio sitio. Aquí está un ejemplo permitiendo instalaciones desde cualquier sitio:

"installs_allowed_from": ["*"]

Nota: no pongas la barra diagonal al final de las URLs en este arreglo. Por ejemplo , esto es incorrecto: https:/marketplace.example.com/. Si usas una barra diagonal, la instalacion fallará. Hay un bug sobre esto aquí.

Nota: si una de las URLs de instalación es el Firefox OS Marketplace, debes utilizar https://marketplace.firefox.com. Hubo una URL anterior para el Marketplace pero esta cambió el 15 de Noviembre de 2012. La URL anterior fue https://marketplace.mozilla.org, y ya no funciona. Si su aplicación utiliza la URL anterior, tendrá que cambiarla.

launch_path

(opcional, requerida para aplicaciones empaquetadas) La ruta de origen que se carga cuando la aplicación inicia. Si no se proporciona, el origen de la app se trata como el dominio de la URL. Ver Path Handling.

En una app empaquetada, este campo especifíca el punto de partida del contenido local al archivo zip que contiene la app empaquetada. Por ejemplo, si launch_path tiene un valor de /myApp/index.html, cuando la app empaquetada es cargada se abrirá el archivo /myApp/index.html.

locales

(opcional) Un mapa de uno a más locale-specific anulaciones de los datos contenidos en el manifest, las cuales las IUs usan para proveer vistas localizadas basadas en los accesos locales. Por ejemplo, si tienes hablantes italianos instalando tu app, probablemente querrás que vean una interfaz de usuario localizada a su idioma. Cada entrada local está marcada con una etiqueta (RFC 4646) y contienen una representación dispersa del manifest. Cualquier archivo presente en el campo locale sobre-escribe los campos que concuerdan en el manifest. No puedes sobre-escribir estos campos: default_locale, locales a sí mismos, y installs_allowed_from. Un manifest que sobre-escribe cualquiera de estos campos es invalido. Cuando locales está presente, default_locale también debe de estarlo.

Ejemplo con Español e Italiando:

"locales": {
"es": {
  "description": "¡Acción abierta emocionante del desarrollo del Web!",
  "developer": {
    "url": "http://es.mozillalabs.com/"
  }
},
"it": {
  "description": "Azione aperta emozionante di sviluppo di fotoricettore!",
  "developer": {
    "url": "http://it.mozillalabs.com/"
  }
}
}

nombre

(requerido) Un nombre legible para la aplicación (la longitud máxima es de 128 caracteres).

Nota: Si cambias el nombre de tu app después de que el Marketplace la ha aprobado, deberás volver a  presentar tu aplicación para su aprobación de nuevo.

orientación

(solo Android y Firefox OS, opcional) Un array que define las orientaciones a las cuales las aplicaciones estarán bloqueados incluso si la orientación del dispositivo cambia. Cada entrada en el array puede ser uno de los portrait, landscape, portrait-primary, landscape-primary, portrait-secondary or landscape-secondary. Las opciones con bloqueo primario y secundario bloquearán la orientación del dispositivo en solo una orientación, incluso si la orientación del dispositivo cambia. Las opciones sin primario y secundario combinan ambas reglas de primario y secundario juntos. Las opciones adicionalmente con el sufijo -secondary implementan una rotación de 180 grados para las opciones que no tienen el sufijo. Por ejemplo, sostener el teléfono boca abajo (pero de una manera en que el ancho es menor que la altura), implica la orientación portrait-secondary. Si este campo tiene un valor válido, el tiempo de ejecución no va a cambiar la orientación de la vista renderizando la aplicación incluso si el dispositivo es volteado. Ejemplo:

"orientation": ["portrait","landscape-secondary"]

permisos

(opcional) La serie de permisos que la app necesita. Una app debe listar cada API que intenta utilizar que requiera el permiso del usuario. Si una app trata de utilizar una de estas APIs sin la entrada correspondiente en este campo, fallará.

Nota: La mayoría de estos permisos sólo tiene sentido para privileged apps or certified apps, no para apps alojadas.

El campo de permisos es un objeto, con cada propiedad especificando un solo permiso. Cada entrada a la API debe tener una descripción apropiada. Algunas APIs tambien requieren acceso apropiado. Ejemplo del campo permissions:

"permissions": {
"contacts": {
  "description": "Required for autocompletion in the share screen",
  "access": "readcreate"
  },
"alarms": {
  "description": "Required to schedule notifications"
  }
}
  • description - Una cadena que especifica la intención de solicitar utilizar esta API. Esta propiedad es obligatoria.
  • access -Una cadena especificando el tipo de acceso requerido para el permiso. Esta propiedad solo es requerida para unas cuantas APIs. Los posibles valores son read, readwrite, readcreate y createonly.

Los permisos de las APIs están listados a continuación. Si un API necesita una propiedad access, esta es mencionada. Para más información sobre cuando estos permisos son soportados, ve a App permissions.

  • alarms - Programar una notificación, o programa una aplicación para que ésta comience.
  • browser - Permite el uso de un navegador.
  • contacts - Agregar, leer, o modificar contactos de la agenda en el dispositivo y leer contactos desde la tarjeta SIM;. access propiedad requerida: una de readonly, readwrite, readcreate o createonly.
  • device-storage:music/device-storage:videos/device-storage:pictures/device-storage:sdcard - Agregar, leer o modificar archivos almacenados en el punto central del dispositivo. access propiedad requerida: una de readonly, readwrite, readcreate o createonly.
  • fmradio - Controla el radio FM.
  • geolocation - Obtiene la actuala localización del usuario.
  • storage - Utiliza localStorage y IndexedDB sin limitaciones de tamaño.
  • systemXHR - Hacer las peticiones HTTP sin orígenes de restricción.
  • tcp-socket - Crear y comunicarse a través de puertos TCP.
  • wifi-manage - Enumerar las redes WiFi disponibles, obtener el alcance de la red, conectar a una red.

Además, algunas propiedades que solo están disponibles para apps certificadas:

  • backgroundservice - Habilitauna aplicación web para correr en segundo plano y llevar a cabo tareas como la sincronización o responder a los mensajes entrantes.
  • bluetooth - Acceso de bajo nivel para las características del Bluetooth.
  • camera - Tomar fotos, hacer video y controlar la cámara. La razón por la cual ésta característica está limitada a apps certificadas fue por el sandbox que corren las aplicaciones en accesos preventivos al hardware de la cámara. Nuestra meta es hacerla disponible para aplicaciónes 3rd party lo más pronto posible, pero no tendremos tiempo para hacerlo posible en la primera entrega.
  • desktop-notification - Despliega una notificación en el escritorio del usuaio.
  • mobileconnection - Obtener información acerca de la comunicación móvil de voz y datos de conexión.
  • power - apaga o enciende la pantalla, control del CPU, corriente del dispotivo, y cosas por el estilo. Escuchar e inspeccionar los sucesos de bloqueo de recursos.
  • settings - Configurar o ver los ajustes del dispositivo. access propiedad requerida: una de readonly o readwrite.
  • sms - Enviar y revibir SMS.
  • telephony - Acceso a toda la telefonía- APIs relacionadas.
  • time - (antes systemclock) Fija el horario. (La información del tiempo de zona está controlado por la configuración de la API.)
  • webapps-manage - Obtiene acceso al API navigator.mozApps.mgmt para administrar las Open Web Apps.

type

(opcional) El tipo de aplicación, que puede ser web, privileged, o certified. Los tipos son descritos a continuación.

  • web - Una app regular. Los permisos son limitados a esta lista en el manifest en el campo de permissions. Si no especificas el campo type en el manifest, web es el tipo predeterminado.
  • privileged - Una Open Web App autenticada que ha sido aprobada por una tienda de aplicaciones como el Firefox OS Marketplace. Algunas APIs de seguridad o privacidad solo están disponibles para apps tipo  privileged. Su propósito es dar más seguridad a un usuario para aplicaciones que desean tener acceso a dicha API. Hay un packaged app (todos los recursos en un archivo zip) que tiene las siguientes características adicionales:
    • Aprovadas por una tienda de aplicaciones después de una revisión de código o el equivalente.
    • Tiene un app manifest firmado por la tienda de aplicaciones.
    • Usa Content Security Policy.
    • Implementa otras cosas relacionadas a la seguridad. Para más información ve a: Security.
  • certified - Una Open Web App que está destinada para una función crítica de sistema como el marcado predetrminado o el sistema de configuración de apps en un smartphone. No está destinado a aplicaciones 3rd party en una tienda de aplicaciones. Una app certificada es una app empaquetada que es similar a una app privileged, excepto que todos los permisos de los dispositivos son implicitos. Debe ser aprobado por el OEM o soporte para el dispositivo que la utiliza.

Ejemplo:

"type": "privileged"

version

(opcional) Una cadena que representa la versión del manifest. Este valor no es usado en el tipo Web en ningún momento, por lo tanto este puede ser cualquier valor. Puedes insertar esta cadena dentro del manifest y extraerla para ayudar a sobrellevar algunos casos de actualización. Ver Updating manifests.

Manejo de rutas

Todos los campos que mantienen una ruta en el manifest deben de ser rutas absolutas (por ejemplo, /images/myicon.png), y las rutas deben ser atendidas desde el mismo origen que la app.

También, hay dos maneras de establecer launch_path:

  • Si tu app está almacenada en la raíz de un servidor Web, por ejemplo mywebapp.github.com/, entonces launch_path debe ser fijado a /.
  • De otra manera, si tu app está almacenada en un subdirectorio, por ejemplo mymarket.github.com/mywebapp/, entonces launch_path debe ser fijado a /mywebapp/.

Validando un manifest

Para validar un manifest, usa este sitio: https://marketplace.firefox.com/developers/validator

Incluso hay una API que puedes usar para validar el manifest: http://zamboni.readthedocs.org/en/latest/topics/api.html#validate

Sirviendo manifests

El manifest de la app debe ser servido desde el mismo origen que la app.

Cuando es servido desde archivos estáticos, se recomienda que el manifest esté almacenado con una extensión de archivo de .webapp. Los manifests deben ser servidos con una cabecera de Content-Type de application/x-web-app-manifest+json. Esta es actualmente no forzada por Firefox pero lo es por el Marketplace. Firefox OS solamente revisa este si el origen de la página donde el usuario ejecuta la instalación es diferente que el origen de la misma webapp.

Los manifets pueden ser servidos sobre SSL para mitigar cierta clase de ataques.

El documento debe ser UTF-8 para que así la app pueda ser enviada al Firefox OS Marketplace. Es recomendado omitir la marca de orden de byte (BOM, por sus siglas en inglés). Otras codificaciones pueden ser especificadas con un parámetro charset en la cabecera Content-Type (por ejemplo Content-Type: application/x-web-app-manifest+json; charset=ISO-8859-4), aunque esto no viene a respetarse por el Marketplace.

Agentes usuario siempre que sea posible deben manejarse mensajes a la identidad de sitio y el estado de TLS cuando se pida confirmación al usuario para instalar una aplicación.

Serving desde Apache

Si es archivo .htaccess, debes agregar lo siguiente:

AddType application/x-web-app-manifest+json .webapp
Nota: Esto asume que estás usando .webapp como una extensión. si estás usando .json u otra extensión, deberás actualizar el código para que esto se vea reflejado.

Si no tienes un archivo .htaccess, crealo en el directorio raíz de tu servidor. Si esto no funciona, tu host puede requerir que agregues AddHandler x-web-app-manifest+json .webapp.

Serving desde NGINX

Necesitas editar tu archivo mime.types en el directorio conf. Este probablemente se encuentra en /etc/nginx/ o /opt/nginx/.

Debes tener algo similar a lo siguiente. Agrega la última línea.

types {
text/html   html htm shtml;
text/css    css;
text/xml    xml;
application/x-web-app-manifest+json   webapp;
}
Nota: Se sume que se esta usando .webapp como extensión. Si usa .json u otra extensión, tiene que actualizar el código para que se refleje.
Serving desde GitHub

si tienes servido tu archivo manifet desde GitHub Pages, GitHub lo servirá con la cabecera Content-Type de application/x-web-app-manifest+json. Deberás usar la extensión de archivo .webapp en tu archivo manifest. Ejemplo: manifest.webapp.

Serving desde Python

Si tienes instalado python, fácilmente puedes correr un servidor desde el directorio local, corriendo python y pegando el mismo:

import SimpleHTTPServer
import SocketServer
SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map['.webapp'] = 'application/x-web-app-manifest+json'
httpd = SocketServer.TCPServer(("", 3000), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.serve_forever()

Actualizando manifests

Para más información sobre actualizar aplicaciones, ver Updating apps.

Revision Source

<p>Un Open Web App <strong>manifest</strong> contiene información que un navegador Web necesita para interactuar con una aplicación. Un manifest es una de las cosas claves que distinguen una Web App de un sitio web. Es un archivo&nbsp; <a href="http://www.json.org/">JSON</a> con un nombre y una descripción para la aplicación, y también puede contener el origen de la aplicación, íconos, y los permisos requeridos por la aplicación, entre otras cosas. El navegador que maneja el manifest debe incorporar un <a href="/en-US/docs/Apps/Apps_architecture#Web_runtime">Web runtime</a>.</p>
<p>Para auto-publicar una aplicación desde una página web que permite controlar, se lanza la instalación de la aplicación (por ejemplo, llamando <a href="/en-US/docs/DOM/Apps.install"><code>navigator.mozApps.install()</code></a> desde un botón). Cuando una tienda o marketplace publica una aplicación, se dispara la instalación de la aplicación, proporcionándole al navegador la url del manifest de la aplicación alojada.</p>
<p>Véase <a href="/en-US/docs/Apps/FAQs/About_app_manifests">About app manifests</a> para un FAQ. También puedes encontrar nuestro útil <a href="https://marketplace.firefox.com/developers/validator">manifest validator</a>; En esta herramienta se verá tu manifest y te ayudará a erradicar cualquier error.</p>
<h2 id="Ejemplo_de_Manifest">Ejemplo de Manifest</h2>
<p>El siguiente es un manifest mínimo. Tú puedes copiarlo en un archivo de texto y reemplazar los valores con tu información.</p>
<div class="note">
  <p><strong>Nota:</strong> Tu aplicación podría necesitar algo más que un manifest mínimo. Consulta la documentación a continuación sobre todos los campos del manifest.</p>
</div>
<pre class="brush: js">
{
&nbsp; "name": "My App",
&nbsp; "description": "My elevator pitch goes here",
&nbsp; "launch_path": "/",
&nbsp; "icons": {
&nbsp;&nbsp;&nbsp; "128": "/img/icon-128.png"
&nbsp; },
&nbsp; "developer": {
&nbsp;&nbsp;&nbsp; "name": "Your name or organization",
&nbsp;&nbsp;&nbsp; "url": "http://your-homepage-here.org"
&nbsp; },
&nbsp; "default_locale": "en"
}
</pre>
<h2 id="Campos_del_Manifest">Campos del Manifest</h2>
<p>Los siguientes campos están permitidos en el manifest. Sólo hay dos campos obligatorios:<code> name</code> y <code>description</code>. Existen otros campos que son requeridos si usas ciertos campos. Esto se indíca en la documentación.</p>
<p>Los campos en el manifest pueden estar en cualquier orden. Campos en el manifest distintos de los indicados a continuación, serán ignorados.</p>
<h3 id="activities"><code>activities</code></h3>
<p>(Firefox OS, opcional) Especifíca una serie de <a href="/en-US/docs/WebAPI/Web_Activities">Web Activities</a> que esta aplicación soporta. Cada propiedad en este campo es una actividad. Nombres de actividades son texto libre de formato, y cada actividad está representada por un objeto. He aquí unas actividades de ejemplo del campo con una actividad denominada <code>share</code>:</p>
<pre class="brush: js">
"activities": {
"share": {
  "filters": {
    "type": [ "image/png", "image/gif" ]
  },
  "href": "foo.html",
  "disposition": "window"
}
}</pre>
<p>El objeto de la actividad <code>share</code> en el ejemplo tiene tres propiedades: <code>filters</code>, <code>href</code>, y <code>disposition</code>. Estas son descritas a continuación.</p>
<ul>
  <li><strong><code>href</code></strong> - (requerido) Cuando otra aplicación o página web inicia una actividad que es compatible con esta aplicación, si esta aplicación es escogida para realizar la actividad, ésta especifíca la página que se abre. Se abrirá en la forma especificada por la propiedad <code>disposition</code> .</li>
  <li><strong><code>disposition</code></strong> - (opcional) Especifíca cómo se presenta la página especificada en <code>href</code> cuando una actividad es invocada. El valor, si se especifíca, debe ser uno de los siguientes (si se omite, por defecto será <code>window</code>):
    <ul>
      <li><strong><code>window</code></strong> - La página que maneja la actividad es abierta en un nueva "ventana"( en un dispositivo móvil ésta vista sustituirá a la aplicación original que pidió a la actividad). La página debe llamar a&nbsp; <code>navigator.setMessageHandler</code> para cada actividad que ésta soporta y posteriormente ejecutar la actividad para la cual se recibe un mensaje. Además, si la actividad requiere regresar un valor, la página debe llamar a <code>activity.postResult</code> o <code>activity.postError</code> (Donde <code>activity</code> es el primer argumento suministrado a la función especificada por <code>setMessageHandler</code>) según sea apropiado. Estas especificaciones están especificadas con más detalle en <a href="/en-US/docs/WebAPI/Web_Activities">Web Activities</a>.</li>
      <li><strong><code>inline</code></strong> - La página que maneja la actividad se abrirá en una superposición (en un disositivo móvil esto será mostrado en una ventana emergente sobre la aplicación original que solicitó la actividad). Comportamiento subsiguiente es exactamente el mismo como si <code>disposition</code> fuese <code>window</code>.</li>
    </ul>
  </li>
  <li><strong><code>filters</code></strong> - (opcional) Un diccionario, cada propiedad de las cuales especifica un filtro. Estos filtrtos se aplicarán mientras se determina las aplicaciones adecuadas para el manejo de una actividad determinada. Los nombres de los filtros son de libre formato, pero sus valores deben ser una cadena o una matriz de cadenas (el tipo exacto depende del filtro ).</li>
</ul>
<h3 id="appcache_path"><code>appcache_path</code></h3>
<p>(opcional) La ruta absoluta a el cache de la aplicación en el manifest (<a href="/en-US/docs/HTML/Using_the_application_cache">AppCache</a>). Cuando una Open Web App esta instalada , el AppCache manifest será recogida y analizada, y sus activos estáticas bajo el encabezado <code>CACHE</code> se almacenarán en cache.</p>
<pre class="brush: js">
"appcache_path": "/cache.manifest"</pre>
<h3 id="csp"><code>csp</code></h3>
<p>(opcional) Especifica un<a href="/en-US/docs/Security/CSP">Content Security Policy</a> para la aplicación. Esta política se aplica a todas las páginas cargadas en la aplicación. Vease la <a href="/docs/Apps/CSP" title="/docs/Apps/CSP">Apps CSP page for more information</a>.</p>
<dl>
</dl>
<h3 id="default_locale"><code>default_locale</code></h3>
<p>(requerida cuando <code>locales</code> esta presente). Una etiqueta de idioma(<a href="http://www.ietf.org/rfc/rfc4646.txt">RFC 4646</a>) que indica en qué idioma usa tu manifest. No incluya la etiqueta de idioma usada aquí en el campo <a href="/en-US/docs/Apps/Manifest#locales"><code>locales</code></a>. Esta es una buena práctica para definir <code>default_locale</code> incluso si usted no usa <code>locales</code>. El Firefox OS Marketplace usará esto para conocer en qué idioma está su manifest, para que pueda usar los valores de configuración regional correcta en los campos traducidos. Si no defines <code>default_locale</code>, el Marketplace tiene que adivinar el lenguaje basado en el serving locale. <code>default_locale</code> no es usado por le dispositivo que instala la aplicación</p>
<p>Ejemplo para Inglés:</p>
<pre class="brush: js">
"default_locale": "en"​</pre>
<h3 id="description"><code>description</code></h3>
<p>(requerida) Una descripción en leible por humanos de la aplicación (la longitud maxima es&nbsp; 1024 caracteres).</p>
<h3 id="developer"><code>developer</code></h3>
<p>(opcional) Información acerca del desarrollador de la aplicación. Information about the developer of the app. Tienes estas propiedades:</p>
<ul>
  <li><strong><code>name</code></strong> - El nombre del desarrolladorThe name of the developer.</li>
  <li><strong><code>url</code></strong> - <span id="result_box" lang="es"><span class="hps">La dirección URL</span> <span class="hps">de un</span> <span class="hps">sitio que contiene</span> <span class="hps">más información sobre</span> <span class="hps">el desarrollador de la</span> <span class="hps">aplicación</span></span>. Esta URL tipicamente es mostrada cuando los usuarios hacen clic sobre el nombre del desarrollador de la aplicación mientas visualizan detalles acerca de una aplicación dentro del panel de control (o navegador).</li>
</ul>
<h3 id="fullscreen"><code>fullscreen</code></h3>
<p>(Sólo Firefox OS , opcional) Establezca esta propiedad a <code>true</code> o <code>false</code> para indicar to indicate el tiempo de ejecución que debera lanzar la aplicación en modo de pantalla completa. Ejemplo:</p>
<pre class="brush: js">
"fullscreen": "true"</pre>
<h3 id=".C3.ADconos"><code>íconos</code></h3>
<p>(opcional) <span id="result_box" lang="es"><span class="hps">Un mapa del</span> <span class="hps">tamaño de los íconos</span> <span class="hps">de</span> <span class="hps">los URIs</span> <span class="hps">de los íconos</span></span> (que pueden ser&nbsp; <a href="#Path_handling">absolute paths</a> o <code>data</code> URIs). <span id="result_box" lang="es"><span class="hps">Los íconos</span> <span class="hps">deben</span> <span class="hps">ser cuadrados</span> <span class="hps">y están</span> <span class="hps">destinados a representar</span> <span class="hps">visualmente la</span> <span class="hps">aplicación</span></span>. Los íconos no deberian tener fondos solidos qué se extienden a todas las esquinas del ícono. Rutas comenzando con / son tratadas como relativas a el origen de la aplicación.</p>
<p>Para Windows 7 y Android, los siguientes tamaños de íconos estan soportados:</p>
<ul>
  <li>16 x 16</li>
  <li>32 x 32</li>
  <li>48 x 48</li>
  <li>64 x 64</li>
  <li>128 x 128</li>
  <li>256 x 256</li>
</ul>
<p>Para Firefox OS, los íconos deben ser proporcionados sin una gota de sombra y una <em>close cropped canvas</em> en los siguientes tamaños:</p>
<ul>
  <li>30 x 30</li>
  <li>60 x 60</li>
</ul>
<p>Tu puedes seguir <a href="http://www.mozilla.org/en-US/styleguide/products/firefoxos/icons/">app icon guidelines</a> para Firefox OS.</p>
<div class="note">
  <p><strong>Nota:</strong> Firefox OS Marketplace requiere que todas las aplicaciones subidas tengan un ícono como mínimo de al menos 128 x 128.</p>
</div>
<p>Tu puedes especificar múltiples íconos como este ejemplo:</p>
<pre class="brush:js;">
"icons": {
&nbsp; "16": "/img/icon-16.png",
&nbsp; "48": "/img/icon-48.png",
&nbsp; "128": "/img/icon-128.png"
}</pre>
<h3 id="installs_allowed_from"><code>installs_allowed_from</code></h3>
<p>(opcional) Un arreglo de origenes (scheme+dominio, por ejemplo <code>https://marketplace.example.com</code>) qué están permitidos para lanzar al instalación de esta aplicación. Este campo te permite habilitar explicitamente sólo ciertos sitios o tiendas, con quien tiene una relación para instalar la aplicación. El arreglo <code>["*"]</code> significa qué las instalaciones de esta aplicación estan permitidas desde cualquier sitio. Este es el valor predeterminado. Nota qué <code>[]</code> sería no permitir la instalación desde cualquier sitio, incluyendo nuestro propio sitio. Aquí está un ejemplo permitiendo instalaciones desde cualquier sitio:</p>
<pre class="brush: js">
"installs_allowed_from": ["*"]</pre>
<div class="note">
  <p><strong>Nota:</strong> no pongas la barra diagonal al final de las URLs en este arreglo. Por ejemplo , esto es incorrecto: <code>https:/marketplace.example.com/</code>. Si usas una barra diagonal, la instalacion fallará. Hay un bug sobre esto <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=755044">aquí</a>.</p>
</div>
<div class="note">
  <p><strong>Nota:</strong> si una de las URLs de instalación es el Firefox OS Marketplace, debes utilizar <code>https://marketplace.firefox.com</code>. Hubo una URL anterior para el Marketplace pero esta cambió el 15 de Noviembre de 2012. La URL anterior fue <code>https://marketplace.mozilla.org</code>, y ya no funciona. Si su aplicación utiliza la URL anterior, tendrá que cambiarla.</p>
</div>
<h3 id="launch_path"><code>launch_path</code></h3>
<p>(opcional, requerida para aplicaciones empaquetadas) La ruta de origen que se carga cuando la aplicación inicia. Si no se proporciona, el origen de la app se trata como el dominio de la URL. Ver <a href="#Path_handling">Path Handling</a>.</p>
<p>En una<a href="/en-US/docs/Apps/Packaged_apps"> app empaquetada</a>, este campo especifíca el punto de partida del contenido local al archivo zip que contiene la app empaquetada. Por ejemplo, si <code>launch_path</code> tiene un valor de <code>/myApp/index.html</code>, cuando la app empaquetada es cargada se abrirá el archivo <code>/myApp/index.html</code>.</p>
<h3 id="locales"><code>locales</code></h3>
<p>(opcional) Un mapa de uno a más locale-specific anulaciones de los datos contenidos en el manifest, las cuales las IUs usan para proveer vistas localizadas basadas en los accesos locales. Por ejemplo, si tienes hablantes italianos instalando tu app, probablemente querrás que vean una interfaz de usuario localizada a su idioma. Cada entrada local está marcada con una etiqueta (<a href="http://www.ietf.org/rfc/rfc4646.txt">RFC 4646</a>) y contienen una representación dispersa del manifest. Cualquier archivo presente en el campo <code>locale</code> sobre-escribe los campos que concuerdan en el manifest. No puedes sobre-escribir estos campos: <code>default_locale</code>, <code>locales</code> a sí mismos, y <code>installs_allowed_from</code>. Un manifest que sobre-escribe cualquiera de estos campos es invalido. Cuando<code> locales</code> está presente, <code>default_locale</code> también debe de estarlo.</p>
<p>Ejemplo con Español e Italiando:</p>
<pre class="brush: js">
"locales": {
"es": {
  "description": "¡Acción abierta emocionante del desarrollo del Web!",
  "developer": {
    "url": "http://es.mozillalabs.com/"
  }
},
"it": {
  "description": "Azione aperta emozionante di sviluppo di fotoricettore!",
  "developer": {
    "url": "http://it.mozillalabs.com/"
  }
}
}</pre>
<h3 id="nombre"><code>nombre</code></h3>
<p>(requerido) Un nombre legible para la aplicación (la longitud máxima es de 128 caracteres).</p>
<div class="note">
  <p><strong>Nota:</strong> Si cambias el nombre de tu app después de que el Marketplace la ha aprobado, deberás volver a&nbsp; presentar tu aplicación para su aprobación de nuevo.</p>
</div>
<h3 id="orientaci.C3.B3n"><code>orientación</code></h3>
<p>(solo Android y Firefox OS, opcional) Un array que define las orientaciones a las cuales las aplicaciones estarán bloqueados incluso si la orientación del dispositivo cambia. Cada entrada en el array puede ser uno de los <code>portrait</code>, <code>landscape</code>, <code>portrait-primary</code>, <code>landscape-primary</code>, <code>portrait-secondary</code> or <code>landscape-secondary</code>. Las opciones con bloqueo primario y secundario bloquearán la orientación del dispositivo en solo una orientación, incluso si la orientación del dispositivo cambia. Las opciones sin primario y secundario combinan ambas reglas de primario y secundario juntos. Las opciones adicionalmente con el sufijo <code>-secondary</code> implementan una rotación de 180 grados para las opciones que no tienen el sufijo. <span class="short_text" id="result_box" lang="es"><span class="hps">Por ejemplo</span><span>,</span> <span class="hps">sostener el teléfono</span> <span class="hps">boca abajo</span></span> (pero de una manera en que el <span class="short_text" id="result_box" lang="es"><span class="hps">ancho es menor</span> <span class="hps">que la altura</span></span>), implica la orientación <code>portrait-secondary</code>. Si este campo tiene un valor válido, <span id="result_box" lang="es"><span class="hps">el tiempo de ejecución</span> <span class="hps">no va a cambiar</span> <span class="hps">la orientación de la</span> <span class="hps">vista</span></span> renderizando la aplicación incluso si el dispositivo es volteado. Ejemplo:</p>
<pre class="brush: js">
"orientation": ["portrait","landscape-secondary"]</pre>
<h3 id="permisos"><code>permisos</code></h3>
<p>(opcional) La serie de permisos que la app necesita. Una app debe listar cada API que intenta utilizar que requiera el permiso del usuario. Si una app trata de utilizar una de estas APIs sin la entrada correspondiente en este campo, fallará.</p>
<div class="note">
  <p><strong>Nota:</strong> <span id="result_box" lang="es"><span class="hps">La mayoría de estos</span> <span class="hps">permisos sólo</span> <span class="hps">tiene sentido</span> <span class="hps">para</span></span> <a href="/en-US/docs/Apps/Packaged_apps">privileged apps or certified apps</a>, no para apps alojadas.</p>
</div>
<p><span class="short_text" id="result_box" lang="es"><span class="hps">El campo de</span> <span class="hps">permisos</span> <span class="hps">es</span> <span class="hps">un objeto</span></span>, <span class="short_text" id="result_box" lang="es"><span class="hps">con</span> <span class="hps">cada propiedad</span> <span class="hps">especificando un solo</span> <span class="hps">permiso</span></span>. Cada entrada a la API debe tener una <code>descripción</code> apropiada. Algunas APIs tambien requieren <code>acceso</code> apropiado. Ejemplo del campo <code>permissions</code>:</p>
<pre class="brush: js">
"permissions": {
"contacts": {
  "description": "Required for autocompletion in the share screen",
  "access": "readcreate"
  },
"alarms": {
  "description": "Required to schedule notifications"
  }
}</pre>
<ul>
  <li><strong><code>description</code></strong> - <span id="result_box" lang="es"><span class="hps">Una cadena que especifica</span> <span class="hps">la intención de</span> <span class="hps">solicitar utilizar</span> <span class="hps">esta API</span></span>. Esta propiedad es obligatoria.</li>
  <li><strong><code>access</code></strong> -Una cadena especificando el tipo de acceso requerido para el permiso. Esta propiedad solo es requerida para unas cuantas APIs. Los posibles valores son <code>read</code>, <code>readwrite</code>, <code>readcreate</code> y <code>createonly</code>.</li>
</ul>
<p>Los permisos de las APIs están listados a continuación. Si un API necesita una propiedad <code>access</code>, esta es mencionada. Para más información sobre cuando estos permisos son soportados, ve a <a href="/en-US/docs/Apps/App_permissions">App permissions</a>.</p>
<ul>
  <li><strong><code>alarms</code></strong> - Programar una notificación, o programa una aplicación para que ésta comience.</li>
  <li><strong><code>browser</code></strong> - Permite el uso de un navegador.</li>
  <li><strong><code>contacts</code></strong> - Agregar, leer, o modificar contactos de la agenda en el dispositivo y leer contactos desde la tarjeta SIM;. <strong><code>access</code> propiedad requerida:</strong> una de <code>readonly</code>, <code>readwrite</code>, <code>readcreate</code> o <code>createonly</code>.</li>
  <li><strong><code>device-storage:music</code>/<code>device-storage:videos</code>/<code>device-storage:pictures</code>/<code>device-storage:sdcard</code></strong> - Agregar, leer o modificar archivos almacenados en el punto central del dispositivo. <strong><code>access</code> propiedad requerida:</strong> una de <code>readonly</code>, <code>readwrite</code>, <code>readcreate</code> o <code>createonly</code>.</li>
  <li><strong><code>fmradio</code></strong> - Controla el radio FM.</li>
  <li><strong><code>geolocation</code></strong> - Obtiene la actuala localización del usuario.</li>
  <li><strong><code>storage</code></strong> - Utiliza <code>localStorage</code> y <code>IndexedDB</code> sin limitaciones de tamaño.</li>
  <li><strong><code>systemXHR</code></strong> - Hacer las peticiones HTTP sin orígenes de restricción.</li>
  <li><strong><code>tcp-socket</code></strong> - Crear y comunicarse a través de puertos TCP.</li>
  <li><strong><code>wifi-manage</code></strong> - Enumerar las redes WiFi disponibles, obtener el alcance de la red, conectar a una red.</li>
</ul>
<p>Además, algunas propiedades que solo están disponibles para <a href="/en-US/docs/Apps/Packaged_apps#Types_of_packaged_apps">apps certificadas</a>:</p>
<ul>
  <li><strong><code>backgroundservice</code></strong> - Habilitauna aplicación web para correr en segundo plano <span id="result_box" lang="es"><span class="hps">y llevar a cabo</span> <span class="hps">tareas como</span> <span class="hps">la sincronización</span> <span class="hps">o responder</span> <span class="hps">a los mensajes entrantes</span></span>.</li>
  <li><strong><code>bluetooth</code></strong> - Acceso de bajo nivel para las características del Bluetooth.</li>
  <li><strong><code>camera</code></strong> - Tomar fotos, hacer video y controlar la cámara. La razón por la cual ésta característica está limitada a apps certificadas fue por el sandbox que corren las aplicaciones en accesos preventivos al hardware de la cámara. Nuestra meta es hacerla disponible para aplicaciónes <em>3rd party</em> lo más pronto posible, pero no tendremos tiempo para hacerlo posible en la primera entrega.</li>
  <li><strong><code>desktop-notification</code></strong> - Despliega una notificación en el escritorio del usuaio.</li>
  <li><strong><code>mobileconnection</code></strong> - <span id="result_box" lang="es"><span class="hps">Obtener información</span> <span class="hps">acerca de la</span> <span class="hps">comunicación móvil de voz</span> <span class="hps">y datos de</span> <span class="hps">conexión</span></span>.</li>
  <li><strong><code>power</code></strong> - apaga o enciende la pantalla, control del CPU, corriente del dispotivo, y cosas por el estilo. <span id="result_box" lang="es"><span class="hps">Escuchar</span> <span class="hps">e inspeccionar</span> <span class="hps">los sucesos de bloqueo</span> <span class="hps">de recursos</span></span>.</li>
  <li><strong><code>settings</code></strong> - Configurar o ver los ajustes del dispositivo. <strong><code>access</code> propiedad requerida:</strong> una de <code>readonly</code> o <code>readwrite</code>.</li>
  <li><strong><code>sms</code></strong> - Enviar y revibir SMS.</li>
  <li><strong><code>telephony</code></strong> - Acceso a toda la telefonía- APIs relacionadas.</li>
  <li><strong><code style="font-size: 14px;">time</code></strong>&nbsp;- (antes <code>systemclock</code>) Fija el horario. (La información del tiempo de zona está controlado por la configuración de la API.)</li>
  <li><strong><code>webapps-manage</code></strong> - Obtiene acceso al API <a href="/en-US/docs/Apps/Apps_JavaScript_API#Management_API"><code>navigator.mozApps.mgmt</code></a> para administrar las Open Web Apps.</li>
</ul>
<h3 id="type"><code>type</code></h3>
<p>(opcional) El tipo de aplicación, que puede ser <code>web</code>, <code>privileged</code>, o <code>certified</code>. Los tipos son descritos a continuación.</p>
<ul>
  <li><strong><code>web</code></strong> - Una app regular. Los permisos son limitados a esta lista en el manifest en el campo de <code>permissions</code>. Si no especificas el campo <code>type</code> en el manifest, <code>web</code> es el tipo predeterminado.</li>
  <li><strong><code>privileged</code></strong> - Una Open Web App autenticada que ha sido aprobada por una tienda de aplicaciones como el Firefox OS Marketplace. Algunas APIs de seguridad o privacidad solo están disponibles para apps tipo&nbsp; privileged. <span id="result_box" lang="es"><span class="hps">Su propósito es </span><span class="hps">dar más</span> <span class="hps">seguridad a</span> <span class="hps">un usuario</span> <span class="hps">para</span> <span class="hps">aplicaciones que</span> <span class="hps">desean tener acceso</span> <span class="hps">a dicha</span> <span class="hps">API</span></span>. Hay un <a href="/en-US/docs/Apps/Packaged_apps">packaged app</a> (todos los recursos en un archivo zip) que tiene las siguientes características adicionales:
    <ul>
      <li>Aprovadas por una tienda de aplicaciones después de una revisión de código o el equivalente.</li>
      <li>Tiene un app manifest firmado por la tienda de aplicaciones.</li>
      <li>Usa <a href="/en-US/docs/Security/CSP">Content Security Policy</a>.</li>
      <li>Implementa otras cosas relacionadas a la seguridad. Para más información ve a: <a href="https://wiki.mozilla.org/Apps/Security">Security</a>.</li>
    </ul>
  </li>
  <li><strong><code>certified</code></strong> - Una Open Web App que está destinada para una función crítica de sistema como el marcado predetrminado o el sistema de configuración de apps en un smartphone. No está destinado a aplicaciones 3rd party en una tienda de aplicaciones. Una app certificada es una app empaquetada que es similar a una app privileged, excepto que todos los permisos de los dispositivos son implicitos. Debe ser aprobado por el OEM o soporte para el dispositivo que la utiliza.</li>
</ul>
<p>Ejemplo:</p>
<pre class="brush: js">
"type": "privileged"</pre>
<h3 id="version"><code>version</code></h3>
<p>(opcional) Una cadena que representa la versión del manifest. Este valor no es usado en el tipo Web en ningún momento, por lo tanto este puede ser cualquier valor. Puedes insertar esta cadena dentro del manifest y extraerla para ayudar a sobrellevar algunos casos de actualización. Ver <a href="#Updating_manifests">Updating manifests</a>.</p>
<h2 id="Manejo_de_rutas">Manejo de rutas</h2>
<p>Todos los campos que mantienen una ruta en el manifest deben de ser rutas absolutas (por ejemplo, <code>/images/myicon.png</code>), y las rutas deben ser atendidas desde el mismo origen que la app.</p>
<p>También, hay dos maneras de establecer <code>launch_path</code>:</p>
<ul>
  <li>Si tu app está almacenada en la raíz de un servidor Web, por ejemplo <code>mywebapp.github.com/</code>, entonces <code>launch_path</code> debe ser fijado a <code>/</code>.</li>
  <li>De otra manera, si tu app está almacenada en un subdirectorio, por ejemplo <code>mymarket.github.com/mywebapp/</code>, entonces <code>launch_path</code> debe ser fijado a <code>/mywebapp/</code>.</li>
</ul>
<h2 id="Validando_un_manifest">Validando un manifest</h2>
<p>Para validar un manifest, usa este sitio: <a href="https://marketplace.firefox.com/developers/validator">https://marketplace.firefox.com/developers/validator</a></p>
<p>Incluso hay una API que puedes usar para validar el manifest: <a href="http://zamboni.readthedocs.org/en/latest/topics/api.html#validate">http://zamboni.readthedocs.org/en/latest/topics/api.html#validate</a></p>
<h2 id="Sirviendo_manifests">Sirviendo manifests</h2>
<p>El manifest de la app debe ser servido desde el mismo origen que la app.</p>
<p>Cuando es servido desde archivos estáticos, se recomienda que el manifest esté almacenado con una extensión de archivo de <code>.webapp</code>. Los manifests deben ser servidos con una cabecera de <code>Content-Type</code> de <code>application/x-web-app-manifest+json</code>. Esta es actualmente no forzada por Firefox pero lo es por el Marketplace. Firefox OS solamente revisa este si el <em>origen</em> de la página donde el usuario ejecuta la instalación es diferente que el <em>origen</em> de la misma webapp.</p>
<p>Los manifets pueden ser servidos sobre SSL para mitigar cierta clase de ataques.</p>
<p>El documento debe ser UTF-8 para que así la app pueda ser enviada al Firefox OS Marketplace. Es recomendado omitir la marca de orden de byte (BOM, por sus siglas en inglés). Otras codificaciones pueden ser especificadas con un parámetro <code>charset</code> en la cabecera <code>Content-Type</code> (por ejemplo <code>Content-Type: application/x-web-app-manifest+json; charset=ISO-8859-4</code>), aunque esto no viene a respetarse por el Marketplace.</p>
<p><span id="result_box" lang="es"><span class="hps">Agentes usuario</span> <span class="hps">siempre que sea posible</span> <span class="hps">deben</span> manejarse <span class="hps">mensajes a</span> <span class="hps">la</span> <span class="hps">identidad de sitio</span> <span class="hps">y el estado de</span> <span class="hps">TLS</span> <span class="hps">cuando se pida confirmación</span> <span class="hps">al usuario</span> <span class="hps">para instalar</span> <span class="hps">una aplicación.</span></span></p>
<h5 id="Serving_desde_Apache">Serving desde Apache</h5>
<p>Si es archivo<code> .htaccess</code>, debes agregar lo siguiente:</p>
<pre>
AddType application/x-web-app-manifest+json .webapp</pre>
<div class="note">
  <strong>Nota:</strong> Esto asume que estás usando<code> .webapp</code> como una extensión. si estás usando <code>.json</code> u otra extensión, deberás actualizar el código para que esto se vea reflejado.</div>
<p>Si no tienes un archivo <code>.htaccess</code>, crealo en el directorio raíz de tu servidor. Si esto no funciona, tu host puede requerir que agregues <code>AddHandler x-web-app-manifest+json .webapp</code>.</p>
<h5 id="Serving_desde_NGINX">Serving desde NGINX</h5>
<p>Necesitas editar tu archivo <code>mime.types</code> en el directorio conf. Este probablemente se encuentra en <code>/etc/nginx/</code> o <code>/opt/nginx/</code>.</p>
<p>Debes tener algo similar a lo siguiente. Agrega la última línea.</p>
<pre>
types {
text/html   html htm shtml;
text/css    css;
text/xml    xml;
application/x-web-app-manifest+json   webapp;
}</pre>
<div class="note">
  <strong>Nota:</strong> Se sume que se esta usando <code>.webapp</code> como extensión. Si usa <code>.json</code> u otra extensión, tiene que actualizar el código para que se refleje.</div>
<h5 id="Serving_desde_GitHub">Serving desde GitHub</h5>
<p>si tienes servido tu archivo manifet desde <a class="external" href="http://pages.github.com/">GitHub Pages</a>, GitHub lo servirá con la cabecera <code>Content-Type</code> de <code>application/x-web-app-manifest+json</code>. Deberás usar la extensión de archivo <code>.webapp</code> en tu archivo manifest. Ejemplo: <code>manifest.webapp</code>.</p>
<h5 id="Serving_desde_Python">Serving desde Python</h5>
<p>Si tienes instalado python, fácilmente puedes correr un servidor desde el directorio local, corriendo python y pegando el mismo:</p>
<pre>
import SimpleHTTPServer
import SocketServer
SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map['.webapp'] = 'application/x-web-app-manifest+json'
httpd = SocketServer.TCPServer(("", 3000), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.serve_forever()
</pre>
<h2 id="Actualizando_manifests">Actualizando manifests</h2>
<p>Para más información sobre actualizar aplicaciones, ver<a href="/en-US/docs/Apps/Updating_apps"> Updating apps</a>.</p>
Revert to this revision