Qué superficie quieres
Tres formas, y las dos primeras son la misma integración. Esta página es la que construyes tú mismo.El modo directo es la ventana emergente de la tercera fila sin nuestro script. Si tu página
puede cargar el script, el widget hace por ti todo lo de esta
página — abre y supervisa la ventana emergente él mismo, y además puede incrustar frames. El modo
directo es lo que quieres cuando tu página no puede cargar un script de terceros, o la superficie
es una app nativa en lugar de un navegador.

Tu botón, tu página. La ventana emergente es lo único nuestro que ve tu usuario, y solo durante el tiempo que la red necesita.
Qué construyes
Cuatro pasos. El primero está en tu servidor, el resto en tu página.1
Crea una sesión para una red
Desde tu backend, llama a
Crear una Link Session con Recibes de vuelta una
mode: "connect", la
network y el origin en el que corre tu página.Your backend
url que apunta a una página de conexión de una sola red, y ningún
token — el token está dentro de la URL. Trata la URL completa como una contraseña: inicia la
sesión de tu usuario en su User Profile.2
Ábrela en el manejador de clic, de forma síncrona
La ventana emergente tiene que abrirse con
window.open en el propio manejador de clic. Un
navegador solo permite una ventana emergente mientras todavía está procesando el clic de tu
usuario, y ese permiso no sobrevive a un await — así que obtener primero la URL y abrirla en el
callback acaba bloqueado por el navegador de forma fiable.Obtén la URL cuando renderices el botón, o cuando tu usuario pase el cursor por encima. Para
cuando llegue el clic ya deberías tenerla.Your page
3
Escucha el resultado
Como pasaste
origin, la ventana emergente envía un evento a tu página por cada cosa que
ocurre en ella: connect:success, connect:error, connect:cancelled, y eventos de progreso
entre medias. Llega exactamente uno de esos tres por conexión.Eventos de finalización de vinculación tiene la tabla
completa de eventos y un listener para copiar y pegar — listenForOutcome de arriba es ese
snippet. Hay dos partes de él fáciles de omitir y ambas causan bugs reales:- Comprueba
event.origincontra el origen de la URL que abriste. 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. - Haz polling de
popup.closed, con una pequeña ventana de gracia antes de concluir nada. Una ventana emergente que tu usuario cerró a mano no envía absolutamente nada, y sin la ventana de gracia una conexión con éxito puede reportarse como cancelada.
4
Gestiona cada final
Notas por red
La mayoría de las redes son una ventana emergente y nada más: tu usuario hace clic, autoriza en la red, y la ventana emergente se cierra. Estas son las excepciones que conviene conocer antes de construir.X requiere tus propias API keys
X requiere tus propias API keys
X en modo directo usa tus credenciales de X Developer App, proporcionadas al crear la
sesión como las cabeceras
X-Twitter-OAuth1-Api-Key y X-Twitter-OAuth1-Api-Secret en
Crear una Link Session.Una sesión creada para twitter o x sin esas cabeceras se rechaza cuando la ventana
emergente se abre: a tu usuario se le dice que la conexión no está disponible y no se le muestra
ningún formulario, y tu página recibe connect:error con un message y sin code. Eso es
deliberado. La credencial que falta es tuya, no de tu usuario, y a los usuarios finales nunca se
les debe pedir que escriban tus API keys.Contrasta con Bluesky, donde la app password es la credencial propia del usuario final — esa sí
la recoge la página de conexión, en un formulario dentro de la ventana emergente.Facebook muestra un botón antes del login de Meta
Facebook muestra un botón antes del login de Meta
network: "facebook" muestra un único botón en la ventana emergente, y el login propio de Meta
se abre a partir de ese clic — Meta exige que su login lo inicie un clic dentro de la página que
aloja su SDK. Tu usuario hace clic dos veces en lugar de una; nada más difiere.Instagram se comporta igual cuando se vincula a través de una Facebook Page — es decir,
cuando la sesión lleva instagramLinkMethod: "facebook", o cuando el ajuste
Instagram Login de tu cuenta selecciona
ese flujo. Con Instagram Login directo no hay botón extra.Bluesky y Telegram muestran contenido en la página, no una redirección
Bluesky y Telegram muestran contenido en la página, no una redirección
Ninguna de las dos envía a tu usuario a un login de la red. La ventana emergente renderiza
contenido en su lugar: un formulario de handle y app password para Bluesky, y un código que usar
para Telegram. Los eventos de resultado son los mismos en cualquier caso.X no pertenece a este grupo. Con tus keys en la sesión completa el proceso sin pedirle nada a tu
usuario, y sin ellas se rechaza — mira arriba.
Telegram termina fuera de banda
Telegram termina fuera de banda
Telegram muestra un código en lugar de redirigir a ninguna parte, y la conexión se completa
cuando tu usuario usa ese código — después de que la ventana emergente haya desaparecido. No hay
ningún evento de navegador que esperar, así que haz polling de
Obtener una Link Session y observa
completedNetworks.Los grupos de Facebook no pueden conectarse de esta manera
Los grupos de Facebook no pueden conectarse de esta manera
Facebook Groups no es un destino de vinculación, así que
network: "fbg" devuelve code: 508
al crear la sesión.WhatsApp sí está disponible en modo directo. Abre el Embedded Signup de Meta en la ventana
emergente, y los eventos de resultado son los mismos que con cualquier otra red.Apps nativas
Una app nativa abre la mismaurl, en el navegador del sistema, y averigua el resultado haciendo
polling de Obtener una Link Session. Establece origin con tu
esquema personalizado (myapp://connected) para que la página tenga una vía de vuelta a tu app; un
esquema personalizado no puede recibir eventos, porque no hay ventana de navegador a la que
enviarlos.
- iOS —
ASWebAuthenticationSession, oSFSafariViewController. - Android — Chrome Custom Tabs.
Qué requiere el modo directo
- El Max Pack. Crear una sesión en modo connect sin él devuelve
code: 504, diga lo que diga el resto de la solicitud. - Un
originen cada sesión. No hay allowlist ni paso de registro — lo envías en cada llamada. Omitirlo devuelvecode: 505; un valor que no sea un origenhttps, un esquema personalizado ohttp://localhostdevuelvecode: 506. - Una
networkque tu cuenta tenga habilitada. Un nombre no reconocido devuelvecode: 508; uno reconocido que tu cuenta no ha habilitado devuelvecode: 509, que puedes arreglar en tu página Social Networks. - No
allowedSocial. No puede combinarse connetwork(code: 507) — una sesión de una sola red ya es su propia allowlist.
Próximos pasos
Eventos de finalización de vinculación
Todos los eventos que envía la ventana emergente, y el listener para recibirlos.
Relacionado
Crear una Link Session
Los parámetros
mode, origin y network, y las formas de la respuesta.Obtener una Link Session
Haz polling de la finalización cuando no puedas usar una ventana emergente.