Files
GO-3.0/docs/ANDROID_APP_LINKS.md
simonandCursor 1e1111c90f Qortino AI QDN assembly, share-to-Quitter, categorized saves, File shim fixes
Safety snapshot of mobile work before merging upstream chat-v2:
- Qortino AI: QDN pack discovery/download (Q-Share ids), external app
  storage, install validation, teach/report Q-Mail, PDF thumbs+zoom
- Android share target "Quitter" with native ShareReceiver plugin
- Categorized device saves (Images/Videos/Audio/Documents/Apps/GO state)
- createNamedFile helper: cordova-plugin-file clobbers global File

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 12:47:44 +00:00

3.1 KiB

Android App Links — Qortal gateway https links

Qortal GO registers the Qortal QDN gateway hosts as Android App Links so that it:

  1. appears in the system Settings → Apps → Qortal GO → Open by default → "Opening links" list (alongside qortal:// and qort: custom-scheme links), and
  2. can auto-open verified https:// gateway links once each domain hosts a Digital Asset Links file for the app's signing certificate.

Any http(s) URL on a recognized gateway host is translated to the equivalent qortal:// deep link and routed through the exact same in-app pipeline used for native links (src/utils/paymentLink.tsgatewayHttpsToQortalLink()parsePaymentTarget()handleQortalDeepLink()):

https://qortal.link/WEBSITE/REON            ->  qortal://WEBSITE/REON            (opens in the apps view)
https://qortal.link/APP/Q-Tube/...          ->  qortal://APP/Q-Tube/...          (opens in the apps view)
https://hub.qortal.link/pay?recipient=Q..&amount=5  ->  qortal://pay?...         (opens the Send screen)

Rule: drop the scheme + gateway host, keep the remaining path + query + hash, prepend qortal://. Hosts are matched case-insensitively, a leading www. is ignored, and any *.qortal.link subdomain is treated as part of the gateway family.

Registered hosts

Declared in android/app/src/main/AndroidManifest.xml (VIEW / BROWSABLE intent filters, android:autoVerify="true" for https):

  • qortal.link, www.qortal.link
  • hub.qortal.link
  • go.qortal.link
  • ext-node.qortal.link

*.qortal.org hosts are intentionally not registered: they are API/core nodes whose paths are REST endpoints (not SERVICE/name render paths), so rewriting them to qortal:// would mis-route. Add a specific qortal.org gateway host to both the manifest and GATEWAY_HOSTS in paymentLink.ts if one is ever stood up.

App Links auto-open only after Android verifies the app owns the domain. Each gateway domain owner must serve this file (see docs/assetlinks.json) at:

https://<host>/.well-known/assetlinks.json

with Content-Type: application/json and reachable over plain HTTPS (no redirects, HTTP 200).

[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.github.Qortal.qortalGo2",
      "sha256_cert_fingerprints": [
        "DE:8E:72:35:7E:98:D2:55:5F:84:B6:D0:C9:4C:49:0B:CC:92:44:2A:32:29:02:F8:4A:AB:9E:54:D6:80:B7:E4"
      ]
    }
  }
]

Important: the SHA-256 above is the debug signing certificate. The published/release APK is signed with a different key, so the release fingerprint must be added to sha256_cert_fingerprints (you can list multiple). Get it with:

keytool -list -v -keystore <release.keystore> -alias <alias> | grep SHA256

Until each domain hosts a matching assetlinks.json, the app still appears in "Opening links" and the user can enable it manually (verified auto-open is the only part that needs the domain file).