url एक पॉपअप में खोलते
हैं, और आपका पेज सुनता है कि क्या हुआ। आपका उपयोगकर्ता कभी हर नेटवर्क की सूची वाला पेज नहीं
देखता, और नेटवर्क के अपने लॉगिन से अधिक देर के लिए कभी आपका ऐप नहीं छोड़ता।
आपको कौन सा सरफ़ेस चाहिए
तीन रूप, और पहले दो एक ही इंटीग्रेशन हैं। यह पेज वह है जो आप स्वयं बनाते हैं।डायरेक्ट मोड तीसरी row का पॉपअप है, हमारी स्क्रिप्ट के बिना। यदि आपका पेज स्क्रिप्ट लोड कर
सकता है, तो विजेट इस पेज का सब कुछ आपके लिए करता है — वह
पॉपअप स्वयं खोलता और देखता है, और फ़्रेम भी embed कर सकता है। डायरेक्ट मोड तब चाहिए जब आपका
पेज कोई third-party स्क्रिप्ट लोड नहीं कर सकता, या सरफ़ेस ब्राउज़र के बजाय native ऐप है।

आपका बटन, आपका पेज। पॉपअप ही हमारी एकमात्र चीज़ है जो आपका उपयोगकर्ता देखता है, और केवल उतनी देर के लिए जितनी नेटवर्क को चाहिए।
आप क्या बनाते हैं
चार चरण। पहला आपके server पर है, बाक़ी आपके पेज में।1
एक नेटवर्क के लिए सेशन बनाएँ
अपने backend से, आपको वापस एक
mode: "connect", network, और उस origin के साथ जिस पर आपका पेज चलता
है, Link Session बनाएँ को कॉल करें।Your backend
url मिलता है जो single-network connect पेज की ओर इशारा करता है, और कोई
token नहीं — token URL के अंदर है। पूरे URL को पासवर्ड की तरह मानें: यह आपके उपयोगकर्ता को
उनके User Profile में साइन इन कर देता है।2
इसे click handler में, synchronously खोलें
पॉपअप को
window.open से click handler के अंदर ही खोलना होगा। ब्राउज़र पॉपअप की अनुमति
केवल तब तक देता है जब तक वह आपके उपयोगकर्ता के क्लिक को process कर रहा होता है, और वह
अनुमति किसी await के बाद नहीं बचती — इसलिए पहले URL fetch करके उसे callback में खोलना
निश्चित रूप से popup-blocked होता है।URL तब fetch करें जब आप बटन render करते हैं, या जब आपका उपयोगकर्ता उस पर hover करता है।
क्लिक के समय तक वह आपके पास पहले से होना चाहिए।Your page
3
परिणाम के लिए सुनें
चूँकि आपने
origin पास किया, पॉपअप उसमें घटित होने वाली हर चीज़ के लिए आपके पेज पर एक event
पोस्ट करता है: connect:success, connect:error, connect:cancelled, और बीच में progress
events। प्रति कनेक्शन उन तीनों में से ठीक एक आता है।Link Completion Events पर पूरी event टेबल और
copy-paste listener है — ऊपर का listenForOutcome वही snippet है। उसके दो हिस्से छूट जाना
आसान है और दोनों वास्तविक bugs पैदा करते हैं:event.originजाँचें, उस URL के origin के विरुद्ध जो आपने खोला। कोई भी पेज आपकी विंडो को message पोस्ट कर सकता है, और origin ही message का एकमात्र हिस्सा है जिसे जाली नहीं बनाया जा सकता।popup.closedpoll करें, कोई निष्कर्ष निकालने से पहले एक छोटी grace window के साथ। जो पॉपअप आपके उपयोगकर्ता ने हाथ से बंद किया वह कुछ भी नहीं भेजता, और grace window के बिना एक सफल कनेक्शन cancelled के रूप में रिपोर्ट हो सकता है।
4
हर अंत को संभालें
प्रति-नेटवर्क नोट्स
अधिकांश नेटवर्क एक पॉपअप और बस इतना ही हैं: आपका उपयोगकर्ता क्लिक करता है, नेटवर्क पर authorize करता है, और पॉपअप बंद हो जाता है। ये वे अपवाद हैं जो बनाने से पहले जानने योग्य हैं।X के लिए आपकी अपनी API keys आवश्यक हैं
X के लिए आपकी अपनी API keys आवश्यक हैं
डायरेक्ट मोड में X आपकी X Developer App क्रेडेंशियल्स का उपयोग करता है, जो सेशन बनाते समय
Link Session बनाएँ पर
X-Twitter-OAuth1-Api-Key और
X-Twitter-OAuth1-Api-Secret हेडरों के रूप में दी जाती हैं।उन हेडरों के बिना twitter या x के लिए बनाया गया सेशन पॉपअप खुलते ही ठुकरा दिया जाता
है: आपके उपयोगकर्ता को बताया जाता है कि कनेक्शन उपलब्ध नहीं है और कोई फ़ॉर्म नहीं दिखाया
जाता, और आपके पेज को message और बिना code के connect:error मिलता है। यह जानबूझकर
है। गुम क्रेडेंशियल आपकी है, आपके उपयोगकर्ता की नहीं, और end users से कभी आपकी API keys टाइप
करने को नहीं कहा जाना चाहिए।इसकी तुलना Bluesky से करें, जहाँ app password end user की अपनी क्रेडेंशियल है — उसे connect
पेज पॉपअप के अंदर एक फ़ॉर्म में एकत्र ज़रूर करता है।Facebook, Meta के लॉगिन से पहले एक बटन दिखाता है
Facebook, Meta के लॉगिन से पहले एक बटन दिखाता है
network: "facebook" पॉपअप में एक अकेला बटन दिखाता है, और Meta का अपना लॉगिन उस क्लिक से
खुलता है — Meta को अपना लॉगिन उस पेज के अंदर के क्लिक से शुरू होना चाहिए जो उसका SDK होस्ट
करता है। आपका उपयोगकर्ता एक के बजाय दो बार क्लिक करता है; और कुछ भी अलग नहीं है।Instagram भी वैसा ही व्यवहार करता है जब वह Facebook Page के माध्यम से लिंक होता है —
यानी जब सेशन instagramLinkMethod: "facebook" ले जाता है, या जब आपके अकाउंट की
Instagram Login सेटिंग वह फ़्लो
चुनती है। सीधे Instagram Login के साथ कोई अतिरिक्त बटन नहीं है।Bluesky और Telegram redirect नहीं, पेज content दिखाते हैं
Bluesky और Telegram redirect नहीं, पेज content दिखाते हैं
दोनों में से कोई भी आपके उपयोगकर्ता को नेटवर्क लॉगिन पर नहीं भेजता। पॉपअप इसके बजाय content
render करता है: Bluesky के लिए handle और app-password फ़ॉर्म, और Telegram के लिए इस्तेमाल
करने का एक code। परिणाम events दोनों तरह से एक जैसे हैं।X इस समूह में नहीं आता। सेशन पर आपकी keys होने पर वह आपके उपयोगकर्ता से कुछ भी पूछे बिना पूरा
हो जाता है, और उनके बिना ठुकरा दिया जाता है — ऊपर देखें।
Telegram out of band पूरा होता है
Telegram out of band पूरा होता है
Telegram कहीं redirect करने के बजाय एक code दिखाता है, और कनेक्शन तब पूरा होता है जब आपका
उपयोगकर्ता उस code का उपयोग करता है — पॉपअप के जा चुकने के बाद। इंतज़ार करने के लिए कोई
ब्राउज़र event नहीं है, इसलिए Link Session प्राप्त करें को
poll करें और
completedNetworks पर नज़र रखें।Facebook Groups इस तरह कनेक्ट नहीं किए जा सकते
Facebook Groups इस तरह कनेक्ट नहीं किए जा सकते
Facebook Groups कोई link target नहीं है, इसलिए
network: "fbg" सेशन बनाते समय code: 508
लौटाता है।WhatsApp डायरेक्ट मोड में उपलब्ध है। वह पॉपअप में Meta का Embedded Signup खोलता है, और
परिणाम events किसी भी अन्य नेटवर्क जैसे ही हैं।Native ऐप्स
Native ऐप वहीurl खोलता है, सिस्टम ब्राउज़र में, और परिणाम
Link Session प्राप्त करें को poll करके पता करता है। origin
को अपनी custom scheme (myapp://connected) पर सेट करें ताकि पेज के पास आपके ऐप में लौटने का
रास्ता हो; custom scheme events प्राप्त नहीं कर सकती, क्योंकि उन्हें पोस्ट करने के लिए कोई ब्राउज़र
विंडो नहीं है।
- iOS —
ASWebAuthenticationSession, याSFSafariViewController। - Android — Chrome Custom Tabs।
डायरेक्ट मोड को क्या चाहिए
- Max Pack। इसके बिना connect-mode सेशन बनाने पर
code: 504लौटता है, बाक़ी अनुरोध चाहे जो कहे। - हर सेशन पर एक
origin। कोई allowlist नहीं है और कोई registration चरण नहीं — आप इसे प्रति कॉल भेजते हैं। इसे छोड़ने परcode: 505लौटता है; ऐसा मान जोhttpsorigin, custom scheme, याhttp://localhostनहीं है,code: 506लौटाता है। - ऐसा
networkजिसे आपके अकाउंट ने सक्षम किया है। अपरिचित नामcode: 508लौटाता है; पहचाना हुआ लेकिन आपके अकाउंट पर सक्षम न किया गया नामcode: 509लौटाता है, जिसे आप अपने Social Networks पेज पर ठीक कर सकते हैं। allowedSocialनहीं। इसेnetworkके साथ जोड़ा नहीं जा सकता (code: 507) — single-network सेशन पहले से अपनी ख़ुद की allowlist है।
अगले चरण
Link Completion Events
पॉपअप द्वारा भेजा जाने वाला हर event, और उन्हें प्राप्त करने वाला listener।
संबंधित
Create a Link Session
mode, origin और network पैरामीटर, और प्रतिक्रिया के आकार।Get a Link Session
जब आप पॉपअप का उपयोग नहीं कर सकते, तो पूर्णता के लिए poll करें।