Não remova todas as assinaturas de push ao encerrar a sessão

Além disso, parece que, quando um usuário faz logout, todas as assinaturas de push são excluídas. Portanto, se um usuário estiver logado em vários dispositivos (celular, navegador, tablet) e fizer logout de um dispositivo/sessão, isso impede que os outros dispositivos recebam notificações, pois suas assinaturas de push são excluídas.

Menciono isso porque está relacionado ao conhecimento de qual assinatura precisa ser substituída durante a renovação e qual assinatura deve ser excluída ao fazer logout.

6 curtidas

Bem, eu acabei de ser desconectado do Meta hoje e, após fazer login, recebi uma notificação push sobre sua postagem… A menos que isso só ocorra no caminho de login iniciado pelo usuário :thinking:

6 curtidas

Quando um usuário retorna ao fórum (ou faz login), as assinaturas de push do navegador são reenviadas e recriadas. No entanto, se você fez logout, elas são excluídas e nenhuma notificação push será entregue até que o usuário acesse o fórum a partir daquele dispositivo.

Isso não contradiz o que você afirmou, já que parece que você recebeu a notificação push após fazer login.

Referência do código:

6 curtidas

Ah, então é exatamente o que eu suspeitava.

Ótima descoberta! Precisamos corrigir isso com certeza!

O problema é que, atualmente, não armazenamos para qual dispositivo uma determinada assinatura existe…

8 curtidas

A Push API possui uma função unsubscribe para invalidar a assinatura de push:

No logout, invocaríamos isso (no lado do cliente), o que tornaria essa assinatura inválida no servidor sem afetar outras assinaturas.

Na verdade, o cliente já possui uma função unsubscribePushNotification que faz isso nas preferências de “Notificações em Tempo Real”. Talvez a solução seja invocar isso no logout, no lado do cliente, se as Notificações em Tempo Real estiverem habilitadas. Provavelmente é uma boa prática revogar as chaves de assinatura no lado do cliente em vez de apenas excluí-las do servidor.

2 curtidas

Assim, a correção pode ser feita em duas partes:

  1. Excluir o código de limpeza no lado do servidor
  2. Adicionar novo código para cancelar a inscrição no lado do cliente.
5 curtidas

Concluído em

https://meta.discourse.org/t/ios-android-push-notifications-on-self-hosted-discourse-docker/394149/18?u=falco

1 curtida

Este tópico foi automaticamente fechado após 4 dias. Novas respostas não são mais permitidas.