iOS 16 Web-Push-Benachrichtigungen in 2023

Dies ist mit ziemlicher Sicherheit nur das Verschulden von Discourse. Sie senden einfach keine Benachrichtigungen, wenn Sie die Website vor einer bestimmten Anzahl von Minuten verwendet haben. Aber da Endbenutzer dies nicht sehen können, macht es die Benachrichtigungen einfach unzuverlässig. Aber ich versichere Ihnen, ich habe Push-Benachrichtigungen für beide Nachrichten auf iOS erhalten. Sie können funktionieren, solange Sie wissen, dass Sie ihnen niemals vertrauen dürfen.

Ich glaube, das Problem ist umgekehrt. Wenn ich die Website auf meinem Handy nicht oft genug benutze, erhalte ich keine Benachrichtigungen mehr.

Vielleicht, aber wir raten alle nur. Das Wichtigste ist, dass Discourse den Endbenutzern eine angemessene Protokollierung zur Verfügung stellt. Welche Benachrichtigungen hat Discourse gesendet? Welche Benachrichtigungen hat Discourse nicht gesendet?

Wenn die PWA eine Benachrichtigung erhält, darf sie diese lokal in IndexedDB auf dem Gerät protokollieren. Benutzer müssen in der Lage sein, dieses Protokoll einzusehen und es mit dem Protokoll des Servers abzugleichen, um zu sehen, wann/ob Discourse die Push-Nachricht gesendet hat, das Gerät sie aber nicht empfangen hat.

Aber insgesamt würde ich sagen: Gehen Sie nicht davon aus, dass Apple schuld ist, und gehen Sie insbesondere nicht davon aus, dass das Warten auf iOS 18 helfen wird. Wir brauchen, dass Discourse hier Arbeit leistet, sonst wird nichts besser.

Das kommt mir wie eine sehr, sehr ausführliche Protokollierung vor:

Eine ausführliche Protokollierung hier ist wahrscheinlich einfach genug:

„Übersprungen, Sam wegen „Payload“ zu benachrichtigen, da Sam online war.

Aber wenn Sie dies nur debuggen möchten, warum setzen Sie SiteSetting.push_notification_time_window_mins nicht auf 0?

Und dann wird die nächste Protokollierungsstufe sehr, sehr ausführlich:

  1. Übersprungen, Benachrichtigung, da der Benutzer „Nicht stören“ aktiviert hatte
  2. Timeout für den Push-Benachrichtigungsanbieter discourse/app/services/push_notification_pusher.rb at cacaa90f4d01452358322ea8b5564f15f4816c74 · discourse/discourse · GitHub
  3. Abgelaufenes Abonnement
  4. Antwortfehler

Es können viele verschiedene Dinge schiefgehen … obwohl Sie zu jedem Zeitpunkt wahrscheinlich DE verwenden können, um zu validieren: Suchen Sie in der Tabelle push_subscriptions nach aktuellen Web-Push-Abonnements.

1 „Gefällt mir“

Lassen Sie mich zunächst sagen, dass aus meiner Sicht das Problem darin besteht, dass Leute hier und in meinem Forum schreiben und sagen: „Ich glaube, Push-Benachrichtigungen funktionieren nicht richtig“, und andere Benutzer stimmen ein und sagen: „Ja! Ich auch! Benachrichtigungen müssen kaputt/unzuverlässig sein.“ Manchmal beschuldigen sie Apple, manchmal beschuldigen sie Discourse, aber sie sind sich alle einig, dass Discourse-Push-Benachrichtigungen unzuverlässig sind.

Ich würde diese Fälle gerne selbst untersuchen und sagen: „Sie haben die Benachrichtigung um 12:31 Uhr auf Ihrem Telefon nicht erhalten, und hier ist der Grund dafür…“, aber ich glaube nicht, dass das derzeit möglich ist.

Ja, eine Menge verschiedener Dinge können schiefgehen, einschließlich Dingen auf der Client-Seite, die ich in DE nicht untersuchen kann.

  • Hat der Service Worker das Push-Ereignis empfangen?
  • Hat der Service Worker showNotification aufgerufen?
  • Wurde die Berechtigung für showNotification erteilt, oder hat showNotification nichts bewirkt?
  • War das Gerät selbst auf „Nicht stören“ eingestellt?

Ich hätte gerne eine Dokumentation für Administratoren, die erklärt, wie DE zur Diagnose eines Push-Fehlers verwendet werden kann, zumindest soweit es darum geht, zu sehen, ob die Benachrichtigung durchgegangen ist.

Aber ich denke, es wäre auch unglaublich hilfreich, ein clientseitiges Protokoll zu führen, das Benutzer mir senden könnten, damit ich es mit dem DE-Protokoll abgleichen kann.

Zum einen sind mindestens die Hälfte der Leute, die sich darüber beschweren, keine Administratoren ihres Forums. Deshalb müssen wir Discourse implementieren:

Aber ja, ich vermute, dass das Setzen auf 0 80 % der Beschwerden „es funktioniert nicht“ beseitigen wird.

Insgesamt ist das Vertrauen der Benutzer in Discourse-Benachrichtigungen ziemlich gering. Je besser dieses Problem für Administratoren (und sogar für Endbenutzer) recherchierbar ist, desto vertrauenswürdiger werden Discourse-Benachrichtigungen sein.

4 „Gefällt mir“

Ich bin etwas verwirrt wegen dieses Teils, wir pushen direkt vom Server zu einer URL…

Hier ist meine Argumentation. Schauen Sie, was die Benutzer in diesem Thread sagen.

Diese Beiträge scheinen anzudeuten, dass das Problem bei Apple liegen könnte. Vielleicht pusht Discourse zur URL, aber dann liefert Apple aus irgendeinem Grund den Push nicht aus. Warum könnte das so sein?

  1. Vielleicht gibt Apple 4xx- oder 5xx-Fehler an den Push-Job zurück, und Discourse muss erneut pushen.
  2. Vielleicht hat Apple die Nachricht erhalten, ist aber nicht in der Lage (oder willens?), die Nachricht an das Gerät zu liefern.
  3. Vielleicht hat das Gerät die Nachricht erhalten, aber Apple löst das push-Ereignis für den Service Worker nicht aus.
  4. Vielleicht hat der Service Worker das push-Ereignis empfangen, aber es gibt einen Fehler und er hat showNotification nicht aufgerufen (wahrscheinlich nicht dieser, das wäre zu offensichtlich…?)
  5. Vielleicht hat der Service Worker das push-Ereignis empfangen und showNotification aufgerufen, aber Apple hat sich geweigert, eine sichtbare Benachrichtigung anzuzeigen. Tatsächlich gibt es viele Gründe, warum dies geschehen könnte:
    • Das Gerät ist auf “Nicht stören” eingestellt (aber die Benachrichtigung sollte schließlich im Benachrichtigungscenter erscheinen, in diesem Fall, denke ich).
    • Die Berechtigung wurde irgendwann erteilt, ist aber jetzt widerrufen (die PWA kann diesen Fall erkennen und protokollieren!).
    • Der Benutzer hat die App möglicherweise mit seltsamen Benachrichtigungseinstellungen konfiguriert, sodass sie nur im Benachrichtigungscenter angezeigt wird, aber kein Banner.
    • … oder Apple weigert sich, die Nachricht aus einem anderen Richtlinien-Grund anzuzeigen (vielleicht halten sie die Benachrichtigung für Spam?), und vielleicht werden sie in einer zukünftigen Version von iOS großzügiger sein.

Und das berücksichtigt noch nicht einmal die Gründe, warum Discourse selbst die Benachrichtigung möglicherweise nicht sendet (Nicht stören, Push-Filter, push_notification_time_window_mins).

Wenn wir nur sagen können: “Nun, um 12:31 Uhr hat Discourse eine Benachrichtigung mit der ID XXX an Apple gesendet, und Apple hat den Statuscode 201 Created zurückgegeben, aber wir haben keine Ahnung, was danach passiert ist”, dann werden diese Benutzer/Administratoren keine Möglichkeit haben, weiter zu untersuchen. Wir werden Apple die Schuld geben und Push-Benachrichtigungen aufgeben müssen. (“Vielleicht werden die Web-Push-Benachrichtigungen von iOS 18 im Jahr 2024 funktionieren.”)

Stattdessen müssen wir sagen können: “Ihre Protokolle auf dem Gerät zeigen, dass um 12:33 Uhr der Service Worker mit einem Push-Ereignis für die Benachrichtigung mit der ID XXX aufgewacht ist und showNotification ausgelöst hat, und wir können über die Benachrichtigungs-API sehen, dass Apple sagt, dass die Berechtigung zum Anzeigen von showNotification für diesen XXX-Push erteilt wurde.”

(Ich denke auch, dass es auf der Seite https://meta.discourse.org/my/preferences/notifications einen Button “Testbenachrichtigung senden” geben sollte, mit dem Sie eine Benachrichtigung für die Zukunft planen können, z. B. N Minuten oder N Stunden in der Zukunft, damit Benutzer den Fall “funktioniert nach ein paar Stunden nicht” testen können.)

3 „Gefällt mir“

Von meiner Seite aus konnte ich dies auf meiner Staging-Website nicht reproduzieren. Die Benachrichtigungen funktionieren dort ohne Probleme. Das Problem ist meine Produktions-Website. Benachrichtigungen hören jedes Mal auf zu funktionieren, wenn ich sie aktiviere, nach wenigen Stunden. Meine einzige Theorie ist, dass vielleicht das Volumen der Push-Benachrichtigungen ein Problem sein könnte? Meine Produktions-Website ist sehr aktiv und hat über 50.000 Mitglieder, daher werden viele Benachrichtigungen an mein Benutzerkonto (und allgemein) gesendet.

Also haben @WorldIsMine und ich ein kleines Experiment durchgeführt.

  • Wir haben gewartet, bis seine Benachrichtigungen nicht mehr funktionierten
  • Wir haben überprüft, ob sein Push-Abonnement noch in der push_subscriptions-Tabelle vorhanden war :white_check_mark:
  • Ich habe eine Push-Benachrichtigung von der Rails-Konsole gesendet und darauf geachtet, alle Ausnahmen zu protokollieren
u = User.find(1)
payload = { excerpt: "Test", "translated_title": "Test!" }
PushNotificationPusher.push(u, payload)
  • Es gab keine Ausnahme
  • Er hat sie nicht erhalten
  • (Zur doppelten Überprüfung konnte ich mir selbst eine Push-Benachrichtigung senden)

Das ist also etwas auf Apples Seite? Was könnte es sein?

5 „Gefällt mir“

Habt ihr Zugriff auf einen Mac, um im macOS Safari zu testen? Dort könntet ihr die Entwicklertools einrichten, um den Service Worker zu debuggen.

1 „Gefällt mir“

Soweit ich das verstehe, ist hier kein Service Worker beteiligt.

Nein, alle Web-Push-Benachrichtigungen erfordern einen Service Worker unter iOS. Sending web push notifications in web apps and browsers | Apple Developer Documentation

Ok, das übersteigt meine Kompetenzen, ich habe leider keine Erfahrung damit auf der Client-Seite und keinen Mac zur Verfügung.

Immerhin haben wir die serverseitigen Probleme ausgeschlossen.

Aha! Ich glaube, ich habe zumindest einen Fehler gefunden, der in einem separaten Thread gemeldet wurde.

7 „Gefällt mir“

Ich war zwar hoffnungsvoll, dass deine Korrektur die Dinge verbessern würde, aber ich bin mir einfach nicht sicher.

Meta wurde damit eine Woche lang eingesetzt. Ich habe Live-Benachrichtigungen auf meinem iPhone PWA aktiviert. Heute… haben sie einfach aufgehört zu funktionieren.

Es wurde am 5. Januar erstellt.

Ich werde versuchen, dies mit einem Skript zu debuggen, um zu sehen, was es auslöst, damit es fehlschlägt und wie lange es dauert, aber vieles deutet hier darauf hin, dass Apple einfach einen Fehler hat.

Je mehr ich darüber nachdenke, desto mehr glaube ich, dass Discourse Hub jetzt die Lösung für Apple-Geräte ist.

3 „Gefällt mir“

Danke für die Nachverfolgung!

Haben Sie auf Benachrichtigungen geklickt? Ich frage, weil ich mich frage, ob Apple Web-Benachrichtigungen automatisch deaktiviert, wenn Sie eine bestimmte Anzahl davon erhalten haben, ohne auf eine davon zu klicken.

1 „Gefällt mir“

Wir benötigen noch diese Funktionen zur Analyse der Fehler:

  1. Anweisungen zur Verwendung des Data Explorer, um den Verlauf von Push-Benachrichtigungen anzuzeigen.
  2. Protokolle auf dem Gerät, damit wir diese Protokolle extrahieren und mit serverseitigen Protokollen korrelieren können.
    Die Protokolle sollten Zeitstempel aller push-Ereignisse, einschließlich der vollständigen Nutzlast, sowie den Status von Notification.permission enthalten.
  3. Eine Schaltfläche „Testbenachrichtigung senden“, die eine Benachrichtigung für N Minuten/Stunden in der Zukunft in die Warteschlange stellt.
6 „Gefällt mir“

Hinweis: Meine PWA-Benachrichtigungen funktionieren seit 3 Wochen solide auf Meta.

8 „Gefällt mir“

Hier ist ein beunruhigendes Update, das darauf hindeutet, dass wir an dieser Front noch mehr Ärger haben werden:

3 „Gefällt mir“

FYI, die Nachricht, über die @nathank oben berichtet hat, wurde von Apple vollständig bestätigt.

In einem Akt dreister böswilliger Befolgung des Digital Markets Act der Europäischen Union, der darauf abzielt, mehr Offenheit und Wettbewerb auf digitalen Plattformen zu schaffen, hat Apple beschlossen, PWAs in der EU mit seinem bevorstehenden Safari iOS 17.4 abzuschaffen.

Dies wird die Installation von PWAs auf dem Home-Bildschirm, die Nutzung von Push-Benachrichtigungen, die Hintergrundsynchronisierung verhindern und den Offline-Speicher und mehr beeinträchtigen. Und es wird globale Auswirkungen über die EU hinaus haben, da Unternehmen weitaus weniger wahrscheinlich in Web-Apps und insbesondere PWAs investieren werden, wenn iPhone-Nutzer in der EU diese nicht nutzen können.

Ich muss davon ausgehen, dass dies eine erhebliche Beeinträchtigung für viele Discourse-Communities und Discourse selbst darstellen wird. Wenn dies für jemanden zutrifft, empfehle ich Ihnen dringend, diese Umfrage der Open Web Advocacy-Gruppe auszufüllen. Sie führen den Kampf dagegen an und arbeiten daran, das DMA-Team über alle Auswirkungen dieser und anderer Richtlinien auf die Webentwicklung zu informieren. Sie versuchen dringend, Testimonials und Daten von Unternehmen zu sammeln, die von diesen Änderungen betroffen sein werden, damit sie dem DMA bessere Informationen zur Gegenwehr geben können.

Bitte besuchen Sie diese Seite, um mehr zu erfahren, füllen Sie deren Umfrage aus, wie sich dies auf Ihr Unternehmen auswirkt, und verbreiten Sie die Nachricht! Es wäre besonders ausgezeichnet, wenn Discourse seine Nutzer auf die bevorstehende Änderung aufmerksam machen könnte, damit sie sich jeweils mit OWA in Verbindung setzen können, um zu erklären, wie sich dies auf ihre Unternehmen und Communities auswirkt.

7 „Gefällt mir“