Ein Song oder Album laesst sich per https://<host>/?song=<id> an jemanden auf derselben Instanz schicken. Der Link traegt nur die Navidrome-Id, keine Zugangsdaten — der Empfaenger sieht den Inhalt mit seinem eigenen Konto. Web: Teilen ueber navigator.share() mit Rueckfall auf die Zwischenablage. Beim Start wird ?song= / ?album= aufgeloest (nach der Anmeldung, vorher fehlen die Zugangsdaten), das Album geoeffnet, der Song gestartet und der Parameter aus der Adresszeile entfernt, damit ein Neuladen nicht erneut losspielt. Das Manifest bekommt launch_handler=navigate-existing, damit der Link in einem bereits offenen PWA-Fenster landet statt in einem neuen. Android: Teilen ueber ACTION_SEND, Empfang ueber einen App-Link-Intent-Filter. Der Host ist eine Build-Eigenschaft (-PnovasonicHost=…, verifiziert am zusammengefuehrten Manifest), die Web-Adresse fuer ausgehende Links eine neue Einstellung. Weil der NavController in der Compose-Hierarchie lebt und die Activity nicht selbst navigieren kann, reicht DeepLinkState den Link durch; onNewIntent ist mitbedacht, sonst passierte beim zweiten Link nichts. assetlinks.json liegt als Vorlage in public/ und wird vom Frontend-Image ausgeliefert (im Build verifiziert); ohne den Release-Fingerabdruck oeffnet der Link die Web-App im Browser statt die App. Anleitung: docs/share-links.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
54 lines
2.0 KiB
Markdown
54 lines
2.0 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
./gradlew assembleRelease -PnovasonicHost=music.example.com
|
|
```
|
|
|
|
Dann den SHA-256 des **Release**-Signaturschlüssels ermitteln …
|
|
|
|
```bash
|
|
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.
|
|
|
|
Prüfen lässt sich das Ergebnis mit:
|
|
|
|
```bash
|
|
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.
|