feat: NFC-Tags beschreiben mit demselben Deep-Link wie der QR-Code
Neuer Endpunkt GET /api/v1/qr/:entityType/:id/link liefert den vom QR-Dienst bereits genutzten Deep-Link als reine URL statt als SVG, damit die Web-NFC-API (client-seitig, Chrome/Android) ihn per NDEFReader.write() auf einen physischen NFC-Tag schreiben kann. QrService.resolveUrl() ist aus generateSvg() herausgezogen, damit beide Endpunkte exakt denselben Link erzeugen. Der bestehende QrCodeDialog bekommt dadurch für alle sechs QR-fähigen Entitäten (Völker, Bienenstände, Königinnen, Honigchargen, Lagerbehälter, Abfüllungen) automatisch einen "Auf NFC-Tag schreiben"-Button, der nur erscheint, wenn window.NDEFReader tatsächlich existiert – kein Fallback für andere Browser oder iOS, wie in der Lastenheft vorgesehen.
This commit is contained in:
1 parent
f346859121
commit
53b781aa04
8 files changed
+106
-5
No files matched your search
@@ -0,0 +1,11 @@
|
||||
export function isNfcSupported(): boolean {
|
||||
return typeof window !== "undefined" && "NDEFReader" in window;
|
||||
}
|
||||
|
||||
export async function writeNfcTag(url: string): Promise<void> {
|
||||
if (!window.NDEFReader) {
|
||||
throw new Error("Web NFC wird von diesem Browser nicht unterstützt.");
|
||||
}
|
||||
const reader = new window.NDEFReader();
|
||||
await reader.write({ records: [{ recordType: "url", data: url }] });
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { apiFetchBlob } from "@/lib/auth/api-client";
|
||||
import { apiFetch, apiFetchBlob } from "@/lib/auth/api-client";
|
||||
|
||||
export type QrEntityType =
|
||||
| "colonies"
|
||||
@@ -12,3 +12,8 @@ export async function fetchQrCodeSvg(entityType: QrEntityType, id: string): Prom
|
||||
const { blob } = await apiFetchBlob(`/qr/${entityType}/${id}.svg`, `${entityType}.svg`);
|
||||
return blob;
|
||||
}
|
||||
|
||||
export async function fetchQrLink(entityType: QrEntityType, id: string): Promise<string> {
|
||||
const { url } = await apiFetch<{ url: string }>(`/qr/${entityType}/${id}/link`);
|
||||
return url;
|
||||
}
|
||||
Reference in new issue
Block a user