Dans une vraie app
Avec Expo, ios.associatedDomains (["applinks:exemple.com"], sans protocole, l’erreur la plus fréquente) et android.intentFilters (avec autoVerify: true) dans app.json suffisent côté app ; EAS Build enregistre l’entitlement auprès d’Apple. Sans EAS ni prebuild, il faut activer la capability Associated Domains dans Xcode et l’entitlement com.apple.developer.associated-domains. Les empreintes Android s’obtiennent avec eas credentials -p android ou dans la Play Console (App Signing), et il en faut une par variante de signature : debug, release locale, Play App Signing.
Le piège iOS tient au cache : le système télécharge l’AASA à l’installation ou à la mise à jour de l’app, via le CDN d’Apple, et ne le rafraîchit pas souvent. Un changement de chemins en production demande donc une nouvelle version sur l’App Store, et un fichier AASA cassé le jour de la sortie reste cassé pour les utilisateurs qui ont installé ce jour-là. Le fichier doit faire moins de 128 ko décompressé et le joker * ne traverse ni les points ni les slashs. Sur Android, la vérification tourne après l’installation et peut prendre une vingtaine de secondes ; adb shell pm get-app-links <package> montre son état.
Je vérifie les deux fichiers avec curl -I (code 200, pas de redirection, bon content-type), que les chemins déclarés correspondent aux routes réelles d’Expo Router, et que la page web de repli existe pour chaque chemin, parce qu’un universal link sans page web est un lien mort pour tous ceux qui n’ont pas l’app.
Termes liés
Deep linking
Ouvrir un écran précis de l’app depuis une URL : schéma custom (monapp://) ou lien https vérifié (universal links, App Links).
Expo Router
Le routeur d’Expo basé sur les fichiers : chaque fichier du dossier app devient un écran, avec deep links et routes typées automatiques.
EAS Build
Le service de build hébergé d’Expo : des profils dans eas.json, la gestion des credentials, et des runners macOS et Linux pour iOS et Android.
Config plugin
Une fonction JavaScript déclarée dans app.json qui modifie les projets natifs générés par prebuild (Info.plist, manifest, Gradle, Podfile).