Every pitfall below appeared in this section's runs or follows directly from them.
| Symptom | Cause | Fix |
|---|---|---|
| canOpenURL('mailto:...') is false | Android 11 package visibility | Declare <queries>, or just openURL() |
| Deep link opens the wrong screen | Custom scheme puts book in hostname | Combine hostname and path |
| App Link opens the browser | Domain not verified | Serve assetlinks.json with the right fingerprint |
| Share reported as done | Android always returns sharedAction | Never trust the result on Android |
| Shared link is missing | Android ignores url | Put the link in message |
| Destructive button looks normal | Android ignores Alert style | Say it in the title and label |
| Listeners pile up | No cleanup in useEffect | Call remove() on each subscription |
| Drag lags under load | PanResponder runs in JavaScript | Gesture Handler 6,788 (Reanimated and Gesture Handler) |
Test every link both on a cold start and while the app runs, since getInitialURL() and the url event are separate paths, and test Alert, Share, Vibration and the clipboard on both platforms.