Any app can claim booknest://, and many apps will not treat it as a link. Android App Links and Apple's Universal Links use ordinary https URLs, which open your app only once the system has checked that you control the domain, and your website where the app is not installed.
On Android, an intent filter with autoVerify claims the URLs, and the domain must serve https://booknest.example.com/.well-known/assetlinks.json, a JSON array whose entry names the relation delegate_permission/common.handle_all_urls, the android_app namespace, the package name and the SHA-256 fingerprints of the signing certificates (from eas credentials or Play Console 1 's App Signing page). An android.intentFilters entry in BookNest's app.json became this after prebuild:
<intent-filter android:autoVerify="true" data-generated="true">
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="https" android:host="booknest.example.com" android:pathPrefix="/book"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>booknest.example.com serves no such file, which makes the verification visible:
adb shell pm verify-app-links --re-verify com.anonymous.booknest
adb shell pm get-app-links com.anonymous.booknest com.anonymous.booknest:
ID: b2a9c2bb-dccc-4d83-a356-580e714a370a
Signatures: [FA:C6:17:45:DC:09:03:78:6F:B9:ED:E6:2A:96:2B:39:9F:73:48:F0:BB:6F: ...
Domain verification state:
booknest.example.com: 1024States of 1024 and above are verifier error codes; verified is the goal. Until then, links open the browser (Handling App Links in BookNest). iOS (not run here) needs "associatedDomains": ["applinks:booknest.example.com"] under ios in app.json and a JSON file at /.well-known/apple-app-site-association, served over HTTPS without redirects, listing TEAM_ID.bundle.id and the paths. Apple's CDN, not the device, fetches that file, so changes can take time to reach users.