Skip to main content
Коли ви відкриваєте сторінку зв’язування у спливаючому вікні, ваша власна сторінка може слухати, що в ньому відбувається: ваш користувач підключив Reddit, він відмовився, підключення зазнало невдачі. Ви отримуєте подію на кожен результат, тож ваш UI оновлюється в момент події, а не за таймером. Задайте origin під час створення посилання, відкрийте повернений url у спливаючому вікні й слухайте. Більше нічого не потрібно, і нічого не змінюється для посилань, створених без origin, — вони поводяться точно так, як завжди.
Використовуєте вбудований віджет? Це вже налаштовано за вас. Скрипт отримує ці події та передає їх у connect.on("success", …) з відкинутим префіксом connect: — без слухача message, без перевірки origin, без опитування popup.closed, які довелося б писати. Ця сторінка — дротовий протокол під усім цим і те, з чим ви працюєте, коли вікном володієте ви: прямий режим або спливаюче вікно, яке ви відкриваєте самостійно.
Події надсилаються лише на точний origin, який ви задали на посиланні, і лише вікну, яке відкрило спливаюче вікно. Все одно завжди перевіряйте event.origin у своєму слухачі: будь-яка сторінка може надіслати повідомлення вашому вікну, а origin — єдина частина повідомлення, яку не можна підробити.

Події

Кожне повідомлення, надіслане вашій сторінці, — це об’єкт у формі { source: "ayrshare", version: 1, event, ... }, і воно несе network щоразу, коли подія про якусь мережу. Дві події — ні: connect:closed із хостованої сторінки зв’язування, де воно означає, що ваш користувач натиснув Done, а не що завершилося одне підключення, і connect:ready віджета (див. нижче). Результати, які синтезує ваш власний код — заблоковане спливаюче вікно або вікно, закрите вашим користувачем, — надходять не від нас і несуть лише те, що ви їм дасте.
Вбудований віджет відрізняється однією подією. Його ready оголошує, що слот піднявся, а не щось про мережу, тож він не несе network — тоді як ready спливаючого вікна називає мережу, для якої його відкрили. Якщо ви опрацьовуєте обидві поверхні одним слухачем, читайте network на ready обережно.Віджет також додає одну причину cancelled, яку ця поверхня ніколи не надсилає: superseded, коли другий виклик popup() замінює спробу, що ще триває. Тут одне вікно й один результат, тож нема чого заміняти.
Рівно одна з подій connect:success, connect:error або connect:cancelled надходить на кожне підключення. connect:closed не є однією з них — вона йде слідом, щоб сказати вам, що спливаюче вікно закрилося навмисно. connect:success надсилається лише після збереження акаунта, тож GET /user одразу після неї вже показує підключений акаунт.
Спливаюче вікно залишається відкритим після connect:error, щоб ваш користувач міг прочитати, що пішло не так. Воно закривається самостійно після connect:success і connect:cancelled. Додайте &autoClose=false до URL, щоб тримати його відкритим у кожному випадку, поки ви налагоджуєте.

Прослуховування

Дві речі, які робить цей фрагмент і які легко пропустити. Він перевіряє event.origin і стежить за спливаючим вікном, закритим вашим користувачем вручну — закрите вікно не може нічого надіслати, тож опитування — єдиний спосіб це помітити.

Помилки

connect:error несе ті самі коди, що й решта API, тож код, який ви бачите тут, означає те саме, що й будь-де інде. Єдиний специфічний для цієї поверхні: Усе інше — власна невдача соціальної мережі, повідомлена з тим кодом, який ця невдача вже має — наприклад, 322 для проблеми авторизації Instagram, що включає акаунт, який усе ще Personal, а не Professional.

Мертве посилання надходить інакше

Посилання, яке прострочене, відкликане або невідоме, відхиляється до того, як сторінка встигне дізнатися, куди надсилати події, тож надіслати їх воно не може. Ваш користувач бачить причину та її код на екрані, а ваша сторінка чує connect:cancelled, коли він закриває вікно. Щоб їх розрізнити, опитуйте Отримання Link Session: воно авторитетно повідомляє expired і revoked та повертає 502 для посилання, якого не існує.

Якщо ви радше не керуватимете спливаючим вікном

Два варіанти, і лише другий відмовляється від подій. Нехай вікном володіє віджет. Вбудований віджет відкриває його й стежить за ним за вас і доставляє кожну з наведених вище подій вашим обробникам. Ви все одно отримуєте success у момент збереження акаунта; ви просто не пишете сантехніку. Його фрейми також означають, що більшість мереж узагалі не відкривають спливаючого вікна до власного входу мережі. Опитуйте натомість. Якщо спливаюче вікно справді недоступне — застосунок із серверним рендерингом або мобільний застосунок, що відкриває посилання в системному браузері, — опитуйте Отримання Link Session. Воно повідомляє completedAt і completedNetworks, щойно акаунт збережено — це той самий момент, коли було б надіслано connect:success. Telegram завжди завершується саме так, оскільки він завершує підключення поза основним потоком, без жодного браузерного колбека.