Application iOS (nœud)
Disponibilité : aperçu interne. L’application iOS n’est pas encore distribuée publiquement.Ce qu’elle fait
- Se connecte à une Gateway via WebSocket (LAN ou tailnet).
- Expose les capacités du nœud : Canvas, capture d’écran, capture caméra, localisation, mode Talk, réveil vocal.
- Reçoit les commandes
node.invokeet rapporte les événements d’état du nœud.
Prérequis
- Gateway en cours d’exécution sur un autre appareil (macOS, Linux ou Windows via WSL2).
- Chemin réseau :
- Même LAN via Bonjour, ou
- Tailnet via DNS-SD unicast (exemple de domaine :
openclaw.internal.), ou - Hôte/port manuels (repli).
Démarrage rapide (appairer + connecter)
- Démarrez Gateway :
- Dans l’application iOS, ouvrez Réglages et choisissez une gateway découverte (ou activez Hôte manuel et saisissez l’hôte/le port).
- Approuvez la demande d’appairage sur l’hôte gateway :
requestId est créé.
Exécutez à nouveau openclaw devices list avant l’approbation.
- Vérifiez la connexion :
Push via relais pour les builds officiels
Les builds iOS officiels distribués utilisent le relais push externe au lieu de publier le jeton APNs brut vers la gateway. Prérequis côté gateway :- L’application iOS s’enregistre auprès du relais en utilisant App Attest et le reçu de l’application.
- Le relais renvoie un handle de relais opaque ainsi qu’une autorisation d’envoi limitée à l’enregistrement.
- L’application iOS récupère l’identité de la gateway appairée et l’inclut dans l’enregistrement auprès du relais, de sorte que l’enregistrement basé sur le relais soit délégué à cette gateway spécifique.
- L’application transmet cet enregistrement basé sur le relais à la gateway appairée avec
push.apns.register. - La gateway utilise ce handle de relais stocké pour
push.test, les réveils en arrière-plan et les sollicitations de réveil. - Le
baseUrldu relais côté gateway doit correspondre à l’URL du relais intégrée au build iOS officiel/TestFlight. - Si l’application se connecte ensuite à une autre gateway ou à un build avec un autre
baseUrlde relais, elle actualise l’enregistrement du relais au lieu de réutiliser l’ancienne liaison.
- Aucun jeton de relais déployé à l’échelle du déploiement.
- Aucune clé APNs directe pour les envois via relais officiels/TestFlight.
- Installez le build iOS officiel/TestFlight.
- Définissez
gateway.push.apns.relay.baseUrlsur la gateway. - Appairez l’application à la gateway et laissez-la terminer la connexion.
- L’application publie automatiquement
push.apns.registerune fois qu’elle dispose d’un jeton APNs, que la session opérateur est connectée et que l’enregistrement auprès du relais réussit. - Ensuite,
push.test, les réveils de reconnexion et les sollicitations de réveil peuvent utiliser l’enregistrement stocké basé sur le relais.
OPENCLAW_APNS_RELAY_BASE_URLfonctionne toujours comme remplacement temporaire via variable d’environnement pour la gateway.
Flux d’authentification et de confiance
Le relais existe pour imposer deux contraintes que l’APNs direct sur gateway ne peut pas fournir pour les builds iOS officiels :- Seuls les véritables builds iOS OpenClaw distribués via Apple peuvent utiliser le relais hébergé.
- Une gateway ne peut envoyer des push via relais que pour les appareils iOS qui se sont appairés avec cette gateway spécifique.
-
iOS app -> gateway- L’application s’appaire d’abord avec la gateway via le flux normal d’auth Gateway.
- Cela donne à l’application une session node authentifiée ainsi qu’une session operator authentifiée.
- La session operator est utilisée pour appeler
gateway.identity.get.
-
iOS app -> relay- L’application appelle les points de terminaison d’enregistrement du relais en HTTPS.
- L’enregistrement inclut une preuve App Attest ainsi que le reçu de l’application.
- Le relais valide le bundle ID, la preuve App Attest et le reçu Apple, et exige le chemin de distribution officiel/de production.
- C’est ce qui empêche les builds locaux Xcode/dev d’utiliser le relais hébergé. Un build local peut être signé, mais il ne satisfait pas à la preuve de distribution Apple officielle attendue par le relais.
-
gateway identity delegation- Avant l’enregistrement auprès du relais, l’application récupère l’identité de la gateway appairée via
gateway.identity.get. - L’application inclut cette identité de gateway dans la charge utile d’enregistrement auprès du relais.
- Le relais renvoie un handle de relais et une autorisation d’envoi limitée à l’enregistrement, délégués à cette identité de gateway.
- Avant l’enregistrement auprès du relais, l’application récupère l’identité de la gateway appairée via
-
gateway -> relay- La gateway stocke le handle de relais et l’autorisation d’envoi issus de
push.apns.register. - Lors de
push.test, des réveils de reconnexion et des sollicitations de réveil, la gateway signe la demande d’envoi avec sa propre identité d’appareil. - Le relais vérifie à la fois l’autorisation d’envoi stockée et la signature de la gateway par rapport à l’identité de gateway déléguée lors de l’enregistrement.
- Une autre gateway ne peut pas réutiliser cet enregistrement stocké, même si elle obtient d’une manière ou d’une autre le handle.
- La gateway stocke le handle de relais et l’autorisation d’envoi issus de
-
relay -> APNs- Le relais possède les identifiants APNs de production et le jeton APNs brut du build officiel.
- La gateway ne stocke jamais le jeton APNs brut pour les builds officiels via relais.
- Le relais envoie le push final à APNs au nom de la gateway appairée.
- Pour garder les identifiants APNs de production hors des gateways utilisateur.
- Pour éviter de stocker les jetons APNs bruts des builds officiels sur la gateway.
- Pour autoriser l’usage du relais hébergé uniquement pour les builds OpenClaw officiels/TestFlight.
- Pour empêcher une gateway d’envoyer des push de réveil à des appareils iOS appartenant à une autre gateway.
Chemins de découverte
Bonjour (LAN)
L’application iOS parcourt_openclaw-gw._tcp sur local. et, lorsqu’il est configuré, le même
domaine de découverte DNS-SD large zone. Les gateways sur le même LAN apparaissent automatiquement depuis local. ;
la découverte inter-réseaux peut utiliser le domaine large zone configuré sans changer le type de balise.
Tailnet (inter-réseaux)
Si mDNS est bloqué, utilisez une zone DNS-SD unicast (choisissez un domaine ; exemple :openclaw.internal.) et le split DNS Tailscale.
Voir Bonjour pour l’exemple CoreDNS.
Hôte/port manuels
Dans Réglages, activez Hôte manuel et saisissez l’hôte gateway + le port (par défaut18789).
Canvas + A2UI
Le nœud iOS affiche un canvas WKWebView. Utiliseznode.invoke pour le piloter :
- L’hôte canvas Gateway sert
/__openclaw__/canvas/et/__openclaw__/a2ui/. - Il est servi depuis le serveur HTTP Gateway (même port que
gateway.port, par défaut18789). - Le nœud iOS navigue automatiquement vers A2UI à la connexion lorsqu’une URL d’hôte canvas est annoncée.
- Revenez au scaffold intégré avec
canvas.navigateet{"url":""}.
Évaluation / capture du canvas
Réveil vocal + mode Talk
- Le réveil vocal et le mode Talk sont disponibles dans Réglages.
- iOS peut suspendre l’audio en arrière-plan ; considérez les fonctionnalités vocales comme best-effort lorsque l’application n’est pas active.
Erreurs courantes
NODE_BACKGROUND_UNAVAILABLE: mettez l’application iOS au premier plan (les commandes canvas/caméra/écran l’exigent).A2UI_HOST_NOT_CONFIGURED: Gateway n’a pas annoncé d’URL d’hôte canvas ; vérifiezcanvasHostdans Configuration de Gateway.- L’invite d’appairage n’apparaît jamais : exécutez
openclaw devices listet approuvez manuellement. - La reconnexion échoue après réinstallation : le jeton d’appairage du Trousseau a été effacé ; réappairez le nœud.