Skip to main content
Cuando abres una página de vinculación en una ventana emergente, tu propia página puede escuchar lo que ocurre en ella: tu usuario conectó Reddit, se echó atrás, la conexión falló. Recibes un evento por resultado, así que tu UI se actualiza en el momento en que sucede en lugar de con un temporizador. Establece origin al crear el enlace, abre la url devuelta en una ventana emergente y escucha. No se requiere nada más, y nada cambia para los enlaces creados sin origin — se comportan exactamente como siempre.
¿Usas el widget incrustado? Esto ya está cableado por ti. El script recibe estos eventos y los entrega a connect.on("success", …) con el prefijo connect: eliminado — sin listener de message, sin comprobación de origen, sin polling de popup.closed que escribir. Esta página es el protocolo de cable subyacente, y aquello contra lo que construyes cuando la ventana es tuya: el modo directo, o una ventana emergente que abres tú mismo.
Los eventos se envían solo al origin exacto que estableciste en el enlace, y solo a la ventana que abrió la ventana emergente. Comprueba event.origin en tu listener de todos modos: cualquier página puede enviar un mensaje a tu ventana, y el origen es la única parte de un mensaje que no se puede falsificar.

Los eventos

Cada mensaje enviado a tu página es un objeto con la forma { source: "ayrshare", version: 1, event, ... }, y lleva network siempre que el evento trate de una red. Dos eventos no lo hacen: un connect:closed procedente de la página de vinculación alojada, donde significa que tu usuario pulsó Done y no que una conexión terminó, y el connect:ready del widget (mira abajo). Los resultados que sintetiza tu propio código — una ventana emergente bloqueada, o una ventana que tu usuario cerró — no proceden de nosotros y llevan solo lo que tú les des.
El widget incrustado difiere en un evento. Su ready anuncia que un slot está listo y no nada sobre una red, así que no lleva network — mientras que el ready de la ventana emergente nombra la red para la que se abrió. Si gestionas ambas superficies desde un solo listener, lee network a la defensiva en ready.El widget también añade una razón de cancelled que esta superficie nunca envía: superseded, cuando una segunda llamada a popup() reemplaza un intento aún en curso. Aquí hay una ventana y un resultado, así que no hay nada que reemplazar.
Exactamente uno de connect:success, connect:error o connect:cancelled llega por conexión. connect:closed no es uno de ellos — llega después, para decirte que la ventana emergente se cerró a propósito. connect:success se envía solo después de que la cuenta se haya guardado, así que un GET /user inmediatamente después ya muestra la cuenta conectada.
La ventana emergente permanece abierta tras connect:error para que tu usuario pueda leer qué salió mal. Se cierra sola tras connect:success y connect:cancelled. Añade &autoClose=false a la URL para mantenerla abierta en todos los casos mientras depuras.

Escuchar

Dos cosas que hace este snippet y que son fáciles de omitir. Comprueba event.origin, y vigila una ventana emergente que tu usuario cerró a mano — una ventana cerrada no puede enviar nada, así que el polling es la única forma de notarlo.

Errores

connect:error lleva los mismos códigos que el resto de la API, así que un código que veas aquí significa lo mismo que en cualquier otro sitio. El específico de esta superficie: Cualquier otra cosa es un fallo de la propia red social, reportado con el código que ese fallo ya tenga — por ejemplo 322 para un problema de autorización de Instagram, lo que incluye una cuenta que sigue siendo Personal en lugar de Professional.

Un enlace muerto llega de otra manera

Un enlace caducado, revocado o desconocido se rechaza antes de que la página pueda saber adónde enviar eventos, así que no puede enviar ninguno. Tu usuario ve el motivo y su código en pantalla, y tu página oye connect:cancelled cuando cierra la ventana. Para distinguirlos, haz polling de Obtener una Link Session: informa de expired y revoked con autoridad, y devuelve 502 para un enlace que no existe.

Si prefieres no gestionar una ventana emergente

Dos opciones, y solo la segunda renuncia a los eventos. Deja que el widget sea el dueño de la ventana. El widget incrustado la abre y la supervisa por ti y entrega todos los eventos de arriba a tus handlers. Sigues recibiendo success en el momento en que una cuenta se guarda; simplemente no escribes la fontanería. Sus frames además hacen que la mayoría de las redes no abran ninguna ventana emergente hasta el login de la propia red. Haz polling en su lugar. Si una ventana emergente no está genuinamente disponible — una app renderizada en servidor, o una app móvil que abre el enlace en el navegador del sistema — haz polling de Obtener una Link Session. Informa de completedAt y completedNetworks en cuanto una cuenta se guarda, que es el mismo momento en que se habría enviado connect:success. Telegram siempre termina de esta manera, ya que completa fuera de banda sin ningún callback de navegador.