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. Compruebaevent.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 oyeconnect: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 recibiendosuccess 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.