Dans une vraie app
Dans un projet Expo, le schéma custom se déclare avec scheme dans app.json, et prebuild l’injecte dans Info.plist (CFBundleURLTypes) et dans l’intent filter de AndroidManifest.xml. Sans prebuild, il faut faire ces deux ajouts à la main, plus le forwarding vers RCTLinkingManager dans AppDelegate sur iOS, ou dans SceneDelegate depuis React Native 0.88. Sur Android, android:launchMode="singleTask" sur MainActivity évite d’empiler une nouvelle instance de l’app à chaque lien.
Les bugs se concentrent sur le cas « app fermée » : l’URL initiale est lue une fois, souvent avant que la navigation soit montée, et un écran de splash ou d’authentification peut l’avaler. Il faut un point unique qui stocke l’URL en attente, puis navigue quand l’arbre est prêt. Avec Expo Router, ce comportement est géré ; avec React Navigation, linking.getInitialURL et subscribe sont les bons points d’accroche. Autre classique : canOpenURL qui renvoie toujours false sur iOS parce que le schéma interrogé n’est pas listé dans LSApplicationQueriesSchemes, et sur Android 11 et plus parce que les <queries> manquent dans le manifest.
Pour tester : npx uri-scheme open monapp://commande/42 --ios, ou xcrun simctl openurl booted et adb shell am start -W -a android.intent.action.VIEW -d. Je demande une matrice de test : lien custom et lien https, app fermée, en arrière-plan et au premier plan, sur les deux plateformes.
Termes liés
Universal links et App Links
Des liens https ordinaires qui ouvrent l’app quand elle est installée, prouvés par un fichier hébergé sur votre domaine (AASA, assetlinks.json).
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.
React Navigation
La librairie de navigation de référence de React Native : stack, tabs, drawer, avec des écrans natifs via react-native-screens.
OTA update (EAS Update)
Livrer un nouveau bundle JavaScript et ses assets aux apps déjà installées, sans passer par les stores ; EAS Update est le service d’Expo pour ça.