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 verificaevent.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 morto chega de forma diferente
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 ouveconnect: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 recebesuccess 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.