Manifeste d'application

  • Raccourci de la révision : Applications/Manifeste
  • Titre de la révision : Manifeste d'application
  • ID de la révision : 345297
  • Créé :
  • Créateur : tregagnon
  • Version actuelle ? Non
  • Commentaire

Contenu de la révision

Le manifeste d'une application web Open Web App contient les informations nécessaires aux navigateurs pour interagir avec l'application. Le manifeste est l'un des éléments clefs distinguant les Open Web Apps d'un simple site web. Il s'agit d'un fichier JSON avec un nom et une description pour l'application. Il peut aussi contenir les icônes, les permissions requises par l'application, et bien d'autres choses. Le navigateur qui prend en charge le manifeste doit incorporer un exécutable Web.

Dans le cas d'une publication indépendante de l'application web depuis une page que vous contrôlez : vous déclenchez l'installation (en appelant depuis un bouton la méthode : navigator.mozApps.install()).

Quand une plateforme de vente d'applications web publie une application web, elle déclenche l'installation en fournissant au navigateur l'URL du manifeste de l'application hébergée.

Voir la page de réponses aux questions fréquentes sur les manifestes.

Un exemple de manifeste

Le bout de code suivant est un manifeste très simple. Vous pouvez le copier dans un fichier texte et remplacer les valeurs par vos informations.

Note : Votre application nécessite peut-être un manifeste plus évolué. Lisez la suite de la documentation pour connaître tous les champs disponibles.

{
  "name": "Mon application",
  "description": "Une description courte de l'application",
  "launch_path": "/",
  "icons": {
    "128": "/img/icone-128.png"
  },
  "developer": {
    "name": "Votre nom ou celle de votre organisation",
    "url": "http://votre-site-web.org"
  },
  "default_locale": "fr"
}

Les champs du manifeste

Les champs suivants sont autorisés dans un manifeste. Il n'y a que deux champs requis : name et description. D'autres champs peuvent être requis si vous utilisez certains champs. Ceci sera précisé dans la documentation.

Les champs peuvent apparaître dans n'importe quel ordre. Tout champ en dehors de cette liste, sera ignoré.

activities

(Firefox OS seulement, facultatif) Renseigne un ensemble d'activités Web supportées par l'application. Chaque propriété dans ce champ est une activité. Les noms de ces activités sont des champs textes libres, et chaque activité est représenté par un objet. Voici un exemple du champ activities, avec une seule activité nommée share :

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

Dans cet exemple, l'objet pour l'activité share possède trois propriétés : filters, href, et disposition. Elles sont décrites ci-dessous.

  • href - (requise) Quand une autre application ou page web initie une activité qui est supportée par cette application, et si cette application est désignée pour réaliser cette activité, cette propriété indique la page qui doit être ouverte. Elle sera ouverte de la façon indiquée dans la propriété disposition.
  • disposition - (facultatif) Précise comment la page indiquée dans href doit être présentée quand l'activité est invoquée. La valeur, si renseignée, doit être une des suivantes (par défaut window) :
    • window - La page prenant en charge l'activité doit être ouverte dans une nouvelle "fenêtre" (sur un appareil mobile, cette vue remplacera celle de l'application qui a demandé l'activité). Cette page doit appeler la méthode navigator.setMessageHandler pour chaque activité qu'elle supporte et exécuter l'activité pour laquelle elle a reçu le message. Ensuite, si l'activité retourne une valeur, cette page doit appeler activity.postResult ou activity.postError (où activity est le premier argument fourni à la fonction spécifiée par setMessageHandler). Ces fonctions sont détaillées dans activités Web.
    • inline - La page qui prend en charge l'activité recouvrira la page d'origine (sur un appareil mobile, elle sera rendue dans un popup au-dessus de l'application originale qui a demandé l'activité). Le comportement reste ensuite similaire à window.
  • filters - (facultatif) Un dictionnaire, dont chaque propriété définit un filtre. Ces filtres sont appliqués pour déterminer les applications adaptées à la prise en charge de l'activité donnée. Les noms des filtres sont des champs texte libres, mais leurs valeurs doivent être une chaîne de caractères, ou un tableau de chaînes de caractères (le type exact dépend du filtre).

appcache_path

(facultatif) Le chemin absolu vers le manifeste de cache de l'application (AppCache). Quand une Open Web App est installée, le manifeste AppCache est récupéré et interprété, et les éléments statiques sous l'en-tête CACHE sont mis en cache.

"appcache_path": "/cache.manifest"

csp

(facultatif) Précise une Politique de sécurité (Content Security Policy) pour l'application. Cette politique s'applique à toutes les pages chargées via l'application. La syntaxe CSP est décrite sur la page https://wiki.mozilla.org/Security/CSP/Specification.

Notez bien que pour les applications certifiées et privilégiées une CSP par défaut s'applique toujours, même si vous n'utilisez pas cette propriété. Pour ces applications, si vous précisez une politique de CSP en utilisant cette propriété, les deux politiques seront fusionnées, ce qui signifie que toute action devra être autorisée à la fois par les deux politiques (par défaut et celle que vous aurez précisée dans cette propriété).

Les CSP par défaut pour les applications privilégiées et certifiées sont :

Privilégiée
"default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"
Certifiée
"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"

default_locale

(requis quand locales est présent) Un identifiant de langue (RFC 4646) qui indique quel langage le manifeste utilise. Ne pas inclure dans le champ locales, l'identifiant de langue utilisé dans cette propriété. Il est préférable de toujours définir default_locale, même si vous n'utilisez pas locales. Le Firefox Marketplace l'utilisera pour savoir dans quel langue est votre manifeste, et ainsi utiliser les bonnes valeurs dans les champs traduits. Si vous ne définissez pas de default_locale, le Marketplace devra deviner la langue. default_locale n'est pas utilisé par l'appareil qui installe l'application.

Exemple pour le français :

 "default_locale": "fr"​

description

(requis) Une description de l'application (longueur maximum de 1024 caractères).

developer

(facultatif)

Informations sur le développeur de l'application. Possède ces propriétés :

  • name - Le nom du développeur
  • url - L'URL d'un site contenant plus d'informations sur le développeur de l'application. Cette URL est habituellement chargée quand l'utilisateur clique sur le nom du développeur, en regardant le détail de l'application depuis son tableau de bord (dashboard), ou son navigateur.

fullscreen

(Firefox OS seulement, facultatif)

Définir à true ou false pour indique à l’exécutable si l'application doit être lancé en plein-écran. Exemple :

"fullscreen": "true"

icons

(facultatif) Un objet contenant les tailles d'icône avec les URIs pour chaque icône correspondante (peut être un chemin absolu, relatif ou des data URIs). Les icônes doivent être carrées et pensées pour représenter l'application web. Les chemins commençant par / sont traités comme des chemins relatifs depuis la racine de l'application.

Pour Windows 7 et Android, les tailles d'icônes suivantes sont supportées :

  • 16 × 16
  • 32 × 32
  • 48 × 48
  • 64 × 64
  • 128 × 128
  • 256 × 256

Pour Firefox OS, les icônes ne doivent pas projeter d'ombre et doivent remplir toute la surface de l'icône, dans les tailles suivantes :

  • 30 × 30
  • 60 × 60

Vous pouvez lire les recommandations sur le design d'icônes pour Firefox OS.

Note : Firefox Marketplace requiert que toutes les applications soumises aient au minimum une icône dont les dimensions sont au moins de 128 × 128.

Vous pouvez renseigner plusieurs icônes en suivant cet exemple :

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

installs_allowed_from

(facultatif) Un tableau des origines (schéma + domaine, par exemple https://marketplace.exemple.com) qui sont autorisés à déclencher l'installation de l'application. Ce champ vous permet de n'autoriser l'installation que pour certains sites ou boutiques, avec lesquels vous avez des partenariats. Le tableau ["*"] indique que l'installation de l'application est autorisée depuis n'importe quel site. Il s'agit de la valeur par défaut. Notez que [] désactiverait l'installation depuis tout site, le votre inclus. Voici un exemple autorisant l'installation depuis n'importe quel site :

"installs_allowed_from": ["*"]

Note : Ne mettez pas de / à la fin des URLs dans ce tableau. Par exemple, cette valeur n'est pas bonne : https:/marketplace.example.com/. Si vous mettez un / à la fin, l'installation échouera.  Il y a un bug à ce sujet ici.

Note : Si une des URLs est le Firefox Marketplace, vous devez utiliser https://marketplace.firefox.com. Une autre URL était précédemment utilisée pour le Marketplace mais elle a changé le . L'URL précédente était https://marketplace.mozilla.org, et ne fonctionne plus. Si votre application utilise l'URL précédente, il vous faut la changer.

launch_path

(facultatif, requis pour les applications empaquetées) Le chemin chargé quand l'application démarre. Si il n'est pas fourni, l'origine de l'application sera pris en compte. Voir Gestion des chemins.

Dans une application empaquetée (packaged app), ce champ spécifie le point de départ du contenu local du fichier zip contenant l'application. Par exemple, si launch_path a pour valeur /monApp/index.html, alors l'application empaquetée sera lancée en ouvrant le fichier /monApp/index.html.

locales

(facultatif) Un objet de surcharges des données contenues dans le manifeste, pour chaque langue définie. L'interface (UI) utilisera ces informations pour traduire les écrans en fonctions des paramètres de l'appareil. Par exemple, si des personnes parlant italiens installent votre application, vous souhaiterez sûrement afficher les textes de l'interface en Italien. Chaque entrée pour une langue est définie par un identifiant de langue (RFC 4646) et contient une représentation simplifiée du manifeste. Tout champ présent dans la propriété locales écrase le champ correspondant dans le manifeste. Vous ne pouvez pas écraser les champs : default_locale, locales, et installs_allowed_from. Un manifeste qui écrase n'importe lequel de ces champs est non valide. Quand locales est présent, default_locale doit l'être aussi

Exemple avec l'Espagnol et l'Italien :

"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/"
    }
  }
}

name

(requis) Le nom de l'application (longueur maximum de 128 caractères).

orientation

(Android et Firefox OS seulement, facultatif) Un tableau définissant les orientations dans lesquelles l'application doit rester verrouiller, même si l'orientation de l'appareil change. Chaque entrée dans le tableau peut être un des éléments de cette liste : portrait, landscape, portrait-primary, landscape-primary, portrait-secondary ou landscape-secondary. Les options avec primary ou secondary verrouillent l'orientation dans une seule orientation de l'appareil, mais si cette orientation change. Les options sans primary et secondary combinent les règles avec primary et secondary. Les options suffixées par -secondary implique une orientation à 180 degrés par rapport à l'option sans suffixe. Par exemple, tenir le téléphone la tête en bas (mais toujours de façon à ce que la largeur soit inférieure à la hauteur), implique l'orientation portrait-secondary. Si ce champ a une valeur valide, l’exécutable ne changera pas l'orientation de la vue rendant l'application même si l'appareil est tourné. Exemple :

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

permissions

(facultatif) L'ensemble des permissions dont l'application a besoin. Une application doit lister toutes les API qu'elles comptent utiliser qui nécessitent l'autorisation de l'utilisateur. Si une application essaye d'utiliser une de ces APIs sans avoir l'entrée correspondante dans ce champ, elle échouera.

Note : La plupart de ces permissions ne prennent sens que dans le cas d'applications privilégiées ou certifiées, et non pour des applications hébergées.

Le champ permissions est un objet, chaque propriété indiquant une seule permission. Chaque entrée d'API doit avoir une propriété description. Certaines APIs nécessitent aussi une propriété access. Exemple du champ permissions :

"permissions": {
  "contacts": {
    "description": "Nécessaire pour l'aide à la saisie dans l'écran de partage",
    "access": "readcreate"
  },
  "alarms": {
    "description": "Nécessaire pour programmer des notifications"
  }
}
  • description - Une chaîne indiquant l'intention derrière la demande pour utiliser cette API. Ce champ est obligatoire.
  • access - Une chaîne de caractères indiquant le type d'accès requis pour la permission. Cette propriété n'est nécessaire que pour un petit nombre d'APIs. Les valeurs possibles sont read, readwrite, readcreate, et createonly.

Les APIs de permissions sont listées ci-dessous. Si une API requiert une propriété access, c'est précisé. Pour plus d'informations sur où ces permissions sont pris en charge, voir Permissions d'application.

  • alarms - Programmer une notification, ou programmer le démarrage d'une application.
  • browser - Permettre d'implémenter un navigateur.
  • contacts - Ajouter, lire ou modifier des contacts depuis le carnet d'adresses sur l'appareil et lire les contacts depuis la carte SIM. Propriété access requise : une valeur parmi readonly, readwrite, readcreate, ou createonly.
  • device-storage:music/device-storage:videos/device-storage:pictures/device-storage:sdcard - Ajouter, lire ou modifier des fichiers stockés sur l'appareil. Propriété access requise : une valeur parmi readonly, readwrite, readcreate, ou createonly.
  • fmradio - Contrôller la radio FM.
  • geolocation - Obtenir la position actuelle de l'utilisateur.
  • storage - Utiliser localStorage ou IndexedDB sans restriction de taille.
  • network-http - Créer des requêtes HTTP sans aucune restriction sur l'origine.
  • network-tcp - Créer et communiquer par des sockets TCP.
  • wake-lock-screen - Allumer l'affichage et montrer l'écran de verrouillage.
  • wifi-manage - Énumérer les réseaux Wifi disponibles, obtenir la force du signal, connecter à un réseau.

Il y a d'autres propriétés qui ne sont accessibles que pour les applications certifiées :

  • backgroundservice - Permettre à une application web de tourner en tâche de fond et de réaliser des tâches comme de la synchronisation ou répondre à des messages entrants.
  • bluetooth - Accès bas niveau au matériel Bluetooth.
  • camera - Prendre des photos, filmer des vidéos et contrôler l'appareil photo. La raison pour que cette API ne soit limitée qu'aux applications certifiées, est que le bac à sable (sandbox) pour les applications, empêche l'accès au matériel de la camera. Notre but est de la rendre accessible aux applications tierces dès que possible, mais nous n'aurons pas le temps de le faire pour la sortie initiale.
  • desktop-notification - Afficher une notification sur le bureau de l'utilisateur.
  • mobileconnection - Obtenir des informations sur les connections mobiles actuelles Voix et Data.
  • power - Allumer ou éteindre l'affichage, contrôler le CPU, l'alimentation de l'appareil, et ainsi de suite. Écouter et inspecter des évènements de verrouillage de ressource.
  • settings - Configurer et lire les paramètres de l'appareil. Propriété access requise : une valeur parmi readonly ou readwrite.
  • sms - Envoyer et recevoir des SMS.
  • systemclock - Définir l'heure actuelle. (Le fuseau horaire est contrôlé par l'API settings).
  • telephony - Accéder à toutes les APIs téléphone.
  • webapps-manage - Obtenir accès à l'API navigator.mozApps.mgmt qui gère les Open Web Apps installées.

type

(facultatif) Le type de l'application, peut être web, privileged, ou certified. Ces types sont décrits ci-dessous.

  • web - Une application normale. Les permissions sont limitées à celles contenues dans la première liste de permissions de cette page. Si vous ne remplissez pas de champ type dans le manifeste, web sera la valeur par défaut.
  • privileged - Une Open Web App authentifiée qui a été approuvée par une boutique d'applications telle que le Firefox Marketplace. Certaines APIs de sécurité ou d'accès à des informations privées, ne sont accessibles que pour les applications privilégiées, ceci afin d'augmenter la sécurité de l'utilisateur. Il s'agit d'une application empaquetée (toutes les ressources sont contenues dans un seul fichier zip) qui a les caractéristiques suivantes :
    • Approuvée par une boutique d'applications après une vérification du code.
    • Possède un manifeste d'application signé par la boutique d'applications
    • Utilise une politique de sécurité pour les contenus (Content Security Policy).
    • Implémente d'autres choses reliées à la sécurité. Pour plus d'informations, voir Sécurité.
  • certified - Une Open Web App qui a été conçue afin d'assurer une fonctionnalité critique du système comme un téléphone ou une application des paramètres systèmes sur un smartphone. Ce type n'est pas prévu pour les applications tierces dans une boutique d'applications. Une application certifiée est une application empaquetée, similaire à une application privilégiée, sauf que toutes les permissions de l'appareil sont implicites. Elle doit être approuvée par le fabricant ou l'opérateur téléphonique de l'appareil qui l'utilise.

Exemple:

"type": "privileged"

version

(facultatif) Une chaîne de caractères représentant la version du manifeste. L’exécutable web n'utilise pas du tout cette valeur, elle est donc libre. Vous pouvez ajouter cette propriété dans le manifeste et récupérer sa valeur pour vous aider à gérer différents cas de mise à jour. Voir Mettre à jour les manifestes.

Gestion des chemins

Tout champ dans le manifeste qui contient des chemins, doit avoir des chemins absolus (par exemple, /images/mon-icone.png), et les chemins doivent être servis depuis la même origine que l'application.

De plus, il y a deux façons de définir launch_path :

  • Si votre application est stockée à la racine d'un serveur web, par exemple mywebapp.github.com/, alors launch_path doit être défini à /.
  • Si votre application est stockée dans un sous-repertoire, par exemple mymarket.github.com/mywebapp/, alors launch_path doit être défini à /mywebapp/.

Valider un manifeste

Pour valider un manifeste, utilisez ce site web :

https://marketplace.firefox.com/developers/validator

Vous pouvez aussi utiliser une API pour valider votre manifeste :

http://zamboni.readthedocs.org/en/latest/topics/api.html#validate

Servir les manifestes

Le manifeste de l'application doit être servi depuis la même origine que l'application.

Quand servi comme un fichier statique, il est recommandé que le manifeste soit stocké avec une extension de fichier .webapp. Les manifestes d'applications doivent être servis avec une entête Content-Type : application/x-web-app-manifest+json (Note : Ce n'est pas actuellement forcé par Firefox mais l'est par le Marketplace). Les manifestes peuvent être servis par SSL pour limiter certains types d’attaques.

Le document doit être en UTF-8 pour que l'application soit soumis au Firefox Marketplace. Il est recommandé d’omettre le byte order mark (BOM). D'autres encodages de caractères peuvent être renseignés avec un paramètre charset sur l'entête Content-Type (par exemple Content-Type: application/x-web-app-manifest+json; charset=ISO-8859-4), mais ne sera pas pris en compte par le Marketplace.

Les agents utilisateurs doivent, lorsque c'est possible, offrir un message compréhensible à l'utilisateur sur l'identité du site et le statut TLS, lors de l'installation d'une application.

Servir depuis Apache

Dans votre fichier .htaccess, vous devez ajouter la ligne suivante :

AddType application/x-web-app-manifest+json .webapp
Note : Ce bout de code part du principe que vous utilisez l'extension .web-app. Si vous utilisez .json ou une autre extension, il vous faudra modifier cette ligne en conséquence.

Si vous n'avez pas de fichier .htaccess, créez-le dans le répertoire racine de votre serveur. Si cela ne marche pas, votre hébergeur peut attendre que vous ajoutiez aussi la ligne :

AddHandler x-web-app-manifest+json .webapp.

Servir depuis NGINX

You need to edit your mime.types file in the conf directory. This will probably be located in either /etc/nginx/ or /opt/nginx/.

You should have something similar to below. Add the last line.

types {
  text/html   html htm shtml;
  text/css    css;
  text/xml    xml;
  application/x-web-app-manifest+json   webapp;
}
Note: This assumes you're using .webapp as an extension. If you are using .json or another extension, you will have to update the code to reflect that.
Serving from GitHub

If you serve your manifest file from GitHub Pages, GitHub will serve it with the Content-Type header of application/x-web-app-manifest+json. You must use the .webapp file extension on your manifest file. Example: manifest.webapp.

Serving from Python

If you have python installed, you can easily run a server from the local directory, by running python and pasting the same:

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

Mettre à jour des manifestes

An app respects the normal rules for Web caching, and may optionally use advanced mechanisms for improved start-up, like the HTML5 AppCache. Given this, there are no special considerations for updating the normal resources that an app uses.

Open Web Apps are different, however, in the handling of the manifest. Some changes to a manifest may require user approval. Depending on the implementation of the Web runtime, it may be unclear whether an update has occurred.

As a clean way to deal with this issue, you can provide a version field in the app manifest. You can later check the version by inspecting the return value of the navigator.mozApps.getInstalled() function. If the user's installed version is not up-to-date, you can trigger an update using navigator.mozApps.install().

The value of version is not used by the Web runtime, so you can use whatever versioning scheme you want.

Also note that changes to a manifest that introduce errors or other breakage will be detected if the manifest has been submitted to Firefox Marketplace. Serious errors will cause the app's listing to be disabled. Less serious errors may automatically flag the app for re-review.

Source de la révision

<div class="wikistyle">
  <p>Le <strong>manifeste</strong> d'une application web <em>Open Web App</em> contient les informations nécessaires aux navigateurs pour interagir avec l'application. Le manifeste est l'un des éléments clefs distinguant les <em>Open Web Apps</em> d'un simple site web. Il s'agit d'un fichier <a href="/en-US/docs/JSON" title="/en-US/docs/JSON">JSON</a> avec un nom et une description pour l'application. Il peut aussi contenir les icônes, les permissions requises par l'application, et bien d'autres choses. Le navigateur qui prend en charge le manifeste doit incorporer un <a href="https://developer.mozilla.org/en-US/docs/Apps/Apps_architecture#Web_runtime" title="https://developer.mozilla.org/en-US/docs/Apps/Apps_architecture#Web_runtime">exécutable Web</a>.</p>
  <p>Dans le cas d'une publication indépendante de l'application web depuis une page que vous contrôlez : vous déclenchez l'installation (en appelant depuis un bouton la méthode : <a href="/en-US/docs/DOM/Apps.install"><code>navigator.mozApps.install()</code></a>).</p>
  <p>Quand une plateforme de vente d'applications web publie une application web, elle déclenche l'installation en fournissant au navigateur l'URL du manifeste de l'application hébergée.</p>
  <p>Voir la page de <a href="/en-US/docs/Apps/FAQs/About_app_manifests" title="/en-US/docs/Apps/FAQs/About_app_manifests">réponses aux questions fréquentes sur les manifestes</a>.</p>
  <h2 id="Un_exemple_de_manifeste">Un exemple de manifeste</h2>
  <p>Le bout de code suivant est un manifeste très simple. Vous pouvez le copier dans un fichier texte et remplacer les valeurs par vos informations.</p>
  <div class="note">
    <p><strong>Note :</strong> Votre application nécessite peut-être un manifeste plus évolué. Lisez la suite de la documentation pour connaître tous les champs disponibles.</p>
  </div>
  <pre class="brush: js">
{
&nbsp; "name": "Mon application",
&nbsp; "description": "Une description courte de l'application",
&nbsp; "launch_path": "/",
&nbsp; "icons": {
&nbsp;&nbsp;&nbsp; "128": "/img/icone-128.png"
&nbsp; },
&nbsp; "developer": {
&nbsp;&nbsp;&nbsp; "name": "Votre nom ou celle de votre organisation",
&nbsp;&nbsp;&nbsp; "url": "http://votre-site-web.org"
&nbsp; },
&nbsp; "default_locale": "fr"
}
</pre>
  <h2 id="Les_champs_du_manifeste">Les champs du manifeste</h2>
  <p>Les champs suivants sont autorisés dans un manifeste. Il n'y a que deux champs requis : <code>name</code> et <code>description</code>. D'autres champs peuvent être requis si vous utilisez certains champs. Ceci sera précisé dans la documentation.</p>
  <p>Les champs peuvent apparaître dans n'importe quel ordre. Tout champ en dehors de cette liste, sera ignoré.</p>
  <h3 id="activities"><code>activities</code></h3>
  <p>(Firefox OS seulement, facultatif) Renseigne un ensemble d'<a href="/en-US/docs/WebAPI/Web_Activities" title="/en-US/docs/WebAPI/Web_Activities">activités Web</a> supportées par l'application. Chaque propriété dans ce champ est une activité. Les noms de ces activités sont des champs textes libres, et chaque activité est représenté par un objet. Voici un exemple du champ <code>activities</code>, avec une seule activité nommée <code>share</code> :</p>
  <pre class="brush: js">
"activities": {
  "share": {
    "filters": {
      "type": [ "image/png", "image/gif" ]
    },
    "href": "foo.html",
    "disposition": "window"
  }
}</pre>
  <p>Dans cet exemple, l'objet pour l'activité <code>share</code> possède trois propriétés : <code>filters</code>, <code>href</code>, et <code>disposition</code>. Elles sont décrites ci-dessous.</p>
  <ul>
    <li><strong><code>href</code></strong> - (requise) Quand une autre application ou page web initie une activité qui est supportée par cette application, et si cette application est désignée pour réaliser cette activité, cette propriété indique la page qui doit être ouverte. Elle sera ouverte de la façon indiquée dans la propriété <code>disposition</code>.</li>
    <li><strong><code>disposition</code></strong> - (facultatif) Précise comment la page indiquée dans <code>href</code> doit être présentée quand l'activité est invoquée. La valeur, si renseignée, doit être une des suivantes (par défaut <code>window</code>) :
      <ul>
        <li><strong><code>window</code></strong> - La page prenant en charge l'activité doit être ouverte dans une nouvelle "fenêtre" (sur un appareil mobile, cette vue remplacera celle de l'application qui a demandé l'activité). Cette page doit appeler la méthode <code>navigator.setMessageHandler</code> pour chaque activité qu'elle supporte et exécuter l'activité pour laquelle elle a reçu le message. Ensuite, si l'activité retourne une valeur, cette page doit appeler <code>activity.postResult</code> ou <code>activity.postError</code> (où <code>activity</code> est le premier argument fourni à la fonction spécifiée par <code>setMessageHandler</code>). Ces fonctions sont détaillées dans <a href="/en-US/docs/WebAPI/Web_Activities" title="/en-US/docs/WebAPI/Web_Activities">activités Web</a>.</li>
        <li><strong><code>inline</code></strong> - La page qui prend en charge l'activité recouvrira la page d'origine (sur un appareil mobile, elle sera rendue dans un popup au-dessus de l'application originale qui a demandé l'activité). Le comportement reste ensuite similaire à <code>window</code>.</li>
      </ul>
    </li>
    <li><strong><code>filters</code></strong> - (facultatif) Un dictionnaire, dont chaque propriété définit un filtre. Ces filtres sont appliqués pour déterminer les applications adaptées à la prise en charge de l'activité donnée. Les noms des filtres sont des champs texte libres, mais leurs valeurs doivent être une chaîne de caractères, ou un tableau de chaînes de caractères (le type exact dépend du filtre).</li>
  </ul>
  <h3 id="appcache_path"><code>appcache_path</code></h3>
  <p>(facultatif) Le chemin absolu vers le manifeste de cache de l'application (<a href="/en-US/docs/HTML/Using_the_application_cache">AppCache</a>). Quand une <em>Open Web App</em> est installée, le manifeste AppCache est récupéré et interprété, et les éléments statiques sous l'en-tête <code>CACHE</code> sont mis en cache.</p>
  <pre class="brush: js">
"appcache_path": "/cache.manifest"</pre>
  <h3 id="csp"><code>csp</code></h3>
  <p>(facultatif) Précise une <a href="/en-US/docs/Security/CSP" title="/en-US/docs/Security/CSP">Politique de sécurité</a> (<em>Content Security Policy</em>) pour l'application. Cette politique s'applique à toutes les pages chargées via l'application. La syntaxe CSP est décrite sur la page <a href="https://wiki.mozilla.org/Security/CSP/Specification">https://wiki.mozilla.org/Security/CSP/Specification</a>.</p>
  <p>Notez bien que pour les <a href="/en-US/docs/Apps/Packaged_apps">applications certifiées et privilégiées</a> une CSP par défaut s'applique toujours, même si vous n'utilisez pas cette propriété. Pour ces applications, si vous précisez une politique de CSP en utilisant cette propriété, les deux politiques seront fusionnées, ce qui signifie que toute action devra être autorisée à la fois par les deux politiques (par défaut et celle que vous aurez précisée dans cette propriété).</p>
  <p>Les CSP par défaut pour les applications privilégiées et certifiées sont :</p>
  <dl>
    <dt>
      Privilégiée</dt>
    <dd>
      <pre>
"default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"</pre>
    </dd>
    <dt>
      Certifiée</dt>
    <dd>
      <pre>
"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"</pre>
    </dd>
  </dl>
  <h3 id="default_locale"><code>default_locale</code></h3>
  <p>(requis quand <code>locales</code> est présent) Un identifiant de langue (<a href="http://www.ietf.org/rfc/rfc4646.txt" title="http://www.ietf.org/rfc/rfc4646.txt">RFC 4646</a>) qui indique quel langage le manifeste utilise. Ne pas inclure dans le champ <code>locales</code>, l'identifiant de langue utilisé dans cette propriété. Il est préférable de toujours définir <code>default_locale</code>, même si vous n'utilisez pas <code>locales</code>. Le Firefox Marketplace l'utilisera pour savoir dans quel langue est votre manifeste, et ainsi utiliser les bonnes valeurs dans les champs traduits. Si vous ne définissez pas de <code>default_locale</code>, le Marketplace devra deviner la langue. <code>default_locale</code> n'est pas utilisé par l'appareil qui installe l'application.</p>
  <p>Exemple pour le français :</p>
  <pre class="brush: js">
&nbsp;"default_locale": "fr"​</pre>
  <h3 id="description"><code>description</code></h3>
  <p>(requis) Une description de l'application (longueur maximum de 1024 caractères).</p>
  <h3 id="developer"><code>developer</code></h3>
  <p>(facultatif)</p>
  <p>Informations sur le développeur de l'application. Possède ces propriétés :</p>
  <ul>
    <li><strong><code>name</code></strong> - Le nom du développeur</li>
    <li><strong><code>url</code></strong> - L'URL d'un site contenant plus d'informations sur le développeur de l'application. Cette URL est habituellement chargée quand l'utilisateur clique sur le nom du développeur, en regardant le détail de l'application depuis son tableau de bord (<em>dashboard</em>), ou son navigateur.</li>
  </ul>
  <h3 id="fullscreen"><code>fullscreen</code></h3>
  <p>(Firefox OS seulement, facultatif)</p>
  <p>Définir à <code>true</code> ou <code>false</code> pour indique à l’exécutable si l'application doit être lancé en plein-écran. Exemple :</p>
  <pre class="brush: js">
"fullscreen": "true"</pre>
  <h3 id="icons"><code>icons</code></h3>
  <p>(facultatif) Un objet contenant les tailles d'icône avec les URIs pour chaque icône correspondante (peut être un <a href="/fr/docs/Applications/Manifeste#Gestion_des_chemins" title="/fr/docs/Applications/Manifeste#Gestion_des_chemins">chemin absolu</a>, relatif ou des <code>data URIs</code>). Les icônes doivent être carrées et pensées pour représenter l'application web. Les chemins commençant par / sont traités comme des chemins relatifs depuis la racine de l'application.</p>
  <p>Pour Windows 7 et Android, les tailles d'icônes suivantes sont supportées :</p>
  <ul>
    <li>16 × 16</li>
    <li>32 × 32</li>
    <li>48 × 48</li>
    <li>64 × 64</li>
    <li>128 × 128</li>
    <li>256 × 256</li>
  </ul>
  <p>Pour Firefox OS, les icônes ne doivent pas projeter d'ombre et doivent remplir toute la surface de l'icône, dans les tailles suivantes :</p>
  <ul>
    <li>30 × 30</li>
    <li>60 × 60</li>
  </ul>
  <p>Vous pouvez lire les <a href="http://www.mozilla.org/en-US/styleguide/products/firefoxos/icons/" title="http://www.mozilla.org/en-US/styleguide/products/firefoxos/icons/">recommandations sur le design d'icônes</a> pour Firefox OS.</p>
  <div class="note">
    <p><strong>Note :</strong> Firefox Marketplace requiert que toutes les applications soumises aient au minimum une icône dont les dimensions sont au moins de 128 × 128.</p>
  </div>
  <p>Vous pouvez renseigner plusieurs icônes en suivant cet exemple :</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>(facultatif) Un tableau des origines (schéma + domaine, par exemple <code>https://marketplace.exemple.com</code>) qui sont autorisés à déclencher l'installation de l'application. Ce champ vous permet de n'autoriser l'installation que pour certains sites ou boutiques, avec lesquels vous avez des partenariats. Le tableau <code>["*"]</code> indique que l'installation de l'application est autorisée depuis n'importe quel site. Il s'agit de la valeur par défaut. Notez que <code>[]</code> désactiverait l'installation depuis tout site, le votre inclus. Voici un exemple autorisant l'installation depuis n'importe quel site :</p>
  <pre class="brush: js">
"installs_allowed_from": ["*"]</pre>
  <div class="note">
    <p><strong>Note :</strong> Ne mettez pas de / à la fin des URLs dans ce tableau. Par exemple, cette valeur n'est pas bonne : <code>https:/marketplace.example.com/</code>. Si vous mettez un / à la fin, l'installation échouera.&nbsp; Il y a un bug à ce sujet <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=755044">ici</a>.</p>
  </div>
  <div class="note">
    <p><strong>Note :</strong> Si une des URLs est le Firefox Marketplace, vous devez utiliser <code>https://marketplace.firefox.com</code>. Une autre URL était précédemment utilisée pour le Marketplace mais elle a changé le <time datetime="2012-11-15">15 novembre 2012</time>. L'URL précédente était <code>https://marketplace.mozilla.org</code>, et ne fonctionne plus. Si votre application utilise l'URL précédente, il vous faut la changer.</p>
  </div>
  <h3 id="launch_path"><code>launch_path</code></h3>
  <p>(facultatif, requis pour les applications empaquetées) Le chemin chargé quand l'application démarre. Si il n'est pas fourni, l'origine de l'application sera pris en compte. Voir <a href="/fr/docs/Applications/Manifeste#Gestion_des_chemins" title="/fr/docs/Applications/Manifeste#Gestion_des_chemins">Gestion des chemins</a>.</p>
  <p>Dans une <a href="/en-US/docs/Apps/Packaged_apps" title="/en-US/docs/Apps/Packaged_apps">application empaquetée</a> (<em>packaged app</em>), ce champ spécifie le point de départ du contenu local du fichier zip contenant l'application. Par exemple, si <code>launch_path</code> a pour valeur <code>/monApp/index.html</code>, alors l'application empaquetée sera lancée en ouvrant le fichier <code>/monApp/index.html</code>.</p>
  <h3 id="locales"><code>locales</code></h3>
  <p>(facultatif) Un objet de surcharges des données contenues dans le manifeste, pour chaque langue définie. L'interface (<em>UI</em>) utilisera ces informations pour traduire les écrans en fonctions des paramètres de l'appareil. Par exemple, si des personnes parlant italiens installent votre application, vous souhaiterez sûrement afficher les textes de l'interface en Italien. Chaque entrée pour une langue est définie par un identifiant de langue (<a href="http://www.ietf.org/rfc/rfc4646.txt" title="http://www.ietf.org/rfc/rfc4646.txt">RFC 4646</a>) et contient une représentation simplifiée du manifeste. Tout champ présent dans la propriété <code>locales</code> écrase le champ correspondant dans le manifeste. Vous ne pouvez pas écraser les champs :&nbsp;<code>default_locale</code>, <code>locales</code>, et <code>installs_allowed_from</code>. Un manifeste qui écrase n'importe lequel de ces champs est non valide. Quand <code>locales</code> est présent, <code>default_locale </code>doit l'être aussi</p>
  <p>Exemple avec l'Espagnol et l'Italien :</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="name"><code>name</code></h3>
  <p>(requis) Le nom de l'application (longueur maximum de 128 caractères).</p>
  <h3 id="orientation"><code>orientation</code></h3>
  <p>(Android et Firefox OS seulement, facultatif) Un tableau définissant les orientations dans lesquelles l'application doit rester verrouiller, même si l'orientation de l'appareil change. Chaque entrée dans le tableau peut être un des éléments de cette liste : <code>portrait</code>, <code>landscape</code>, <code>portrait-primary</code>, <code>landscape-primary</code>, <code>portrait-secondary</code> ou <code>landscape-secondary</code>. Les options avec <code>primary</code> ou <code>secondary</code> verrouillent l'orientation dans une seule orientation de l'appareil, mais si cette orientation change. Les options sans <code>primary</code> et <code>secondary</code> combinent les règles avec <code>primary</code> et <code>secondary</code>. Les options suffixées par <code>-secondary </code>implique une orientation à 180 degrés par rapport à l'option sans suffixe. Par exemple, tenir le téléphone la tête en bas (mais toujours de façon à ce que la largeur soit inférieure à la hauteur), implique l'orientation <code>portrait-secondary</code>. Si ce champ a une valeur valide, l’exécutable ne changera pas l'orientation de la vue rendant l'application même si l'appareil est tourné. Exemple :</p>
  <pre class="brush: js">
"orientation": ["portrait","landscape-secondary"]</pre>
  <h3 id="permissions"><code>permissions</code></h3>
  <p>(facultatif) L'ensemble des permissions dont l'application a besoin. Une application doit lister toutes les API qu'elles comptent utiliser qui nécessitent l'autorisation de l'utilisateur. Si une application essaye d'utiliser une de ces APIs sans avoir l'entrée correspondante dans ce champ, elle échouera.</p>
  <div class="note">
    <p><strong>Note :</strong> La plupart de ces permissions ne prennent sens que dans le cas d'<a href="/en-US/docs/Apps/Packaged_apps" title="/en-US/docs/Apps/Packaged_apps">applications privilégiées ou certifiées</a>, et non pour des applications hébergées.</p>
  </div>
  <p>Le champ <code>permissions</code> est un objet, chaque propriété indiquant une seule permission. Chaque entrée d'API doit avoir une propriété <code>description</code>. Certaines APIs nécessitent aussi une propriété <code>access</code>. Exemple du champ <code>permissions</code> :</p>
  <pre class="brush: js">
"permissions": {
  "contacts": {
    "description": "Nécessaire pour l'aide à la saisie dans l'écran de partage",
    "access": "readcreate"
  },
  "alarms": {
    "description": "Nécessaire pour programmer des notifications"
  }
}</pre>
  <ul>
    <li><strong><code>description</code></strong> - Une chaîne indiquant l'intention derrière la demande pour utiliser cette API. Ce champ est obligatoire.</li>
    <li><strong><code>access</code></strong> - Une chaîne de caractères indiquant le type d'accès requis pour la permission. Cette propriété n'est nécessaire que pour un petit nombre d'APIs. Les valeurs possibles sont <code>read</code>, <code>readwrite</code>, <code>readcreate</code>, et <code>createonly</code>.</li>
  </ul>
  <p>Les APIs de permissions sont listées ci-dessous. Si une API requiert une propriété <code>access</code>, c'est précisé. Pour plus d'informations sur où ces permissions sont pris en charge, voir <a href="/en-US/docs/Apps/App_permissions" title="/en-US/docs/Apps/App_permissions">Permissions d'application</a>.</p>
  <ul>
    <li><strong><code>alarms</code></strong> - Programmer une notification, ou programmer le démarrage d'une application.</li>
    <li><strong><code>browser</code></strong> - Permettre d'implémenter un navigateur.</li>
    <li><strong><code>contacts</code></strong> - Ajouter, lire ou modifier des contacts depuis le carnet d'adresses sur l'appareil et lire les contacts depuis la carte SIM. <strong>Propriété <code>access</code> requise</strong> : une valeur parmi <code>readonly</code>, <code>readwrite</code>, <code>readcreate</code>, ou <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> - Ajouter, lire ou modifier des fichiers stockés sur l'appareil. <strong>Propriété <code>access</code> requise</strong> : une valeur parmi <code>readonly</code>, <code>readwrite</code>, <code>readcreate</code>, ou <code>createonly</code>.</li>
    <li><strong><code>fmradio</code></strong> - Contrôller la radio FM.</li>
    <li><strong><code>geolocation</code></strong> - Obtenir la position actuelle de l'utilisateur.</li>
    <li><strong><code>storage</code></strong> - Utiliser <code>localStorage</code> ou <code>IndexedDB</code> sans restriction de taille.</li>
    <li><strong><code>network-http</code></strong> - Créer des requêtes HTTP sans aucune restriction sur l'origine.</li>
    <li><strong><code>network-tcp</code></strong> - Créer et communiquer par des sockets TCP.</li>
    <li><strong><code>wake-lock-screen</code></strong> - Allumer l'affichage et montrer l'écran de verrouillage.</li>
    <li><strong><code>wifi-manage</code></strong> - Énumérer les réseaux Wifi disponibles, obtenir la force du signal, connecter à un réseau.</li>
  </ul>
  <p>Il y a d'autres propriétés qui ne sont accessibles que pour les <a href="/en-US/docs/Apps/Packaged_apps#Types_of_packaged_apps" title="/en-US/docs/Apps/Packaged_apps#Types_of_packaged_apps">applications certifiées</a> :</p>
  <ul>
    <li><strong><code>backgroundservice</code></strong> - Permettre à une application web de tourner en tâche de fond et de réaliser des tâches comme de la synchronisation ou répondre à des messages entrants.</li>
    <li><strong><code>bluetooth</code></strong> - Accès bas niveau au matériel Bluetooth.</li>
    <li><strong><code>camera</code></strong> - Prendre des photos, filmer des vidéos et contrôler l'appareil photo. La raison pour que cette API ne soit limitée qu'aux applications certifiées, est que le bac à sable (<em>sandbox</em>) pour les applications, empêche l'accès au matériel de la camera. Notre but est de la rendre accessible aux applications tierces dès que possible, mais nous n'aurons pas le temps de le faire pour la sortie initiale.</li>
    <li><strong><code>desktop-notification</code></strong> - Afficher une notification sur le bureau de l'utilisateur.</li>
    <li><strong><code>mobileconnection</code></strong> - Obtenir des informations sur les connections mobiles actuelles Voix et Data.</li>
    <li><strong><code>power</code></strong> - Allumer ou éteindre l'affichage, contrôler le CPU, l'alimentation de l'appareil, et ainsi de suite. Écouter et inspecter des évènements de verrouillage de ressource.</li>
    <li><strong><code>settings</code></strong> - Configurer et lire les paramètres de l'appareil. <strong>Propriété <code>access</code> requise</strong> : une valeur parmi <code>readonly</code> ou <code>readwrite</code>.</li>
    <li><strong><code>sms</code></strong> - Envoyer et recevoir des SMS.</li>
    <li><strong><code>systemclock</code></strong> - Définir l'heure actuelle. (Le fuseau horaire est contrôlé par l'API <code>settings</code>).</li>
    <li><strong><code>telephony</code></strong> - Accéder à toutes les APIs téléphone.</li>
    <li><strong><code>webapps-manage</code></strong> - Obtenir accès à l'API <a href="/en-US/docs/Apps/Apps_JavaScript_API#Management_API"><code>navigator.mozApps.mgmt</code></a> qui gère les <em>Open Web Apps</em> installées.</li>
  </ul>
  <h3 id="type"><code>type</code></h3>
  <p>(facultatif) Le type de l'application, peut être <code>web</code>, <code>privileged</code>, ou <code>certified.</code> Ces types sont décrits ci-dessous.</p>
  <ul>
    <li><strong><code>web</code></strong> - Une application normale. Les permissions sont limitées à celles contenues dans la première liste de permissions de cette page. Si vous ne remplissez pas de champ <code>type</code> dans le manifeste, <code>web</code> sera la valeur par défaut.</li>
    <li><strong><code>privileged</code></strong> - Une <em>Open Web App</em> authentifiée qui a été approuvée par une boutique d'applications telle que le Firefox Marketplace. Certaines APIs de sécurité ou d'accès à des informations privées, ne sont accessibles que pour les applications privilégiées, ceci afin d'augmenter la sécurité de l'utilisateur. Il s'agit d'une <a href="/en-US/docs/Apps/Packaged_apps" title="/en-US/docs/Apps/Packaged_apps">application empaquetée</a> (toutes les ressources sont contenues dans un seul fichier zip) qui a les caractéristiques suivantes :
      <ul>
        <li>Approuvée par une boutique d'applications après une vérification du code.</li>
        <li>Possède un manifeste d'application signé par la boutique d'applications</li>
        <li>Utilise une <a href="/en-US/docs/Security/CSP" title="/en-US/docs/Security/CSP">politique de sécurité pour les contenus</a> (<em>Content Security Policy</em>).</li>
        <li>Implémente d'autres choses reliées à la sécurité. Pour plus d'informations, voir <a href="https://wiki.mozilla.org/Apps/Security" title="https://wiki.mozilla.org/Apps/Security">Sécurité</a>.</li>
      </ul>
    </li>
    <li><strong><code>certified</code></strong> - Une <em>Open Web App</em> qui a été conçue afin d'assurer une fonctionnalité critique du système comme un téléphone ou une application des paramètres systèmes sur un smartphone. Ce type n'est pas prévu pour les applications tierces dans une boutique d'applications. Une application certifiée est une application empaquetée, similaire à une application privilégiée, sauf que toutes les permissions de l'appareil sont implicites. Elle doit être approuvée par le fabricant ou l'opérateur téléphonique de l'appareil qui l'utilise.</li>
  </ul>
  <p>Exemple:</p>
  <pre class="brush: js">
"type": "privileged"</pre>
  <h3 id="version"><code>version</code></h3>
  <p>(facultatif) Une chaîne de caractères représentant la version du manifeste. L’exécutable web n'utilise pas du tout cette valeur, elle est donc libre. Vous pouvez ajouter cette propriété dans le manifeste et récupérer sa valeur pour vous aider à gérer différents cas de mise à jour. Voir <a href="/fr/docs/Applications/Manifeste#Mettre_.C3.A0_jour_des_manifestes" title="/fr/docs/Applications/Manifeste#Mettre_.C3.A0_jour_des_manifestes">Mettre à jour les manifestes</a>.</p>
  <h2 id="Gestion_des_chemins">Gestion des chemins</h2>
  <p>Tout champ dans le manifeste qui contient des chemins, doit avoir des chemins absolus (par exemple, <code>/images/mon-icone.png</code>), et les chemins doivent être servis depuis la même origine que l'application.</p>
  <p>De plus, il y a deux façons de définir <code>launch_path</code> :</p>
  <ul>
    <li>Si votre application est stockée à la racine d'un serveur web, par exemple <code>mywebapp.github.com/</code>, alors <code>launch_path</code> doit être défini à <code>/</code>.</li>
    <li>Si votre application est stockée dans un sous-repertoire, par exemple <code>mymarket.github.com/mywebapp/</code>, alors <code>launch_path</code> doit être défini à <code>/mywebapp/.</code></li>
  </ul>
  <h2 id="Valider_un_manifeste">Valider un manifeste</h2>
  <p>Pour valider un manifeste, utilisez ce site web :</p>
  <p><a href="https://marketplace.firefox.com/developers/validator" title="https://marketplace.firefox.com/developers/validator">https://marketplace.firefox.com/developers/validator</a></p>
  <p>Vous pouvez aussi utiliser une API pour valider votre manifeste :</p>
  <p><a href="http://zamboni.readthedocs.org/en/latest/topics/api.html#validate" title="http://zamboni.readthedocs.org/en/latest/topics/api.html#validate">http://zamboni.readthedocs.org/en/latest/topics/api.html#validate</a></p>
  <h2 id="Servir_les_manifestes">Servir les manifestes</h2>
  <p>Le manifeste de l'application doit être servi depuis la même origine que l'application.</p>
  Quand servi comme un fichier statique, il est recommandé que le manifeste soit stocké avec une extension de fichier <code>.webapp</code>. Les manifestes d'applications doivent être servis avec une entête <code>Content-Type</code> : <code>application/x-web-app-manifest+json</code> (<strong>Note</strong> : Ce n'est pas actuellement forcé par Firefox mais l'est par le Marketplace). Les manifestes peuvent être servis par SSL pour limiter certains types d’attaques.<br />
  <p>Le document doit être en UTF-8 pour que l'application soit soumis au Firefox Marketplace. Il est recommandé d’omettre le <em>byte order mark</em> (BOM). D'autres encodages de caractères peuvent être renseignés avec un paramètre <code>charset</code> sur l'entête <code>Content-Type</code> (par exemple <code>Content-Type: application/x-web-app-manifest+json; charset=ISO-8859-4</code>), mais ne sera pas pris en compte par le Marketplace.</p>
  <p>Les agents utilisateurs doivent, lorsque c'est possible, offrir un message compréhensible à l'utilisateur sur l'identité du site et le statut TLS, lors de l'installation d'une application.</p>
  <h5 id="Servir_depuis_Apache">Servir depuis Apache</h5>
  <p>Dans votre fichier <code>.htaccess</code>, vous devez ajouter la ligne suivante :</p>
  <pre>
AddType application/x-web-app-manifest+json .webapp</pre>
  <div class="note">
    <strong>Note :</strong> Ce bout de code part du principe que vous utilisez l'extension <code>.web-app</code>. Si vous utilisez <code>.json</code> ou une autre extension, il vous faudra modifier cette ligne en conséquence.</div>
  <p>Si vous n'avez pas de fichier <code>.htaccess</code>, créez-le dans le répertoire racine de votre serveur. Si cela ne marche pas, votre hébergeur peut attendre que vous ajoutiez aussi la ligne :</p>
  <p><code>AddHandler x-web-app-manifest+json .webapp</code>.</p>
  <h5 id="Servir_depuis_NGINX">Servir depuis NGINX</h5>
  <p>You need to edit your <code>mime.types</code> file in the conf directory. This will probably be located in either <code>/etc/nginx/</code> or <code>/opt/nginx/</code>.</p>
  <p>You should have something similar to below. Add the last line.</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>Note:</strong> This assumes you're using <code>.webapp</code> as an extension. If you are using <code>.json</code> or another extension, you will have to update the code to reflect that.</div>
  <h5 id="Serving_from_GitHub">Serving from GitHub</h5>
  <p>If you serve your manifest file from <a class="external" href="http://pages.github.com/">GitHub Pages</a>, GitHub will serve it with the <code>Content-Type</code> header of <code>application/x-web-app-manifest+json</code>. You must use the <code>.webapp</code> file extension on your manifest file. Example: <code>manifest.webapp</code>.</p>
  <h5 id="Serving_from_Python">Serving from Python</h5>
  <p>If you have python installed, you can easily run a server from the local directory, by running python and pasting the same:</p>
  <pre>
import SimpleHTTPServer
import SocketServer
SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map['.webapp'] = 'application/x-web-app-manifest+json'
httpd = SocketServer.TCPServer(("", 3000), <span class="n">SimpleHTTPServer</span><span class="o">.</span><span class="n">SimpleHTTPRequestHandler</span>)
httpd.serve_forever()
</pre>
  <h2 id="Mettre_.C3.A0_jour_des_manifestes">Mettre à jour des manifestes</h2>
  <p>An app respects the normal rules for Web caching, and may optionally use advanced mechanisms for improved start-up, like the <a href="/en-US/docs/HTML/Using_the_application_cache">HTML5 AppCache</a>. Given this, there are no special considerations for updating the normal resources that an app uses.</p>
  <p>Open Web Apps are different, however, in the handling of the manifest. Some changes to a manifest may require user approval. Depending on the implementation of the Web runtime, it may be unclear whether an update has occurred.</p>
  <p>As a clean way to deal with this issue, you can provide a <code>version</code> field in the app manifest. You can later check the version by inspecting the return value of the <a href="/en-US/docs/DOM/Apps.getInstalled"><code>navigator.mozApps.getInstalled()</code></a> function. If the user's installed version is not up-to-date, you can trigger an update using <a href="/en-US/docs/DOM/Apps.install"><code>navigator.mozApps.install()</code></a>.</p>
  <p>The value of <code>version</code> is not used by the Web runtime, so you can use whatever versioning scheme you want.</p>
</div>
<p>Also note that changes to a manifest that introduce errors or other breakage will be detected if the manifest has been submitted to Firefox Marketplace. Serious errors will cause the app's listing to be disabled. Less serious errors may automatically flag the app for re-review.</p>
Revenir à cette révision