Platforms overview

iOS ऐप

उपलब्धता: किसी रिलीज़ के लिए सक्षम होने पर iPhone ऐप बिल्ड Apple चैनलों के माध्यम से वितरित किए जाते हैं। स्थानीय डेवलपमेंट बिल्ड स्रोत से भी चलाए जा सकते हैं।

यह क्या करता है

  • WebSocket (LAN या tailnet) के माध्यम से Gateway से कनेक्ट करता है।
  • Node क्षमताएँ उपलब्ध कराता है: Canvas, स्क्रीन स्नैपशॉट, कैमरा कैप्चर, स्थान, Talk मोड, वॉइस वेक और ऑप्ट-इन स्वास्थ्य सारांश।
  • node.invoke कमांड प्राप्त करता है और Node स्थिति ईवेंट रिपोर्ट करता है।
  • Agents सतह (Files) से चयनित एजेंट के वर्कस्पेस को केवल-पढ़ने योग्य रूप में ब्राउज़ करता है: डायरेक्टरी में क्रमिक रूप से जाना, सिंटैक्स-हाइलाइट किए गए टेक्स्ट प्रीव्यू, इमेज प्रीव्यू और शेयर-शीट एक्सपोर्ट। कोई लेखन ऑपरेशन नहीं; प्रीव्यू का आकार gateway द्वारा सीमित किया जाता है।
  • हर युग्मित gateway के लिए हाल के चैट सत्रों और ट्रांसक्रिप्ट का छोटा, केवल-पढ़ने योग्य ऑफ़लाइन कैश रखता है: कोल्ड ओपन पर अंतिम ज्ञात ट्रांसक्रिप्ट तुरंत दिखाई देता है और gateway के जवाब देते ही रीफ़्रेश हो जाता है, डिस्कनेक्ट होने पर भी हाल की चैट ब्राउज़ की जा सकती हैं, और रीसेट/फ़ॉरगेट संरक्षित स्थानीय कैश को मिटा देता है।
  • डिस्कनेक्ट होने के दौरान भेजे गए टेक्स्ट संदेशों को हर gateway के लिए टिकाऊ आउटबॉक्स (अधिकतम 50) में कतारबद्ध करता है: कतारबद्ध बबल ट्रांसक्रिप्ट में दिखाई देते हैं, दोबारा कनेक्ट होने पर आइडेम्पोटेंट पुनः प्रयासों के साथ क्रम से भेजे जाते हैं, कैनोनिकल इतिहास द्वारा भेजे जाने की पुष्टि होने तक टिकाऊ बने रहते हैं, पुनः प्रयास/हटाने की कार्रवाई दिखाने से पहले बैकऑफ़ के साथ पुनः प्रयास करते हैं, और 48 घंटे ऑफ़लाइन रहने के बाद भेजे जाने के बजाय समाप्त हो जाते हैं; रीसेट/फ़ॉरगेट कैश के साथ कतार को भी साफ़ कर देता है।
  • Chat टेक्स्ट और वॉइस के लिए एकमात्र सतह है। Chat की कार्रवाइयाँ Chat छोड़े बिना पूर्ण Sessions स्क्रीन खोल सकती हैं और सहायक की रीजनिंग तथा टूल गतिविधि दिखा या छिपा सकती हैं। ड्राफ़्ट डिक्टेशन के लिए माइक्रोफ़ोन टैप करें, वॉइस नोट रिकॉर्ड करने के लिए उसका मेन्यू खोलें, या रीयलटाइम वॉइस के लिए इनलाइन Talk नियंत्रण का उपयोग करें; सुनने या बोलने के दौरान Talk नियंत्रण लाइव माइक्रोफ़ोन या प्लेबैक स्तर के अनुसार एनिमेट होता है।
  • माँग पर सहायक के संदेश बोलकर सुनाता है: Chat में किसी संदेश को देर तक दबाएँ और Listen चुनें। ऐप कॉन्फ़िगर किए गए TTS प्रदाता के साथ समर्थित gateway tts.speak क्लिप चलाता है और gateway ऑडियो अनुपलब्ध या चलाने योग्य न होने पर डिवाइस पर उपलब्ध वाणी का उपयोग करता है। सत्र बदलने या ऐप के बैकग्राउंड में जाने पर प्लेबैक रुक जाता है।

आवश्यकताएँ

  • किसी अन्य डिवाइस पर चल रहा Gateway (macOS, Linux या WSL2 के माध्यम से Windows)।
  • नेटवर्क पथ:
    • Bonjour के माध्यम से समान LAN, या
    • यूनिकास्ट DNS-SD के माध्यम से tailnet (उदाहरण डोमेन: openclaw.internal.), या
    • मैन्युअल होस्ट/पोर्ट (फ़ॉलबैक)।

त्वरित शुरुआत (युग्मित करें + कनेक्ट करें)

पहली बार लॉन्च होने पर ऐप युग्मन की संक्षिप्त व्याख्या और अनुमतियों के पेज (नोटिफ़िकेशन, कैमरा, माइक्रोफ़ोन, फ़ोटो, संपर्क, कैलेंडर, रिमाइंडर, स्थान) से आपका मार्गदर्शन करता है। प्रत्येक अनुमति वैकल्पिक है और उसे बाद में Settings -> Permissions में या iOS Settings ऐप में बदला जा सकता है।

  1. ऐसे रूट के साथ प्रमाणीकृत Gateway शुरू करें जिस तक आपका फ़ोन पहुँच सके। Tailscale Serve अनुशंसित रिमोट पथ है:
bash
openclaw gateway --port 18789 --tailscale serve

विश्वसनीय समान-LAN सेटअप के लिए इसके बजाय प्रमाणीकृत gateway.bind: "lan" का उपयोग करें। डिफ़ॉल्ट लूपबैक बाइंड तक फ़ोन से नहीं पहुँचा जा सकता। यदि Gateway अभी तक कॉन्फ़िगर नहीं किया गया है, तो पहले openclaw onboard चलाएँ, ताकि सेटअप-कोड बनाने के लिए टोकन या पासवर्ड प्रमाणीकरण पथ उपलब्ध हो।

  1. Control UI खोलें, Nodes चुनें और Devices पेज पर Pair mobile device क्लिक करें। पूर्ण एक्सेस अनुशंसित है और डिफ़ॉल्ट रूप से चयनित रहता है; केवल तभी Limited access चुनें जब आप प्रशासनिक Gateway नियंत्रणों को शामिल नहीं करना चाहते हों, फिर Create setup code क्लिक करें।

  2. iOS ऐप में Settings -> Gateway खोलें, QR कोड स्कैन करें (या सेटअप कोड पेस्ट करें) और कनेक्ट करें।

    यदि सेटअप कोड में LAN और Tailscale Serve दोनों रूट हैं, तो ऐप उन्हें क्रम से जाँचता है और पहले पहुँच योग्य एंडपॉइंट को सहेजता है।

    युग्मित gateway Gateways सूची में बने रहते हैं। चेकमार्क फ़ोकस किए गए gateway की पहचान करता है; किसी दूसरी पंक्ति पर बोल्ट नियंत्रण का उपयोग करके उसके ऑपरेटर सत्र को भी उसी समय कनेक्टेड रखें। फ़ोकस बदलने से अन्य सक्षम gateway डिस्कनेक्ट नहीं होते। केवल फ़ोकस किए गए gateway को iPhone का क्षमता-युक्त Node सत्र मिलता है, इसलिए कैमरा, स्क्रीन, स्थान और अन्य डिवाइस कमांड का हमेशा एक स्पष्ट स्वामी होता है। ऐप के बैकग्राउंड में जाने के बाद iOS इन फ़ोरग्राउंड कनेक्शन को निलंबित कर सकता है।

  3. आधिकारिक ऐप स्वचालित रूप से कनेक्ट होता है। यदि Pending approval में कोई अनुरोध दिखाई देता है, तो उसे स्वीकृत करने से पहले उसकी भूमिका और स्कोप की समीक्षा करें।

    Settings → Gateway दिखाता है कि सहेजे गए ऑपरेटर कनेक्शन के पास Full या Limited एक्सेस है। प्लेनटेक्स्ट LAN ws:// सेटअप को बेयरर-टोकन सुरक्षा के लिए स्वचालित रूप से सीमित कर दिया जाता है। यदि यह सीमित है, तो wss:// या Tailscale Serve कॉन्फ़िगर करें, Control UI या openclaw qr से नया पूर्ण-एक्सेस कोड स्कैन करें, फिर सेटिंग्स और अपग्रेड सक्षम करने के लिए दोबारा कनेक्ट करें।

Control UI बटन के लिए operator.admin वाला पहले से युग्मित सत्र आवश्यक है। टर्मिनल फ़ॉलबैक के रूप में iOS ऐप में खोजा गया gateway चुनें (या Manual Host सक्षम करके होस्ट/पोर्ट दर्ज करें), फिर Gateway होस्ट पर अनुरोध स्वीकृत करें:

bash
openclaw devices listopenclaw devices approve <requestId>

यदि ऐप बदले हुए प्रमाणीकरण विवरण (भूमिका/स्कोप/सार्वजनिक कुंजी) के साथ युग्मन का पुनः प्रयास करता है, तो पिछला लंबित अनुरोध अधिक्रमित हो जाता है और नया requestId बनाया जाता है। स्वीकृति से पहले openclaw devices list दोबारा चलाएँ।

वैकल्पिक: यदि iOS Node हमेशा कड़े नियंत्रण वाले सबनेट से कनेक्ट होता है, तो आप स्पष्ट CIDR या सटीक IP के साथ पहली बार Node की स्वतः-स्वीकृति को ऑप्ट-इन कर सकते हैं:

json5
{  gateway: {    nodes: {      pairing: {        autoApproveCidrs: ["192.168.1.0/24"],      },    },  },}

यह डिफ़ॉल्ट रूप से अक्षम है। यह केवल बिना अनुरोधित स्कोप वाले नए role: node युग्मन पर लागू होता है। ऑपरेटर/ब्राउज़र युग्मन और भूमिका, स्कोप, मेटाडेटा या सार्वजनिक कुंजी में किसी भी बदलाव के लिए अब भी मैन्युअल स्वीकृति आवश्यक है।

  1. कनेक्शन सत्यापित करें:
bash
openclaw nodes statusopenclaw gateway call node.list --params "{}"

स्वास्थ्य सारांश

iOS Node वर्तमान कैलेंडर दिन के लिए वैकल्पिक रूप से सक्षम, केवल-पढ़ने योग्य HealthKit समेकित सारांश लौटा सकता है। iOS डिवाइस की सहमति और स्पष्ट Gateway कमांड प्राधिकरण स्वतंत्र नियंत्रण हैं। सेटअप, आह्वान, पेलोड फ़ील्ड, गोपनीयता व्यवहार और समस्या निवारण के लिए HealthKit सारांश देखें।

डिफ़ॉल्ट रूप से, Apple Watch सहायक मौजूदा iPhone रिले का उपयोग जारी रखता है और उसे अलग Gateway पेयरिंग की आवश्यकता नहीं होती। Apple के Watch ऐप में Watch को iPhone के साथ पेयर करें, Watch app -> My Watch -> Available Apps से OpenClaw इंस्टॉल करें, फिर दोनों डिवाइसों पर OpenClaw को एक बार खोलें।

कमांड अनुमोदनों की समीक्षा करें

operator.admin वाला ऑपरेटर कनेक्शन, या Gateway द्वारा स्पष्ट रूप से लक्षित पेयर किया गया operator.approvals कनेक्शन, iPhone पर लंबित exec अनुरोधों की समीक्षा कर सकता है। अनुमोदन कार्ड Gateway का साफ़ किया हुआ कमांड पूर्वावलोकन, चेतावनी, होस्ट संदर्भ, समाप्ति और केवल उस अनुरोध द्वारा दिए गए निर्णय दिखाता है। पेयर की गई Apple Watch को मौजूदा iPhone रिले के माध्यम से वही समीक्षक-सुरक्षित प्रॉम्प्ट मिलता है और वह संक्षिप्त एक-बार-अनुमति/अस्वीकार निर्णयों का उपसमुच्चय प्रस्तुत करती है। सीधे Watch Gateway मोड में अनुमोदन प्रॉम्प्ट नहीं आते।

अनुमोदन स्थिति Control UI और समर्थित चैट सतहों के साथ साझा की जाती है। पहले प्रतिबद्ध उत्तर को मान्य किया जाता है। किसी अन्य सतह द्वारा अनुरोध का समाधान किए जाने के बाद, दूरस्थ समाधान सूचना के बाद और जब भी समाधान की अभिस्वीकृति खो जाने की संभावना हो, iPhone और Watch Gateway का प्रामाणिक टर्मिनल रिकॉर्ड प्राप्त करते हैं। जब तक उस पुनर्पठन से यह पुष्टि नहीं हो जाती कि अनुरोध अब भी लंबित है या नहीं, कार्रवाइयाँ अनुपलब्ध रहती हैं।

अनुमोदन का स्वामित्व चयनित Gateway से बँधा होता है। Gateway बदलने पर किसी पुराने प्रॉम्प्ट को नए कनेक्शन पर लागू नहीं किया जा सकता। एकीकृत अनुमोदन विधियों से पुराने Gateway, जारी किए गए exec-विशिष्ट तरीकों पर वापस चले जाते हैं; संरक्षित टर्मिनल स्थिति और अधिक समृद्ध क्रॉस-सतह परिणामों के लिए अपडेट किया गया Gateway आवश्यक है।

एजेंट के प्रश्नों का उत्तर दें

चैट, operator.questions (या operator.admin) वाले ऑपरेटर कनेक्शनों के लिए लंबित Gateway प्रश्नों को नेटिव कार्ड के रूप में दिखाती है। कार्ड एकल और बहु-चयन विकल्पों, विकल्प विवरणों, मुक्त-पाठ अन्य उत्तरों और समाप्ति की उलटी गिनती का समर्थन करते हैं। पुनः कनेक्ट होने पर लंबित प्रश्न Gateway से फिर लोड होते हैं। जब यह डिवाइस कार्ड का उत्तर देता है, कोई अन्य सतह पहले उत्तर देती है, या प्रश्न की समय-सीमा समाप्त होती है अथवा उसे रद्द किया जाता है, तो कार्ड लॉक हो जाता है।

वैकल्पिक प्रत्यक्ष Apple Watch Node

प्रत्यक्ष मोड Watch को उसकी अपनी हस्ताक्षरित Node पहचान और Gateway कनेक्शन देता है। OpenClaw के सक्रिय रहने पर समर्थित Node कमांड Watch के Wi-Fi या सेल्युलर कनेक्शन पर काम करते रहते हैं, भले ही पेयर किया गया iPhone अनुपलब्ध हो।

आवश्यकताएँ:

  • iPhone, operator.admin दायरे के साथ Gateway से जुड़ा है।
  • सेटअप कोड ऐसे wss:// Gateway एंडपॉइंट का विज्ञापन करता है, जिसका प्रमाणपत्र watchOS द्वारा विश्वसनीय है; Watch संबंधित https:// ओरिजिन को पोल करती है। सादा HTTP और स्वयं-हस्ताक्षरित या केवल-फ़िंगरप्रिंट भरोसा समर्थित नहीं है। एंडपॉइंट कॉन्फ़िगरेशन के लिए Gateway के स्वामित्व वाली पेयरिंग देखें। लूपबैक, केवल-iPhone और केवल-tailnet रूट Watch द्वारा स्वतंत्र रूप से पहुँच योग्य नहीं होते।
  • सेल्युलर उपयोग के लिए सक्रिय सेवा वाली सेल्युलर-सक्षम Apple Watch आवश्यक है।
  • OpenClaw Watch पर सक्रिय है। Apple सामान्य watchOS ऐप्स को जेनेरिक WebSocket/TCP कनेक्शन बनाए रखने की अनुमति नहीं देता, इसलिए प्रत्यक्ष Node छोटे HTTPS पोल का उपयोग करता है और ऐप के फिर से अग्रभूमि में आने पर पुनः कनेक्ट होता है। Apple का watchOS निम्न-स्तरीय नेटवर्किंग मार्गदर्शन देखें।

सेटअप:

  1. iPhone पर Settings -> Apple Watch खोलें।
  2. Enable Direct Gateway Connection पर टैप करें।
  3. अल्पकालिक सेटअप कोड की समय-सीमा समाप्त होने से पहले Watch पर OpenClaw खोलें।
  4. openclaw nodes status वाली अलग Apple Watch पंक्ति सत्यापित करें।

सेटअप कोड में अल्पकालिक, केवल-Node बूटस्ट्रैप क्रेडेंशियल होता है; समय-सीमा समाप्त होने तक इसे पासवर्ड जैसा ही मानें। इसमें iPhone का सहेजा हुआ Gateway पासवर्ड या टोकन कभी नहीं होता। पेयरिंग के बाद Watch अपना डिवाइस टोकन संग्रहीत करती है और बूटस्ट्रैप क्रेडेंशियल मिटा देती है। प्रत्यक्ष मोड केवल नीचे दिए गए कमांडों पर लागू होता है। चैट, Talk, अनुमोदन और मौजूदा watch.* सूचना प्रवाह iPhone-रिले सुविधाएँ बने रहते हैं और इनके लिए अब भी पेयर किया गया iPhone आवश्यक है।

प्रत्यक्ष watchOS Node कमांड:

सतह कमांड टिप्पणियाँ
डिवाइस device.info, device.status Watch की पहचान, बैटरी, तापमान, स्टोरेज और नेटवर्क।
सूचनाएँ system.notify ऐप के सक्रिय रहने के दौरान; Watch की अनुमति आवश्यक है।

watchOS तृतीय-पक्ष ऐप्स को WebKit उपलब्ध नहीं कराता, इसलिए प्रत्यक्ष Watch Node Canvas कमांडों का विज्ञापन नहीं करता।

आधिकारिक बिल्ड के लिए रिले-समर्थित पुश

आधिकारिक रूप से वितरित iOS बिल्ड, Gateway को अपरिष्कृत APNs टोकन प्रकाशित करने के बजाय बाहरी पुश रिले का उपयोग करते हैं। सार्वजनिक रिलीज़ लेन के आधिकारिक App Store बिल्ड https://ios-push-relay.openclaw.ai पर होस्ट किए गए रिले का उपयोग करते हैं; यह बेस URL App Store वितरण के लिए हार्डकोड किया गया है और किसी ओवरराइड को नहीं पढ़ता।

कस्टम रिले परिनियोजनों के लिए जानबूझकर अलग iOS बिल्ड/परिनियोजन पथ आवश्यक है, जिसका रिले URL Gateway के रिले URL से मेल खाता हो। App Store रिलीज़ लेन कभी भी कस्टम रिले URL स्वीकार नहीं करती। यदि आप कस्टम रिले बिल्ड का उपयोग कर रहे हैं, तो उससे मेल खाता Gateway रिले URL सेट करें:

json5
{  gateway: {    push: {      apns: {        relay: {          baseUrl: "https://relay.example.com",        },      },    },  },}

प्रवाह इस प्रकार काम करता है:

  • iOS ऐप App Attest और StoreKit ऐप ट्रांज़ैक्शन JWS का उपयोग करके रिले के साथ पंजीकरण करता है।
  • रिले एक अपारदर्शी रिले हैंडल और पंजीकरण-स्कोप वाला भेजने का अनुदान लौटाता है।
  • iOS ऐप युग्मित Gateway पहचान (gateway.identity.get) प्राप्त करता है और उसे रिले पंजीकरण में शामिल करता है, ताकि रिले-समर्थित पंजीकरण उस विशिष्ट Gateway को प्रत्यायोजित हो।
  • ऐप उस रिले-समर्थित पंजीकरण को push.apns.register के साथ युग्मित Gateway को अग्रेषित करता है।
  • Gateway उस संग्रहीत रिले हैंडल का उपयोग push.test, बैकग्राउंड वेक और वेक संकेतों के लिए करता है।
  • यदि ऐप बाद में किसी अलग Gateway या अलग रिले बेस URL वाले बिल्ड से कनेक्ट होता है, तो वह पुराने बंधन का पुनः उपयोग करने के बजाय रिले पंजीकरण को रीफ़्रेश करता है।

इस पथ के लिए Gateway को इनकी आवश्यकता नहीं है: कोई डिप्लॉयमेंट-व्यापी रिले टोकन नहीं, आधिकारिक App Store रिले-समर्थित भेजने के लिए कोई प्रत्यक्ष APNs कुंजी नहीं।

अपेक्षित ऑपरेटर प्रवाह:

  1. आधिकारिक iOS ऐप इंस्टॉल करें।
  2. वैकल्पिक: केवल जानबूझकर अलग कस्टम रिले बिल्ड का उपयोग करते समय Gateway पर gateway.push.apns.relay.baseUrl सेट करें।
  3. ऐप को Gateway से युग्मित करें और उसे कनेक्ट होना पूरा करने दें।
  4. APNs टोकन मिलने, ऑपरेटर सत्र के कनेक्ट होने और रिले पंजीकरण के सफल होने के बाद ऐप push.apns.register प्रकाशित करता है।
  5. इसके बाद, push.test, पुनः कनेक्ट करने वाले वेक और वेक संकेत संग्रहीत रिले-समर्थित पंजीकरण का उपयोग कर सकते हैं।

बैकग्राउंड जीवित बीकन

जब iOS किसी साइलेंट पुश, बैकग्राउंड रीफ़्रेश या महत्वपूर्ण-स्थान इवेंट के लिए ऐप को जगाता है, तो ऐप एक संक्षिप्त Node पुनः कनेक्शन का प्रयास करता है और फिर event: "node.presence.alive" के साथ node.event को कॉल करता है। प्रमाणित Node डिवाइस पहचान ज्ञात होने के बाद ही Gateway इसे युग्मित Node/डिवाइस मेटाडेटा पर lastSeenAtMs/lastSeenReason के रूप में रिकॉर्ड करता है।

ऐप किसी बैकग्राउंड वेक को केवल तभी सफलतापूर्वक रिकॉर्ड हुआ मानता है, जब Gateway प्रतिक्रिया में handled: true शामिल हो। पुराने Gateway, { "ok": true } के साथ node.event को स्वीकार कर सकते हैं; वह प्रतिक्रिया संगत है, लेकिन उसे टिकाऊ अंतिम-बार-देखे-गए अपडेट के रूप में नहीं गिना जाता।

संगतता संबंधी टिप्पणी:

  • OPENCLAW_APNS_RELAY_BASE_URL अभी भी Gateway के लिए अस्थायी env ओवरराइड के रूप में काम करता है (gateway.push.apns.relay.baseUrl कॉन्फ़िगरेशन-प्रथम पथ है)।
  • App Store रिलीज़ बिल्ड का पुश मोड होस्ट किए गए रिले होस्ट को हार्डकोड करता है और कभी भी रिले-URL ओवरराइड नहीं पढ़ता — OPENCLAW_PUSH_RELAY_BASE_URL बिल्ड-टाइम env var केवल स्थानीय/सैंडबॉक्स iOS बिल्ड मोड को प्रभावित करता है।

प्रमाणीकरण और विश्वास प्रवाह

रिले उन दो प्रतिबंधों को लागू करने के लिए मौजूद है जिन्हें Gateway पर प्रत्यक्ष APNs आधिकारिक iOS बिल्ड के लिए प्रदान नहीं कर सकता:

  • केवल Apple के माध्यम से वितरित वास्तविक OpenClaw iOS बिल्ड ही होस्ट किए गए रिले का उपयोग कर सकते हैं।
  • कोई Gateway केवल उन iOS डिवाइसों के लिए रिले-समर्थित पुश भेज सकता है, जिन्हें उस विशिष्ट Gateway से युग्मित किया गया था।

प्रत्येक चरण में:

  1. iOS app -> gateway: ऐप सामान्य Gateway प्रमाणीकरण प्रवाह के माध्यम से Gateway से युग्मित होता है, जिससे उसे एक प्रमाणित Node सत्र और एक प्रमाणित ऑपरेटर सत्र मिलता है। ऑपरेटर सत्र gateway.identity.get को कॉल करता है।
  2. iOS app -> relay: ऐप App Attest प्रमाण और StoreKit ऐप ट्रांज़ैक्शन JWS के साथ HTTPS पर रिले पंजीकरण एंडपॉइंट को कॉल करता है। रिले बंडल ID, App Attest प्रमाण और Apple वितरण प्रमाण को सत्यापित करता है तथा आधिकारिक/प्रोडक्शन वितरण पथ आवश्यक बनाता है — यही स्थानीय Xcode/डेवलपमेंट बिल्ड को होस्ट किए गए रिले का उपयोग करने से रोकता है, क्योंकि स्थानीय बिल्ड आधिकारिक Apple वितरण प्रमाण को पूरा नहीं कर सकता।
  3. gateway identity delegation: रिले पंजीकरण से पहले ऐप gateway.identity.get से युग्मित Gateway पहचान प्राप्त करता है और उसे रिले पंजीकरण पेलोड में शामिल करता है। रिले उस Gateway पहचान को प्रत्यायोजित एक रिले हैंडल और पंजीकरण-स्कोप वाला भेजने का अनुदान लौटाता है।
  4. gateway -> relay: Gateway, push.apns.register से रिले हैंडल और भेजने का अनुदान संग्रहीत करता है। push.test, पुनः कनेक्ट करने वाले वेक और वेक संकेतों पर Gateway अपनी डिवाइस पहचान से भेजने के अनुरोध पर हस्ताक्षर करता है; रिले संग्रहीत भेजने के अनुदान और Gateway हस्ताक्षर—दोनों को पंजीकरण से प्रत्यायोजित Gateway पहचान के विरुद्ध सत्यापित करता है। कोई अन्य Gateway उस संग्रहीत पंजीकरण का पुनः उपयोग नहीं कर सकता, भले ही उसे किसी तरह हैंडल मिल जाए।
  5. relay -> APNs: आधिकारिक बिल्ड के प्रोडक्शन APNs क्रेडेंशियल और मूल APNs टोकन का स्वामित्व रिले के पास होता है। रिले-समर्थित आधिकारिक बिल्ड के लिए Gateway कभी भी मूल APNs टोकन संग्रहीत नहीं करता; रिले युग्मित Gateway की ओर से अंतिम पुश APNs को भेजता है।

इस डिज़ाइन को बनाने का कारण: प्रोडक्शन APNs क्रेडेंशियल को उपयोगकर्ता Gateway से बाहर रखना, Gateway पर आधिकारिक बिल्ड के मूल APNs टोकन संग्रहीत करने से बचना, केवल आधिकारिक OpenClaw iOS बिल्ड को होस्ट किए गए रिले का उपयोग करने देना और किसी Gateway को किसी अलग Gateway के स्वामित्व वाले iOS डिवाइसों पर वेक पुश भेजने से रोकना।

स्थानीय/मैन्युअल बिल्ड प्रत्यक्ष APNs पर बने रहते हैं। यदि रिले के बिना उन बिल्ड का परीक्षण किया जा रहा है, तो Gateway को अभी भी प्रत्यक्ष APNs क्रेडेंशियल चाहिए:

bash
export OPENCLAW_APNS_TEAM_ID="TEAMID"export OPENCLAW_APNS_KEY_ID="KEYID"export OPENCLAW_APNS_PRIVATE_KEY_P8="$(cat /path/to/AuthKey_KEYID.p8)"

ये Gateway होस्ट के रनटाइम env vars हैं, Fastlane सेटिंग नहीं। apps/ios/fastlane/.env केवल APP_STORE_CONNECT_KEY_ID और APP_STORE_CONNECT_ISSUER_ID जैसे App Store Connect प्रमाणीकरण को संग्रहीत करता है; यह स्थानीय iOS बिल्ड के लिए प्रत्यक्ष APNs डिलीवरी कॉन्फ़िगर नहीं करता।

~/.openclaw/credentials/ के अंतर्गत अन्य प्रदाता क्रेडेंशियल के अनुरूप अनुशंसित Gateway होस्ट संग्रहण:

bash
mkdir -p ~/.openclaw/credentials/apnschmod 700 ~/.openclaw/credentials/apnsmv /path/to/AuthKey_KEYID.p8 ~/.openclaw/credentials/apns/AuthKey_KEYID.p8chmod 600 ~/.openclaw/credentials/apns/AuthKey_KEYID.p8export OPENCLAW_APNS_PRIVATE_KEY_PATH="$HOME/.openclaw/credentials/apns/AuthKey_KEYID.p8"

.p8 फ़ाइल को कमिट न करें या उसे रेपो चेकआउट के अंतर्गत न रखें।

खोज पथ

Bonjour (LAN)

iOS ऐप local. पर _openclaw-gw._tcp ब्राउज़ करता है और कॉन्फ़िगर होने पर उसी विस्तृत-क्षेत्र DNS-SD खोज डोमेन को भी ब्राउज़ करता है। समान LAN के Gateway, local. से अपने-आप दिखाई देते हैं; क्रॉस-नेटवर्क खोज बीकन प्रकार बदले बिना कॉन्फ़िगर किए गए विस्तृत-क्षेत्र डोमेन का उपयोग कर सकती है।

Tailnet (क्रॉस-नेटवर्क)

यदि mDNS अवरुद्ध है, तो एक यूनिकास्ट DNS-SD ज़ोन (कोई डोमेन चुनें; उदाहरण: openclaw.internal.) और Tailscale स्प्लिट DNS का उपयोग करें। CoreDNS उदाहरण के लिए Bonjour देखें।

मैन्युअल होस्ट/पोर्ट

Settings में Manual Host सक्षम करें और Gateway होस्ट + पोर्ट दर्ज करें (डिफ़ॉल्ट 18789)।

एकाधिक Gateway

ऐप अपने साथ युग्मित प्रत्येक Gateway की रजिस्ट्री रखता है, ताकि दोबारा युग्मित किए बिना उनके बीच स्विच किया जा सके:

  • Settings -> Gateway सक्रिय Gateway को चिह्नित करते हुए Paired Gateways सूची दिखाता है। स्विच करने के लिए किसी प्रविष्टि पर टैप करें; ऐप वर्तमान सत्र समाप्त करता है और चयनित Gateway से पुनः कनेक्ट होता है। एक से अधिक Gateway युग्मित होने पर कनेक्शन पंक्ति के पास त्वरित-स्विच मेन्यू दिखाई देता है।
  • क्रेडेंशियल, TLS विश्वास निर्णय, प्रत्येक Gateway की प्राथमिकताएँ और कैश किया गया चैट इतिहास प्रत्येक Gateway के लिए अलग-अलग संग्रहीत होते हैं। स्विच करने से Gateway के बीच स्थिति कभी मिश्रित नहीं होती और पुश पंजीकरण सक्रिय Gateway का अनुसरण करता है।
  • किसी युग्मित Gateway को स्वाइप करें (या उसके संदर्भ मेन्यू का उपयोग करें) और उसे Forget करें, जिससे उसके क्रेडेंशियल, डिवाइस टोकन, TLS पिन और कैश की गई चैट हट जाती हैं।
  • खोजे गए Gateway पर स्विच करने के लिए उनका नेटवर्क पर दिखाई देना आवश्यक है; मैन्युअल Gateway सहेजे गए होस्ट और पोर्ट से पुनः कनेक्ट होते हैं।

Canvas + A2UI

iOS Node एक WKWebView Canvas रेंडर करता है। उसे नियंत्रित करने के लिए node.invoke का उपयोग करें:

bash
openclaw nodes invoke --node "iOS Node" --command canvas.navigate --params '{"url":"http://<gateway-host>:18789/__openclaw__/canvas/"}'

टिप्पणियाँ:

  • Gateway Canvas होस्ट, Gateway HTTP सर्वर से /__openclaw__/canvas/ और /__openclaw__/a2ui/ प्रदान करता है (gateway.port के समान पोर्ट, डिफ़ॉल्ट 18789)।
  • iOS Node अंतर्निहित स्कैफ़ोल्ड को कनेक्टेड डिफ़ॉल्ट दृश्य के रूप में बनाए रखता है। canvas.a2ui.push और canvas.a2ui.reset बंडल किए गए ऐप-स्वामित्व वाले A2UI पृष्ठ का उपयोग करते हैं।
  • रिमोट Gateway A2UI पृष्ठ iOS पर केवल रेंडर करने योग्य हैं; नेटिव A2UI बटन क्रियाएँ केवल बंडल किए गए ऐप-स्वामित्व वाले पृष्ठों से स्वीकार की जाती हैं।
  • canvas.navigate और {"url":""} के साथ अंतर्निहित स्कैफ़ोल्ड पर वापस जाएँ।

Computer Use से संबंध

iOS ऐप एक मोबाइल Node सतह है, Codex Computer Use बैकएंड नहीं। Codex Computer Use और cua-driver mcp MCP टूल के माध्यम से स्थानीय macOS डेस्कटॉप को नियंत्रित करते हैं; iOS ऐप canvas.*, camera.*, screen.*, location.* और talk.* जैसे OpenClaw Node कमांड के माध्यम से iPhone क्षमताएँ उपलब्ध कराता है।

एजेंट अब भी Node कमांड लागू करके OpenClaw के माध्यम से iOS ऐप संचालित कर सकते हैं, लेकिन वे कॉल Gateway Node प्रोटोकॉल के माध्यम से जाते हैं और iOS की फ़ोरग्राउंड/बैकग्राउंड सीमाओं का पालन करते हैं। स्थानीय डेस्कटॉप नियंत्रण के लिए Codex Computer Use और iOS Node क्षमताओं के लिए इस पृष्ठ का उपयोग करें।

Canvas मूल्यांकन / स्नैपशॉट

bash
openclaw nodes invoke --node "iOS Node" --command canvas.eval --params '{"javaScript":"(() => { const {ctx} = window.__openclaw; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}'
bash
openclaw nodes invoke --node "iOS Node" --command canvas.snapshot --params '{"maxWidth":900,"format":"jpeg"}'

वॉइस वेक + टॉक मोड

  • वॉइस वेक और टॉक मोड Settings में उपलब्ध हैं।
  • talk.realtime.transport के webrtc होने पर OpenAI रियलटाइम Talk क्लाइंट-स्वामित्व वाले WebRTC का उपयोग करता है; स्पष्ट gateway-relay कॉन्फ़िगरेशन का स्वामित्व Gateway के पास रहता है। टॉक मोड देखें।
  • Talk-सक्षम iOS Node, talk क्षमता का विज्ञापन करते हैं और talk.ptt.start, talk.ptt.stop, talk.ptt.cancel तथा talk.ptt.once घोषित कर सकते हैं; Gateway विश्वसनीय Talk-सक्षम Node के लिए उन पुश-टू-टॉक कमांड को डिफ़ॉल्ट रूप से अनुमति देता है।
  • iOS बैकग्राउंड ऑडियो निलंबित कर सकता है; ऐप के सक्रिय न होने पर वॉइस सुविधाओं को सर्वोत्तम-प्रयास मानें।

सामान्य त्रुटियाँ

  • NODE_BACKGROUND_UNAVAILABLE: iOS ऐप को फ़ोरग्राउंड में लाएँ (Canvas/कैमरा/स्क्रीन कमांड के लिए यह आवश्यक है)।
  • A2UI_HOST_UNAVAILABLE: बंडल किया गया A2UI पृष्ठ ऐप WebView में उपलब्ध नहीं था; ऐप को Screen टैब पर फ़ोरग्राउंड में रखें और पुनः प्रयास करें।
  • युग्मन संकेत कभी दिखाई नहीं देता: openclaw devices list चलाएँ और मैन्युअल रूप से स्वीकृति दें।
  • Watch कोई iPhone स्थिति नहीं दिखाता: पुष्टि करें कि iPhone, watch.status में watchPaired: true और watchAppInstalled: true रिपोर्ट करता है। यदि युग्मन false है, तो Apple के Watch ऐप में Watch को युग्मित करें। यदि इंस्टॉलेशन false है, तो सहायक ऐप को My Watch -> Available Apps से इंस्टॉल करें। किसी भी बदलाव के बाद Watch पर OpenClaw को एक बार खोलें; तत्काल पहुँच के लिए अभी भी दोनों ऐप का चलना आवश्यक है, जबकि कतारबद्ध अपडेट बाद में बैकग्राउंड में पहुँच सकते हैं।
  • दोबारा इंस्टॉल करने के बाद पुनः कनेक्शन विफल होता है: Keychain युग्मन टोकन साफ़ हो गया था; Node को फिर से युग्मित करें।

संबंधित दस्तावेज़

Was this useful?
On this page

On this page