Яка поверхня вам потрібна
Три форми, і перші дві — це та сама інтеграція. Ця сторінка — та, яку ви будуєте самостійно.
Ваша кнопка, ваша сторінка. Спливаюче вікно — єдине наше, що бачить ваш користувач, і лише стільки, скільки потрібно мережі.
Що ви будуєте
Чотири кроки. Перший — на вашому сервері, решта — на вашій сторінці.Створіть сесію для однієї мережі
mode: "connect", мережею
network та origin, на якому працює ваша сторінка.url, що вказує на сторінку підключення однієї мережі, і жодного
token — токен усередині URL. Ставтеся до всього URL як до пароля: він авторизує вашого
користувача в його User Profile.Відкрийте його в обробнику кліку, синхронно
window.open у самому обробнику кліку. Браузер
дозволяє спливаюче вікно, лише поки він ще опрацьовує клік вашого користувача, і цей дозвіл не
переживає await — тож отримання URL спершу і його відкриття в колбеку надійно блокується
блокувальником спливаючих вікон.Отримуйте URL, коли рендерите кнопку, або коли ваш користувач наводить на неї курсор. До
моменту кліку він уже має бути у вас.Слухайте результат
origin, спливаюче вікно надсилає вашій сторінці подію на кожну річ, що
в ньому відбувається: connect:success, connect:error, connect:cancelled і проміжні події
прогресу. Рівно одна з цих трьох надходить на кожне підключення.Події завершення зв’язування містять повну таблицю
подій і готовий до копіювання слухач — listenForOutcome вище і є тим фрагментом. Дві його
частини легко пропустити, і обидві спричиняють реальні баги:- Перевіряйте
event.originпроти origin URL, який ви відкрили. Будь-яка сторінка може надіслати повідомлення вашому вікну, а origin — єдина частина повідомлення, яку не можна підробити. - Опитуйте
popup.closed, з коротким пільговим вікном, перш ніж робити висновки. Спливаюче вікно, закрите вашим користувачем вручну, не надсилає взагалі нічого, і без пільгового вікна успішне підключення може бути повідомлене як скасоване.
Опрацюйте кожне завершення
Нотатки для окремих мереж
Більшість мереж — це одне спливаюче вікно і нічого більше: ваш користувач натискає, авторизується в мережі, і спливаюче вікно закривається. Ось винятки, про які варто знати перед розробкою.X вимагає ваших власних API keys
X вимагає ваших власних API keys
X-Twitter-OAuth1-Api-Key і X-Twitter-OAuth1-Api-Secret у
Створенні Link Session.Сесія, створена для twitter або x без цих заголовків, відхиляється, коли спливаюче
вікно відкривається: вашому користувачу кажуть, що підключення недоступне, і не показують
жодної форми, а ваша сторінка отримує connect:error з message і без code. Це
навмисно. Відсутні облікові дані — ваші, а не вашого користувача, і кінцевих користувачів
ніколи не можна просити вводити ваші API keys.Порівняйте з Bluesky, де app password — власні облікові дані кінцевого користувача: їх сторінка
підключення таки збирає, у формі всередині спливаючого вікна.Facebook показує одну кнопку перед входом Meta
Facebook показує одну кнопку перед входом Meta
network: "facebook" показує одну кнопку у спливаючому вікні, і власний вхід Meta
відкривається з цього кліку — Meta вимагає, щоб її вхід було розпочато кліком усередині
сторінки, яка хостить її SDK. Ваш користувач клікає двічі замість одного разу; більше нічого не
відрізняється.Instagram поводиться так само, коли він зв’язується через Facebook Page — тобто коли сесія
несе instagramLinkMethod: "facebook" або коли налаштування
Instagram Login вашого акаунту вибирає
цей потік. За прямого Instagram Login додаткової кнопки немає.Bluesky і Telegram показують вміст сторінки, а не перенаправлення
Bluesky і Telegram показують вміст сторінки, а не перенаправлення
Telegram завершується поза основним потоком
Telegram завершується поза основним потоком
completedNetworks.Facebook Groups не можна підключити цим способом
Facebook Groups не можна підключити цим способом
network: "fbg" повертає code: 508 під час
створення сесії.WhatsApp у прямому режимі доступний. Він відкриває Embedded Signup від Meta у спливаючому
вікні, а події результату такі самі, як у будь-якій іншій мережі.Нативні застосунки
Нативний застосунок відкриває той самийurl у системному браузері й дізнається результат,
опитуючи Отримання Link Session. Задайте origin як вашу
власну схему (myapp://connected), щоб сторінка мала шлях назад у ваш застосунок; власна схема не
може отримувати події, бо немає вікна браузера, куди їх надсилати.
- iOS —
ASWebAuthenticationSessionабоSFSafariViewController. - Android — Chrome Custom Tabs.
Що вимагає прямий режим
- Max Pack. Створення сесії в режимі connect без нього повертає
code: 504, хай там що ще каже запит. originна кожній сесії. Немає allowlist і кроку реєстрації — ви надсилаєте його з кожним викликом. Його пропуск повертаєcode: 505; значення, яке не є originhttps, власною схемою абоhttp://localhost, повертаєcode: 506.network, яку ваш акаунт увімкнув. Нерозпізнана назва повертаєcode: 508; розпізнана, але не ввімкнена вашим акаунтом, повертаєcode: 509, що можна виправити на вашій сторінці Social Networks.- Не
allowedSocial. Його не можна поєднувати зnetwork(code: 507) — сесія однієї мережі вже сама собі allowlist.
Наступні кроки
Події завершення зв'язування
Пов’язане
Створення Link Session
mode, origin і network та форми відповіді.