Skip to main content
Quando você abre uma página de vinculação em um popup, sua própria página pode ouvir o que acontece nele: seu usuário conectou o Reddit, ele desistiu, a conexão falhou. Você recebe um evento por desfecho, então sua UI atualiza no momento em que acontece, e não em um timer. Defina origin ao criar o link, abra a url retornada em um popup e ouça. Nada mais é necessário, e nada muda para links criados sem origin — eles se comportam exatamente como sempre se comportaram.
Usando o widget incorporado? Isto já está pronto para você. O script recebe esses eventos e os entrega a connect.on("success", …) com o prefixo connect: removido — nenhum listener de message, nenhuma verificação de origem, nenhum polling de popup.closed para escrever. Esta página é o protocolo de transmissão por baixo, e o que você usa quando você é dono da janela: modo direto, ou um popup que você mesmo abre.
Os eventos são enviados apenas para o origin exato que você definiu no link, e apenas para a janela que abriu o popup. Ainda assim, sempre verifique event.origin no seu listener: qualquer página pode enviar uma mensagem à sua janela, e a origem é a única parte de uma mensagem que não pode ser falsificada.

Os eventos

Cada mensagem enviada à sua página é um objeto no formato { source: "ayrshare", version: 1, event, ... }, e carrega network sempre que o evento é sobre uma. Dois eventos não são: um connect:closed vindo da página de vinculação hospedada, onde ele significa que seu usuário pressionou Done e não que uma conexão terminou, e o connect:ready do widget (veja abaixo). Os desfechos que o seu próprio código sintetiza — um popup bloqueado, ou uma janela que seu usuário fechou — não vêm de nós e carregam apenas o que você lhes der.
O widget incorporado difere em um evento. Seu ready anuncia que um slot está de pé, e não algo sobre uma rede, então ele não carrega network — enquanto o ready do popup nomeia a rede para a qual foi aberto. Se você trata as duas superfícies em um único listener, leia network defensivamente em ready.O widget também adiciona um motivo de cancelled que esta superfície nunca envia: superseded, quando uma segunda chamada de popup() substitui uma tentativa ainda em andamento. Aqui há uma janela e um desfecho, então não há nada a substituir.
Exatamente um entre connect:success, connect:error ou connect:cancelled chega por conexão. connect:closed não é um deles — ele vem depois, para dizer que o popup fechou de propósito. connect:success é enviado somente depois que a conta foi salva, então um GET /user logo em seguida já mostra a conta conectada.
O popup permanece aberto após connect:error para que seu usuário possa ler o que deu errado. Ele se fecha sozinho após connect:success e connect:cancelled. Adicione &autoClose=false à URL para mantê-lo aberto em todos os casos enquanto você estiver depurando.

Ouvindo

Duas coisas que este snippet faz e que são fáceis de deixar de fora. Ele verifica event.origin e observa um popup que seu usuário fechou manualmente — uma janela fechada não pode enviar nada, então polling é a única forma de perceber.

Erros

connect:error carrega os mesmos códigos que o resto da API, então um código que você vê aqui significa o que ele significa em todos os outros lugares. O único específico desta superfície: Qualquer outra coisa é uma falha da própria rede social, reportada com o código que essa falha já tem — por exemplo 322 para um problema de autorização do Instagram, o que inclui uma conta que ainda é Pessoal em vez de Profissional. Um link expirado, revogado ou desconhecido é recusado antes de a página poder saber para onde enviar eventos, então ele não pode enviar nenhum. Seu usuário vê o motivo e o código na tela, e sua página ouve connect:cancelled quando ele fecha a janela. Para distingui-los, faça polling em Consultar uma Link Session: ela reporta expired e revoked de forma autoritativa, e retorna 502 para um link que não existe.

Se você prefere não gerenciar um popup

Duas opções, e só a segunda abre mão dos eventos. Deixe o widget ser dono da janela. O widget incorporado a abre e observa por você e entrega todos os eventos acima aos seus handlers. Você ainda recebe success no momento em que uma conta é salva; você só não escreve o encanamento. Seus frames também significam que a maioria das redes nunca abre popup algum até o login da própria rede. Faça polling em vez disso. Se um popup genuinamente não está disponível — um app renderizado no servidor, ou um app mobile abrindo o link no navegador do sistema — faça polling em Consultar uma Link Session. Ela reporta completedAt e completedNetworks assim que uma conta é salva, que é o mesmo momento em que connect:success teria sido enviado. O Telegram sempre termina desta forma, já que ele conclui fora do fluxo, sem nenhum callback de navegador.