Ciao @featheredtoast, anch’io sono curioso a riguardo. Vuoi dire che le notifiche push web per desktop non utilizzano alcun broker di terze parti come GCM, FCM o APNs, e che invece i messaggi di notifica provengono direttamente dal tuo endpoint – collegato a Redis o qualcosa di simile --, e che solo le notifiche push per dispositivi mobili fanno uso di tali broker di terze parti?
Risposta breve: no, le notifiche push sono fornite dalle integrazioni native del browser, quindi non è coinvolto alcun intermediario di terze parti.
Tecnicamente, esiste un server (da qualche parte, non il tuo server Discourse) responsabile della consegna dei messaggi al tuo dispositivo. La nostra implementazione è supportata da tutti i browser che supportano VAPID (Sending VAPID identified WebPush Notifications via Mozilla’s Push Service | Mozilla Services). I server VAPID del fornitore del browser sono quelli che effettivamente inviano i dati al tuo dispositivo.
Scusa per aver riproposto l’argomento, ma le mie ricerche mi hanno portato qui e non sono sicuro che sia correlato.
I nostri /logs sono pieni di:
Failed to send push notification : host: fcm.googleapis.com, #<Net::HTTPForbidden 403 Forbidden readbody=true> body: the key in the authorization header does not correspond to the sender ID used to subscribe this user. Please ensure you are using the correct sender ID and server Key from the Firebase console.
Backtrace
webpush-1.1.0/lib/webpush/request.rb:175:in `verify_response'
webpush-1.1.0/lib/webpush/request.rb:34:in `perform'
webpush-1.1.0/lib/webpush.rb:44:in `payload_send'
/var/www/discourse/app/services/push_notification_pusher.rb:79:in `send_notification'
/var/www/discourse/app/services/push_notification_pusher.rb:25:in `block in push'
activerecord-6.0.3.3/lib/active_record/relation/delegation.rb:87:in `each'
activerecord-6.0.3.3/lib/active_record/relation/delegation.rb:87:in `each'
/var/www/discourse/app/services/push_notification_pusher.rb:23:in `push'
/var/www/discourse/app/jobs/regular/send_push_notification.rb:7:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'
/var/www/discourse/app/jobs/base.rb:221:in `block in perform'
/var/www/discourse/app/jobs/base.rb:217:in `each'
/var/www/discourse/app/jobs/base.rb:217:in `perform'
sidekiq-6.1.2/lib/sidekiq/processor.rb:196:in `execute_job'
sidekiq-6.1.2/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
sidekiq-6.1.2/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'
sidekiq-6.1.2/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
sidekiq-6.1.2/lib/sidekiq/middleware/chain.rb:143:in `invoke'
sidekiq-6.1.2/lib/sidekiq/processor.rb:163:in `block in process'
sidekiq-6.1.2/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/job_retry.rb:111:in `local'
sidekiq-6.1.2/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq.rb:38:in `block in <module:Sidekiq>'
sidekiq-6.1.2/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/processor.rb:257:in `stats'
sidekiq-6.1.2/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/job_logger.rb:13:in `call'
sidekiq-6.1.2/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/job_retry.rb:78:in `global'
sidekiq-6.1.2/lib/sidekiq/processor.rb:124:in `block in dispatch'
sidekiq-6.1.2/lib/sidekiq/logger.rb:10:in `with'
sidekiq-6.1.2/lib/sidekiq/job_logger.rb:33:in `prepare'
sidekiq-6.1.2/lib/sidekiq/processor.rb:123:in `dispatch'
sidekiq-6.1.2/lib/sidekiq/processor.rb:162:in `process'
sidekiq-6.1.2/lib/sidekiq/processor.rb:78:in `process_one'
sidekiq-6.1.2/lib/sidekiq/processor.rb:68:in `run'
sidekiq-6.1.2/lib/sidekiq/util.rb:15:in `watchdog'
sidekiq-6.1.2/lib/sidekiq/util.rb:24:in `block in safe_thread'
Ne stiamo vedendo migliaia. È… normale?
Sembra un bug: gli ID del mittente non corrispondenti dovrebbero disiscrivere automaticamente quel client, ma sembra esserci un errore nel rilevamento del messaggio di errore da parte di FCM.
Di certo non è qualcosa di visibile all’utente, ma sì, questo è rumore che non dovrebbe esserci.
Immagino che dovremmo gestire le eccezioni Webpush::InvalidSubscription e Webpush::Unauthorized disiscrivendoci. Sembra che non esistessero quando abbiamo aggiornato l’gestione degli errori per le notifiche push l’ultima volta.
Come ho già detto, ne riceviamo migliaia:
Avevo già segnalato questo qui, nel caso vogliate mantenere questo thread in tema. Sentitevi liberi di unirlo, eliminarlo o fare altro.
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
