iOS-App (Node)
Verfügbarkeit: interne Vorschau. Die iOS-App wird derzeit noch nicht öffentlich verteilt.Was sie macht
- Verbindet sich über WebSocket mit einem Gateway (LAN oder Tailnet).
- Stellt Node-Fähigkeiten bereit: Canvas, Bildschirm-Snapshot, Kameraaufnahme, Standort, Talk-Modus, Voice Wake.
- Empfängt
node.invoke-Befehle und meldet Node-Statusereignisse.
Anforderungen
- Gateway läuft auf einem anderen Gerät (macOS, Linux oder Windows über WSL2).
- Netzwerkpfad:
- Gleiches LAN über Bonjour, oder
- Tailnet über Unicast-DNS-SD (Beispieldomain:
openclaw.internal.), oder - manueller Host/Port (Fallback).
Schnellstart (pairen + verbinden)
- Gateway starten:
- In der iOS-App Einstellungen öffnen und ein erkanntes Gateway auswählen (oder Manual Host aktivieren und Host/Port eingeben).
- Die Pairing-Anfrage auf dem Gateway-Host genehmigen:
requestId erstellt.
Führen Sie vor der Genehmigung erneut openclaw devices list aus.
- Verbindung prüfen:
Relay-gestützte Push-Benachrichtigungen für offizielle Builds
Offizielle verteilte iOS-Builds verwenden das externe Push-Relay, anstatt das rohe APNs- Token an das Gateway zu veröffentlichen. Anforderung auf Gateway-Seite:- Die iOS-App registriert sich mit App Attest und dem App-Receipt beim Relay.
- Das Relay gibt einen undurchsichtigen Relay-Handle plus eine registrierungsbezogene Sendeberechtigung zurück.
- Die iOS-App ruft die Identität des gepairten Gateways ab und schließt sie in die Relay-Registrierung ein, sodass die relay-gestützte Registrierung an genau dieses Gateway delegiert wird.
- Die App leitet diese relay-gestützte Registrierung mit
push.apns.registeran das gepairte Gateway weiter. - Das Gateway verwendet diesen gespeicherten Relay-Handle für
push.test, Background-Wakes und Wake-Nudges. - Die Relay-Basis-URL des Gateways muss mit der in den offiziellen/TestFlight-iOS-Build eingebetteten Relay-URL übereinstimmen.
- Wenn sich die App später mit einem anderen Gateway oder einem Build mit einer anderen Relay-Basis-URL verbindet, aktualisiert sie die Relay-Registrierung, anstatt das alte Binding wiederzuverwenden.
- Kein relayweites Token für die Bereitstellung.
- Keinen direkten APNs-Schlüssel für relay-gestützte Sendungen offizieller/TestFlight-Builds.
- Den offiziellen/TestFlight-iOS-Build installieren.
gateway.push.apns.relay.baseUrlauf dem Gateway setzen.- Die App mit dem Gateway pairen und die Verbindung abschließen lassen.
- Die App veröffentlicht
push.apns.registerautomatisch, nachdem sie ein APNs-Token hat, die Operator-Sitzung verbunden ist und die Relay-Registrierung erfolgreich war. - Danach können
push.test, Reconnect-Wakes und Wake-Nudges die gespeicherte relay-gestützte Registrierung verwenden.
OPENCLAW_APNS_RELAY_BASE_URLfunktioniert weiterhin als temporäre env-Überschreibung für das Gateway.
Authentifizierungs- und Vertrauensablauf
Das Relay existiert, um zwei Einschränkungen durchzusetzen, die direkte APNs-am-Gateway für offizielle iOS-Builds nicht bieten kann:- Nur echte OpenClaw-iOS-Builds, die über Apple verteilt werden, können das gehostete Relay verwenden.
- Ein Gateway kann relay-gestützte Push-Benachrichtigungen nur für iOS-Geräte senden, die mit genau diesem Gateway gepairt wurden.
-
iOS app -> gateway- Die App paart sich zuerst über den normalen Gateway-Auth-Ablauf mit dem Gateway.
- Dadurch erhält die App eine authentifizierte Node-Sitzung plus eine authentifizierte Operator-Sitzung.
- Die Operator-Sitzung wird zum Aufruf von
gateway.identity.getverwendet.
-
iOS app -> relay- Die App ruft die Registrierungsendpunkte des Relays über HTTPS auf.
- Die Registrierung enthält App-Attest-Nachweis plus App-Receipt.
- Das Relay validiert die Bundle-ID, den App-Attest-Nachweis und den Apple-Receipt und verlangt den offiziellen/produktiven Vertriebspfad.
- Dadurch wird verhindert, dass lokale Xcode-/Dev-Builds das gehostete Relay verwenden. Ein lokaler Build kann signiert sein, erfüllt aber nicht den offiziellen Apple-Verteilungsnachweis, den das Relay erwartet.
-
gateway identity delegation- Vor der Relay-Registrierung ruft die App die Identität des gepairten Gateways über
gateway.identity.getab. - Die App schließt diese Gateway-Identität in die Nutzlast der Relay-Registrierung ein.
- Das Relay gibt einen Relay-Handle und eine registrierungsbezogene Sendeberechtigung zurück, die an diese Gateway-Identität delegiert sind.
- Vor der Relay-Registrierung ruft die App die Identität des gepairten Gateways über
-
gateway -> relay- Das Gateway speichert den Relay-Handle und die Sendeberechtigung aus
push.apns.register. - Bei
push.test, Reconnect-Wakes und Wake-Nudges signiert das Gateway die Sendungsanfrage mit seiner eigenen Geräteidentität. - Das Relay verifiziert sowohl die gespeicherte Sendeberechtigung als auch die Gateway-Signatur gegen die bei der Registrierung delegierte Gateway-Identität.
- Ein anderes Gateway kann diese gespeicherte Registrierung nicht wiederverwenden, selbst wenn es irgendwie den Handle erhalten sollte.
- Das Gateway speichert den Relay-Handle und die Sendeberechtigung aus
-
relay -> APNs- Das Relay besitzt die produktiven APNs-Anmeldedaten und das rohe APNs-Token für den offiziellen Build.
- Das Gateway speichert das rohe APNs-Token für relay-gestützte offizielle Builds nie.
- Das Relay sendet den finalen Push im Namen des gepairten Gateways an APNs.
- Um produktive APNs-Anmeldedaten aus Benutzer-Gateways herauszuhalten.
- Um zu vermeiden, rohe APNs-Tokens offizieller Builds auf dem Gateway zu speichern.
- Um gehostete Relay-Nutzung nur für offizielle/TestFlight-OpenClaw-Builds zu erlauben.
- Um zu verhindern, dass ein Gateway Wake-Pushs an iOS-Geräte sendet, die einem anderen Gateway gehören.
Erkennungspfade
Bonjour (LAN)
Die iOS-App durchsucht_openclaw-gw._tcp auf local. und, wenn konfiguriert, dieselbe
Wide-Area-DNS-SD-Erkennungsdomain. Gateways im selben LAN erscheinen automatisch über local.;
netzübergreifende Erkennung kann die konfigurierte Wide-Area-Domain verwenden, ohne den Beacon-Typ zu ändern.
Tailnet (netzübergreifend)
Wenn mDNS blockiert ist, verwenden Sie eine Unicast-DNS-SD-Zone (wählen Sie eine Domain; Beispiel:openclaw.internal.) und Tailscale Split DNS.
Siehe Bonjour für das CoreDNS-Beispiel.
Manueller Host/Port
In den Einstellungen Manual Host aktivieren und Gateway-Host + Port eingeben (Standard18789).
Canvas + A2UI
Die iOS-Node rendert ein WKWebView-Canvas. Verwenden Sienode.invoke, um es zu steuern:
- Der Gateway-Canvas-Host stellt
/__openclaw__/canvas/und/__openclaw__/a2ui/bereit. - Er wird vom Gateway-HTTP-Server bereitgestellt (gleicher Port wie
gateway.port, Standard18789). - Die iOS-Node navigiert bei der Verbindung automatisch zu A2UI, wenn eine Canvas-Host-URL angekündigt wird.
- Mit
canvas.navigateund{"url":""}kehren Sie zum integrierten Scaffold zurück.
Canvas-Eval / Snapshot
Voice Wake + Talk-Modus
- Voice Wake und Talk-Modus sind in den Einstellungen verfügbar.
- iOS kann Hintergrund-Audio aussetzen; behandeln Sie Voice-Funktionen daher als Best Effort, wenn die App nicht aktiv ist.
Häufige Fehler
NODE_BACKGROUND_UNAVAILABLE: Die iOS-App in den Vordergrund holen (Canvas-/Kamera-/Screen-Befehle erfordern dies).A2UI_HOST_NOT_CONFIGURED: Das Gateway hat keine Canvas-Host-URL angekündigt; prüfen SiecanvasHostin der Gateway-Konfiguration.- Pairing-Prompt erscheint nie:
openclaw devices listausführen und manuell genehmigen. - Reconnect schlägt nach Neuinstallation fehl: Das Pairing-Token im Keychain wurde gelöscht; die Node erneut pairen.