Isso é quase certamente apenas obra do Discourse. Eles simplesmente não enviam notificações se você usou o site há um certo número de minutos. Mas sem uma maneira para os usuários finais verem isso, isso apenas torna as notificações não confiáveis. Mas eu garanto, recebi notificações push do iOS para ambas as mensagens. Elas podem funcionar, desde que você saiba que nunca deve confiar nelas.
Eu acho que o problema é o inverso. Não usar o site no meu celular com frequência suficiente parece encerrar o recebimento de quaisquer notificações.
Talvez, mas estamos todos apenas adivinhando. A principal coisa que precisamos é que o Discourse forneça logs adequados aos usuários finais. Quais notificações o Discourse enviou? Quais notificações o Discourse decidiu não enviar?
Quando o PWA recebe uma notificação, ele pode registrar isso localmente no IndexedDB do dispositivo. Os usuários precisam ser capazes de visualizar esse log e correlacioná-lo com o log do servidor, para ver quando/se o Discourse enviou o push, mas o dispositivo não o recebeu.
Mas, no geral, eu diria: não assuma que o problema é culpa da Apple, e especialmente não assuma que apenas esperar pelo iOS 18 ajudará. Precisamos que o Discourse trabalhe nisso, ou nada jamais melhorará.
Isso me parece um registro muito, muito verboso:
Um registro verboso aqui, provavelmente é fácil o suficiente:
"Pulou a notificação de Sam sobre “payload” porque Sam estava online.
Mas se você quiser depurar isso, por que não definir SiteSetting.push_notification_time_window_mins para 0?
E então o próximo nível de registro se torna muito, muito verboso:
- Pulou a notificação porque o usuário tinha “não perturbe” ativado
- Tempo limite para o provedor de notificação push discourse/app/services/push_notification_pusher.rb at cacaa90f4d01452358322ea8b5564f15f4816c74 · discourse/discourse · GitHub
- Sub expirada
- Erro de resposta
Muitas coisas diferentes podem dar errado… embora a qualquer momento você provavelmente possa usar o DE para validar: procure na tabela push_subscriptions por inscrições de push da web atualizadas.
Para começar, devo dizer que, da minha perspectiva, o problema é que as pessoas estão escrevendo aqui e no meu fórum, dizendo “Eu acho que as notificações push não funcionam direito”, e outros usuários estão concordando, dizendo: “Sim! Eu também! As notificações devem estar quebradas/não confiáveis”. Às vezes, eles culpam a Apple, às vezes culpam o Discourse, mas todos concordam que as notificações push do Discourse são não confiáveis.
Eu adoraria poder investigar esses casos pessoalmente, dizendo “você não recebeu a notificação das 12:31 no seu telefone, e aqui está o porquê…” mas não acredito que isso seja possível atualmente.
Sim, muitas coisas diferentes podem dar errado, incluindo coisas do lado do cliente, que não posso investigar no DE.
- O Service Worker recebeu o evento push?
- O Service Worker chamou
showNotification? - A permissão
showNotificationfoi concedida, oushowNotificationnão fez nada? - O próprio dispositivo estava configurado para Não Perturbe?
Eu adoraria ter alguma documentação para administradores explicando como usar o DE para diagnosticar uma falha de push, pelo menos no que diz respeito a ver se a notificação foi enviada.
Mas eu também acho que seria incrivelmente útil manter um log do lado do cliente que os usuários pudessem me enviar, permitindo-me cruzar referências com o log do DE.
Primeiro, pelo menos metade das pessoas reclamando sobre isso não são administradores do fórum delas. É por isso que precisamos que o Discourse implemente isso:
Mas, sim, suspeito que definir isso para 0 eliminará 80% das reclamações de “não está funcionando”.
No geral, a confiança do usuário nas notificações do Discourse é bastante baixa. Quanto mais pesquisável for esse problema, para administradores (e até mesmo para usuários finais), mais confiáveis serão as notificações do Discourse.
Estou um pouco confuso com esta parte, nós enviamos para uma URL diretamente do servidor…
Aqui está o meu raciocínio. Olhe o que os usuários estão dizendo neste tópico.
Essas postagens parecem implicar que o problema pode ser culpa da Apple. Talvez o Discourse esteja enviando para a URL, mas então, por algum motivo, a Apple não está entregando o push. Por que isso poderia acontecer?
- Talvez a Apple esteja retornando 4xx ou 5xx para o trabalho de push, e o Discourse precise reenviar.
- Talvez a Apple tenha recebido a mensagem, mas não consiga (ou não queira?) entregá-la ao dispositivo.
- Talvez o dispositivo tenha recebido a mensagem, mas a Apple não esteja disparando o evento
pushpara o service worker. - Talvez o service worker tenha recebido o evento
push, mas haja um bug e ele não tenha chamadoshowNotification(provavelmente não este, seria muito óbvio…?) - Talvez o service worker tenha recebido o evento
pushe chamadoshowNotification, mas a Apple se recusou a mostrar uma notificação visível. Na verdade, há muitas razões pelas quais isso pode acontecer:- O dispositivo está definido como Não Perturbe (mas a notificação deve aparecer eventualmente no Centro de Notificações, nesse caso, eu acho)
- A permissão foi concedida em algum momento, mas agora foi revogada (o PWA pode detectar esse caso e registrá-lo!)
- O usuário pode ter configurado o aplicativo com configurações de notificação estranhas, de modo que ele, por exemplo, apenas envia para o Centro de Notificações, mas não mostra um banner
- … ou a Apple está se recusando a mostrar a mensagem por algum outro motivo de política (talvez achem que a notificação é spam?), e talvez sejam mais generosos em uma versão futura do iOS
E isso nem considera nenhuma das razões pelas quais o próprio Discourse pode não enviar a notificação (Não perturbe, filtros de push, push_notification_time_window_mins).
Se tudo o que podemos dizer é: “Bem, às 12:31, o Discourse disparou uma notificação com o ID XXX para a Apple, e a Apple retornou um código de status 201 Created, mas não temos ideia do que aconteceu depois disso”, então esses usuários/administradores não terão como investigar mais. Teremos que culpar a Apple e desistir das notificações push. (“Talvez as notificações push da web do iOS 18 em 2024 resolvam isso.”)
Em vez disso, precisamos ser capazes de dizer: “Seus logs no dispositivo mostram que às 12:33, o service worker foi ativado com um evento push para a notificação ID XXX, e disparou showNotification, e podemos ver através da API de Notificação que a Apple diz que a permissão para showNotification para esse push XXX foi concedida.”
(Eu também acho que deveria haver um botão “enviar uma notificação de teste” na página https://meta.discourse.org/my/preferences/notifications que permite agendar uma notificação para o futuro, por exemplo, N minutos ou N horas no futuro, permitindo que os usuários testem o caso “não funciona depois de algumas horas”.)
Do meu lado, não consegui reproduzir isso no meu site de teste. As notificações funcionam lá sem problemas. O problema é o meu site de produção. As notificações param de funcionar em poucas horas toda vez que as ativo. Minha única teoria é que talvez o volume de notificações push possa ser um problema? Meu site de produção é muito ativo e tem mais de 50 mil membros, então muitas notificações estão sendo enviadas para minha conta de usuário (e em geral).
Então @WorldIsMine e eu fizemos um pequeno experimento.
- esperamos até que as notificações dele parassem de funcionar
- verificamos que a assinatura push dele ainda estava na tabela
push_subscriptions
- enviei uma notificação push do console do rails e me certifiquei de registrar todas as exceções
u = User.find(1)
payload = { excerpt: "Test", "translated_title": "Test!" }
PushNotificationPusher.push(u, payload)
- não houve exceção
- ele não a recebeu
- (para verificar novamente, consegui enviar uma notificação push para mim mesmo)
Então isso é algo do lado da Apple? O que poderia ser?
Vocês têm acesso a um Mac para testar no Safari do macOS? Vocês poderiam configurar as ferramentas de desenvolvedor para depurar o service worker lá.
Pelo que entendi, não há nenhum service worker envolvido aqui.
Não, todas as notificações push da web exigem um service worker no iOS. Sending web push notifications in web apps and browsers | Apple Developer Documentation
Ok, fora da minha área, infelizmente não tenho experiência com isso no lado do cliente, e nem um Mac à minha disposição.
Pelo menos descartamos o lado do servidor.
Aha! Acho que descobri pelo menos um bug com isso, registrado em um tópico separado.
Por mais que eu esperasse que sua correção melhorasse as coisas, não tenho certeza.
O Meta foi implantado com ele por uma semana. Habilitei notificações em tempo real no meu PWA do iPhone. Hoje… elas simplesmente pararam de funcionar.
Ele foi criado em 5 de janeiro.
Tentarei depurar isso com um script para ver o que o faz quebrar e quanto tempo dura, mas muito aponta aqui para a Apple simplesmente ter um bug de algum tipo.
Quanto mais penso sobre isso, mais acho que o Discourse Hub é a solução agora para dispositivos Apple.
Obrigado por acompanhar isso!
Você clicou em alguma notificação? Pergunto porque me pergunto se a Apple desativa automaticamente as notificações da Web se você recebeu um certo número delas sem clicar em nenhuma.
Ainda precisamos destes recursos para analisar as falhas:
- Instruções sobre como usar o Data Explorer para ver o histórico de notificações push.
- Logs no dispositivo, para que possamos extrair esses logs e correlacioná-los com os logs do lado do servidor.
Os logs devem incluir os carimbos de data/hora de todos os eventospush, incluindo o payload completo, bem como o status deNotification.permission. - Botão “Enviar uma notificação de teste” que enfileira uma notificação para N minutos/horas no futuro.
Observe, minhas notificações PWA têm funcionado de forma sólida nas últimas 3 semanas no meta
Aqui está uma atualização preocupante, que indica que teremos mais problemas nesta frente:
Para sua informação, a notícia que @nathank relatou acima foi totalmente confirmada pela Apple.
Em um ato de conformidade descaradamente maliciosa com o Digital Markets Act da União Europeia, que visa trazer mais abertura e concorrência às plataformas digitais, a Apple decidiu acabar com os PWAs na UE com seu próximo Safari iOS 17.4.
Isso impedirá a instalação de PWAs na tela inicial, o uso de notificações push, a sincronização em segundo plano e interferirá no armazenamento offline e muito mais. E terá um impacto global além da UE, dado que as empresas terão muito menos probabilidade de investir em Web Apps, e PWAs em particular, se os usuários de iPhone na UE não puderem usá-los.
Tenho que supor que isso será um grande obstáculo para muitas comunidades Discourse e para o próprio Discourse. Se esse for o caso de alguém, recomendo fortemente que preencha esta pesquisa do grupo Open Web Advocacy. Eles estão liderando a luta contra isso, trabalhando para informar a equipe do DMA sobre todas as implicações dessas e de outras políticas no desenvolvimento Web. Eles estão tentando urgentemente coletar depoimentos e dados de empresas que serão afetadas por essas mudanças, para que possam fornecer ao DMA melhores informações para revidar.
Por favor, visite esta página para saber mais, preencha a pesquisa sobre como isso afeta seu negócio e espalhe a palavra! Seria particularmente excelente se o Discourse pudesse conscientizar seus usuários sobre a mudança iminente, para que cada um deles possa se conectar com a OWA para explicar como isso afeta seus negócios e comunidades.