Appy

Outil gratuit

Générateur AASA et assetlinks.json

Créez le fichier apple-app-site-association pour les Universal Links iOS et le fichier assetlinks.json pour les App Links Android. Saisissez les informations de votre app, puis copiez ou téléchargez un fichier prêt à mettre en ligne.

  • Gratuit, sans compte
  • Fonctionne dans votre navigateur
  • Format components actuel d’Apple

Vous avez déjà les fichiers ? Vérifiez-les avec le validateur

Apps

Ajoutez chaque app qui doit ouvrir les liens de ce domaine. Chacune devient une entrée de appIDs.

  1. App 1

    10 caractères, dans votre compte Apple Developer, sous Membership details.

    Dans la cible de votre app sous Xcode, par exemple com.example.app.

Chemins qui ouvrent l’app

Les règles sont lues de haut en bas et la première qui correspond l’emporte : placez donc les exclusions au-dessus des règles plus larges. * correspond à n’importe quel nombre de caractères, ? à un seul.

  1. Règle 1

    paires nom=valeur reliées par &

Autres services

Votre fichier

apple-app-site-association

Exemple. Saisissez vos informations pour le remplacer.

{
  "applinks": {
    "details": [
      {
        "appIDs": [
          "ABCDE12345.com.example.app"
        ],
        "components": [
          {
            "/": "/*"
          }
        ]
      }
    ]
  }
}

Généré dans votre navigateur. Rien n’est envoyé nulle part.

Où l’héberger

  1. Déposez-le à l’adresse https://votre-domaine/.well-known/apple-app-site-association, sans extension .json.
  2. Servez-le en HTTPS avec un certificat valide et un 200 direct, sans redirection.
  3. Envoyez l’en-tête Content-Type: application/json.
  4. Répétez l’opération sur chaque host de vos liens : example.com et www.example.com ont chacun besoin du fichier et d’une entrée applinks:.
  5. Le CDN d’Apple récupère un nouveau fichier sous 24 heures. En attendant, testez avec ?mode=developer.
Vérifier un domaine avec le validateur

Vous préférez ne pas héberger ces fichiers ? Les smart links sont gratuits, et avec Enterprise Appy sert les deux fichiers sur le domaine de liens de votre app.

Créer un lien gratuit

Comment tout s’articule

Deux fichiers, une vérification croisée

Les Universal Links et les App Links n’ouvrent votre app que si chaque côté se porte garant de l’autre. L’app cite le domaine, et un fichier sur ce domaine cite l’app. S’il manque une moitié, le lien ouvre votre site.

App iOS

Entitlement Associated Domains

applinks:example.com

Votre domaine

example.com/.well-known/

  • apple-app-site-association

    Indique l’app ID : Team ID plus bundle ID

    ABCDE12345.com.example.app
  • assetlinks.json

    Indique le nom du package et l’empreinte SHA-256

    com.example.app · 14:6D:E9:…

App Android

Intent filter avec autoVerify

android:autoVerify="true"android:host="example.com"

Les deux moitiés correspondent : le lien ouvre l’app

Il manque quelque chose : le lien ouvre votre site

iOS récupère le fichier via le CDN d’Apple à l’installation de l’app, puis vérifie les mises à jour environ une fois par semaine. Android vérifie à l’installation. Aucun des deux ne consulte votre domaine au moment du toucher.

Champ par champ

Ce que signifie chaque clé des fichiers

Les deux fichiers sont du JSON tout simple. Voici les clés écrites par le générateur, plus les clés facultatives à connaître.

apple-app-site-association

applinks
Le service Universal Links. Tout ce qui décide quelle URL ouvre quelle app se trouve à l’intérieur.
details
Un tableau d’entrées qui associent chacune un groupe d’apps à un groupe de règles d’URL. Utilisez-en plusieurs si des apps différentes gèrent des chemins différents.
appIDs
Des app IDs au format <Team ID>.<bundle ID>, par exemple ABCDE12345.com.example.app. Chaque app doit aussi déclarer le domaine dans son entitlement Associated Domains.
components
Les règles d’URL, lues dans l’ordre. La première qui correspond décide si l’app s’ouvre.
/
Un motif pour le chemin de l’URL, comme /products/*. Sans lui, tous les chemins correspondent.
?
Les paramètres de requête à faire correspondre, sous forme de dictionnaire. {"ref": "?*"} exige un paramètre ref non vide.
#
Un motif pour le fragment placé après #.
exclude
À mettre sur true pour garder les URL concernées sur le site. Placez ces règles au-dessus des règles plus larges.
comment
Une note pour les personnes qui lisent le fichier. iOS l’ignore.
webcredentials
Facultatif. Liste les apps qui peuvent utiliser, via le remplissage automatique, les mots de passe enregistrés pour ce site.
appclips
Facultatif. Liste les App Clips que ce domaine peut lancer.

* correspond à n’importe quel nombre de caractères, ? à un seul et ?* à au moins un. La correspondance respecte la casse, sauf si vous ajoutez "caseSensitive": false.

assetlinks.json

[ ]
Le fichier est un tableau JSON de déclarations, même s’il n’en contient qu’une.
relation
delegate_permission/common.handle_all_urls autorise l’app à ouvrir les liens de ce site. delegate_permission/common.get_login_creds ajoute le partage des identifiants.
target
L’app concernée par la déclaration.
namespace
Toujours android_app pour une app Android.
package_name
L’applicationId de l’app, par exemple com.example.app.
sha256_cert_fingerprints
Les empreintes SHA-256 des certificats qui signent l’app, en paires majuscules séparées par des deux-points. Listez chaque clé qui signe des builds installés par vos utilisateurs.
relation_extensions
Facultatif, Android 15 et versions ultérieures. Son dynamic_app_link_components ajoute des règles de chemin dans l’esprit des components d’Apple. Les versions plus anciennes l’ignorent.

L’ancien format paths

Avant iOS 13, chaque entrée avait un seul appID, un tableau paths avec NOT devant les exclusions, et le fichier exigeait un tableau apps vide. iOS 13 et les versions suivantes lisent appIDs et components. Le générateur n’écrit que le format moderne. Si vous prenez encore en charge iOS 12, ajoutez les anciennes clés dans la même entrée.

Ancien, iOS 12 et antérieur
{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "ABCDE12345.com.example.app",
      "paths": ["NOT /help/website/*", "/buy/*"]
    }]
  }
}
Moderne, iOS 13 et ultérieur
{
  "applinks": {
    "details": [{
      "appIDs": ["ABCDE12345.com.example.app"],
      "components": [
        {"/": "/help/website/*", "exclude": true},
        {"/": "/buy/*"}
      ]
    }]
  }
}

Erreurs fréquentes

Pourquoi un fichier qui semble correct échoue quand même

Le JSON peut être valide et les liens ouvrir quand même le site. Vérifiez ces sept points avant toute autre chose.

  1. 01iOS

    Mauvais préfixe de Team ID

    Le fichier se charge, mais iOS n’ouvre jamais l’app.

    Correctif

    Utilisez le Team ID du compte qui signe la version publiée, indiqué sous Membership details. Pas l’identifiant numérique App Store, pas un Key ID, ni l’équipe d’une agence si l’app est publiée depuis votre compte.

    Guide complet des Universal Links pour iOS et Android
  2. 02Android

    Clé d’importation au lieu de la clé de signature Play

    Vos propres builds ouvrent l’app, les installations depuis Google Play ouvrent le navigateur.

    Correctif

    Google signe les apps qu’il distribue avec la clé de signature d’application. Copiez son SHA-256 dans la Play Console, sous Intégrité de l’application, et ne gardez la clé d’importation dans la liste que si vous partagez des builds signés avec elle.

    App Links Android non vérifiés : le diagnostic en cinq minutes avec adb
  3. 03iOS + Android

    Le fichier se trouve derrière une redirection

    L’URL s’ouvre bien dans un navigateur, mais la vérification échoue.

    Correctif

    Apple et Android attendent un 200 à l’URL exacte. Excluez /.well-known/ des redirections du domaine nu vers www, de www vers le domaine nu et par langue.

    Universal Links ouvrent Safari ? Corrigez AASA, App Links, redirections et headers
  4. 04iOS + Android

    Mauvais content type, ou du HTML au lieu du JSON

    Le fichier est bien là, mais la plateforme l’ignore.

    Correctif

    Servez les deux fichiers en application/json. Les serveurs envoient souvent le fichier AASA, sans extension, en application/octet-stream, et certains hébergeurs répondent par une page de connexion ou un contrôle anti-robots.

    Universal Links ouvrent Safari ? Corrigez AASA, App Links, redirections et headers
  5. 05iOS + Android

    Oublier le host www

    Les liens vers example.com ouvrent l’app, ceux vers www.example.com ouvrent le site.

    Correctif

    Chaque host est vérifié séparément. Déposez le fichier sur les deux, déclarez les deux dans Associated Domains et dans vos intent filters Android.

    Guide complet des Universal Links pour iOS et Android
  6. 06iOS

    Une exclusion sous une règle fourre-tout

    Des pages que vous vouliez garder sur le site ouvrent l’app.

    Correctif

    La première règle qui correspond l’emporte. Remontez les règles exclude au-dessus de /*, comme le fait l’exemple Appy du générateur.

  7. 07iOS

    Une extension .json ou le mauvais dossier

    Rien ne se trouve à l’adresse demandée par iOS.

    Correctif

    Le fichier s’appelle apple-app-site-association, sans extension, et se place dans /.well-known/. Le bouton de téléchargement ci-dessus utilise déjà ce nom.

Sans hébergement à gérer

Laissez Appy servir les deux fichiers

Avec Enterprise, votre app reçoit son propre domaine de liens, et Appy y héberge apple-app-site-association et assetlinks.json, générés à partir du Team ID, du bundle ID, du package et des empreintes que vous enregistrez. Les smart links eux-mêmes sont gratuits, et les deep links arrivent avec Pro.

  • Offre gratuite
  • Sans carte bancaire
  • Clics illimités sur toutes les offres
  • Vos liens continuent de marcher si vous résiliez

Questions fréquentes

Qu’est-ce qu’un fichier apple-app-site-association ?

Un fichier JSON placé sur votre domaine qui indique à iOS quelles apps peuvent ouvrir quelles URL en tant qu’Universal Links. Il se trouve à https://votre-domaine/.well-known/apple-app-site-association, n’a pas d’extension et liste les app IDs (Team ID plus bundle ID) avec les règles d’URL de chacun.

Qu’est-ce que assetlinks.json ?

Son équivalent Android, basé sur Digital Asset Links de Google. Il se trouve à https://votre-domaine/.well-known/assetlinks.json et indique le package et les empreintes du certificat de signature de l’app autorisée à ouvrir vos liens. Android le vérifie à l’installation de l’app, et ce n’est qu’alors qu’il traite vos liens comme des App Links vérifiés.

Où déposer les fichiers générés ?

Dans le dossier /.well-known/ à la racine de chaque host utilisé dans vos liens. Les deux fichiers doivent se charger en HTTPS avec un 200 direct, sans redirection, et avec le content type application/json. Sur un hébergement statique, une règle d’en-têtes est souvent nécessaire pour le fichier AASA, qui n’a pas d’extension.

Où trouver mon Team ID et mon bundle ID ?

Le Team ID figure dans votre compte Apple Developer, sous Membership details. Le bundle ID se trouve dans l’onglet General de la cible de votre app dans Xcode. Ensemble, ils forment l’app ID, par exemple ABCDE12345.com.example.app.

Comment obtenir l’empreinte SHA-256 pour assetlinks.json ?

Si Google Play signe votre app, ouvrez la Play Console, allez dans Intégrité de l’application et copiez le SHA-256 du certificat de la clé de signature. Pour les clés que vous détenez, lancez keytool -list -v -keystore my-release-key.keystore ou ./gradlew signingReport. Le générateur accepte la valeur avec ou sans deux-points.

Le fichier AASA doit-il utiliser paths ou components ?

Utilisez components. Apple l’a introduit avec iOS 13, et il gère les paramètres de requête, les fragments, les exclusions et les commentaires. L’ancien tableau paths n’est utile que si vous prenez encore en charge iOS 12 ou antérieur ; dans ce cas, mettez les deux dans la même entrée.

Un seul fichier peut-il couvrir plusieurs apps ?

Oui. Dans le fichier AASA, listez chaque app ID dans appIDs, ou ajoutez des entrées details distinctes si les apps gèrent des chemins différents. Dans assetlinks.json, ajoutez une déclaration par package dans le tableau. Le générateur gère plusieurs apps iOS ; pour un second package Android, copiez la déclaration et changez le nom du package et les empreintes.

Combien de temps faut-il pour que les changements arrivent sur les appareils ?

Selon Apple, son CDN récupère votre fichier AASA sous 24 heures, et les appareils vérifient les mises à jour environ une fois par semaine après l’installation. Android vérifie à l’installation de l’app ; sur un appareil de test, adb shell pm verify-app-links --re-verify com.example.app relance la vérification.

Dois-je signer le fichier AASA ?

Non. La signature avec votre certificat TLS n’était nécessaire que sous iOS 8. Depuis iOS 9, Apple attend un simple fichier JSON servi en HTTPS.

Ce que je saisis est-il envoyé à Appy ?

Non. Les fichiers sont générés par du code qui tourne dans votre navigateur, et rien de ce que vous saisissez n’est envoyé ni stocké. Le validateur fonctionne autrement : il récupère les fichiers sur votre domaine quand vous le lancez.