Files
NovaSonic/docs/share-links.md
T
marcandClaude Opus 5 5f1650b82a build(apk): Publish-Skript reicht den App-Link-Host an Gradle durch
Der Host steht fest im Manifest und muss beim Bauen mitgegeben werden. Das
Publish-Skript rief Gradle bisher ohne ihn auf, ein so veroeffentlichtes APK
haette also den Platzhalter aus build.gradle.kts getragen und geteilte Links
waeren im Browser gelandet statt in der App. NOVASONIC_HOST (und optional
NOVASONIC_HOST2) kommen aus scripts/.env.release; fehlt der Wert, warnt das
Skript deutlich, statt still das Falsche zu bauen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 12:25:14 +02:00

4.8 KiB

Teilen per Link

Ein geteilter Link sieht so aus:

https://<deine-web-adresse>/?song=<navidrome-song-id>
https://<deine-web-adresse>/?album=<navidrome-album-id>

Er trägt nur die Id, keine Zugangsdaten. Der Empfänger sieht den Inhalt mit seinem eigenen Navidrome-Konto auf derselben Instanz — wer dort keinen Zugang hat, sieht nichts.

Web

Funktioniert ohne weitere Einrichtung. Der Link wird beim Start ausgelesen (?song= / ?album=), das Album geöffnet und der Song abgespielt; danach verschwindet der Parameter aus der Adresszeile, damit ein Neuladen nicht erneut startet. Als installierte PWA landet der Link dank launch_handler: navigate-existing im bereits offenen Fenster statt in einem neuen.

Android

Zwei Dinge sind nötig, damit ein Link direkt in der App landet statt im Browser:

1. Web-Adresse in der App hinterlegen — Einstellungen → „NovaSonic Web-Adresse". Ohne sie erscheint der Teilen-Eintrag im Kontextmenü gar nicht erst, weil der Link sonst ins Leere zeigt.

2. Den Host beim Bauen mitgeben und die Signatur hinterlegen:

./gradlew assembleRelease -PnovasonicHost=music.example.com

Dann den SHA-256 des Release-Signaturschlüssels ermitteln …

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

… und in public/.well-known/assetlinks.json anstelle von PLATZHALTER_RELEASE_SHA256 eintragen. Die Datei muss unter https://<deine-web-adresse>/.well-known/assetlinks.json erreichbar sein — sie liegt im public/-Verzeichnis und wird vom Frontend-Image mit ausgeliefert.

APK veröffentlichen

npm run publish-apk gibt den Host jetzt an Gradle weiter. Dafür in scripts/.env.release ergänzen (die Datei wird nie eingecheckt):

NOVASONIC_HOST=music.deine-domain.de
# optional während eines Domainwechsels:
# NOVASONIC_HOST2=alt.deine-domain.de

Fehlt der Eintrag, warnt das Skript und baut mit dem Platzhalter weiter — das APK ist dann installierbar, aber eingehende Links öffnen im Browser statt in der App.

Domain wechseln

Ausgehende Links folgen der Einstellung „NovaSonic Web-Adresse" — Adresse ändern, fertig, kein neues APK nötig.

Eingehende Links stehen fest im Manifest und brauchen ein neues APK. Damit während des Umzugs beide Adressen funktionieren, lassen sich zwei Hosts angeben:

./gradlew assembleRelease -PnovasonicHost=neu.example.com -PnovasonicHost2=alt.example.com

Beide müssen eine gültige assetlinks.json ausliefern. Das ist keine Feinheit: auf Android 11 und älter verifiziert das System nur, wenn ALLE angegebenen Hosts eine passende Datei liefern — ein toter Host blockiert also auch den funktionierenden. Sobald die alte Domain abgeschaltet wird, das APK deshalb ohne novasonicHost2 neu bauen.

Ablauf eines Umzugs

  1. Neue Domain aufsetzen, Web-App und /.well-known/assetlinks.json dort erreichbar machen. Die alte Domain bleibt vorerst unverändert online.
  2. APK mit beiden Hosts bauen (-PnovasonicHost=neu -PnovasonicHost2=alt) und installieren. Ab jetzt öffnen Links beider Adressen in der App.
  3. In der App die „NovaSonic Web-Adresse" auf die neue Domain umstellen. Neu geteilte Links zeigen ab sofort dorthin, alte funktionieren weiter.
  4. Warten, bis auf allen Geräten das neue APK läuft.
  5. Alte Domain abschalten — und danach das APK ohne novasonicHost2 neu bauen.

Schritt 5 nicht vergessen: Android verifiziert die Domains bei jeder Installation neu, und auf Android 11 und älter genügt ein einziger nicht erreichbarer Host, damit die Verifikation komplett fehlschlägt. Bereits verifizierte Installationen laufen zwar weiter, aber die nächste Neuinstallation hätte gar keine funktionierenden App Links mehr.

Zwei weitere Fallen:

  • Signaturschlüssel muss derselbe bleiben. Ein anders signiertes APK lässt sich nur nach Deinstallation installieren — und die nimmt die Offline-Downloads mit.
  • Alte Links nach der Abschaltung öffnen nur dann noch etwas, wenn die alte Domain auf die neue weiterleitet. Dann landen sie allerdings im Browser statt in der App, weil Android eine Weiterleitung nicht erneut an die App übergibt.

Wildcards (*.example.com) sind für App Links nicht dokumentiert und werden hier bewusst nicht verwendet — die Verifikation läuft pro Host.

Bereits verschickte Links auf die alte Domain öffnen nach deren Abschaltung gar nichts mehr; das lässt sich nur mit einer Weiterleitung von alt nach neu abfangen.

Prüfen lässt sich das Ergebnis mit:

adb shell pm get-app-links com.novasonic.app

Steht dort verified, öffnet Android die Links ohne Nachfrage.

Ohne diesen Schritt ist der Link trotzdem nicht verloren: er öffnet im Browser die Web-App. Wer die App bevorzugt, kann sie in den Systemeinstellungen unter Standardmäßig öffnen → Links manuell für die Domain zulassen.