Identificação de usuários
Conecte os dispositivos ao usuário logado com external_id e um token assinado no seu servidor.
Loading documentation…
Sem identificação, cada navegador que aceita notificações vira um assinante anônimo. Quando você informa o ID do usuário no seu sistema, o external_id, os dispositivos da mesma pessoa ficam no mesmo assinante. Assim dá para segmentar por dados da conta e apagar tudo de uma pessoa com uma chamada só.
O external_id sai do navegador, e qualquer pessoa pode abrir o console e trocar o valor. Para impedir que alguém se inscreva como outro usuário e passe a receber as notificações dele, a API só aceita o external_id acompanhado de um token assinado com um segredo que só o seu servidor conhece.
O token é o HMAC-SHA256 do external_id, em hexadecimal minúsculo, com o segredo de identidade do site como chave. O segredo fica em Desenvolvedor › Chaves de API no painel.
Gere o token no servidor e mande para a página só o resultado. Com o segredo no JavaScript, qualquer um consegue assinar qualquer ID.
O ID assinado precisa ser exatamente o mesmo texto passado ao SDK. 42 e "42" dão o mesmo resultado porque ambos viram o texto 42, mas user-42 e 42 não.
Renderize o ID e o token na página do usuário logado e chame login pela fila de comandos, antes de o SDK carregar:
Dessa forma o login vai junto na inscrição automática. Se o usuário fizer login depois que o SDK carregou, chame login e em seguida subscribe para enviar na hora.
Quando a inscrição chega com external_id e token válido:
| Situação | Resultado |
|---|---|
Já existe assinante com esse external_id | O dispositivo passa para ele. |
| O dispositivo era de um assinante anônimo | O anônimo recebe o external_id e mantém tags e atributos. |
| O dispositivo era de outro usuário identificado | Ele passa para o assinante do novo external_id, que é criado se não existir. |
Com token inválido ou ausente, a API recusa a inscrição inteira com 422 e a mensagem O external_id não tem uma assinatura válida do publisher. O dispositivo não é registrado nem atualizado.
Não existe comando de logout. Depois que o usuário sai, o dispositivo continua ligado ao último assinante identificado, e inscrições sem external_id não desfazem a ligação. Se for outro usuário a entrar no mesmo navegador, o login dele move o dispositivo.
Se o seu caso exige que um navegador compartilhado pare de receber notificações da conta anterior, chame pushwi("unsubscribe") no logout.