Wir haben eine (meist) erfolgreiche Implementierung von Push-Benachrichtigungen für iOS- und Android-Geräte über Azure Notification Hubs.Auslösen von Benachrichtigungen von Azure Notification Hub an APNS
Das Problem besteht darin, dass einige iOS-Geräte anscheinend nie Benachrichtigungen erhalten, die von Azure Notification Hubs gesendet werden.
Wir verwenden Vorlagen und Tags, um die Nachrichten an die entsprechenden Geräte zu leiten. Bei den Tags handelt es sich um interessante Themen, die nie benutzerspezifisch sind. Daher erwarten wir, dass eine Benachrichtigung für ein Tag an alle Geräte gesendet wird, die dieses Tag abonniert haben.
Die Android-Geräte scheinen ihre Benachrichtigungen einwandfrei zu empfangen, aber die iOS-Geräte sind nicht konsistent. Die meisten von ihnen arbeiten. Ein Paar nicht. Wir sind uns bewusst, dass Push-Benachrichtigungen mit bestem Aufwand geliefert werden und keine Garantie für Zuverlässigkeit bieten, aber unsere begrenzten Tests haben mehr Geräte aufgedeckt, die keine Push-Benachrichtigungen erhalten, als es unvernünftig erscheint (mehr als zwei Fehler von etwa einem Dutzend) Geräte).
Hier ist das Setup:
wir eine einfache C# Routine im Backend haben, die Benachrichtigung Hubs zu Azure verbindet und sendet Benachrichtigungen an Azure:
var outcome = await hub.SendTemplateNotificationAsync(properties, tag);
Wir haben die GetAllRegistrationsAsync
Methode verwendet haben, um sicherzustellen, dass jedes Gerät, das wir prüfen, erfolgreich registriert wurde und die richtige Vorlage verwendet. Jedes Gerät ist registriert, alle Vorlagen sind korrekt.
Wir sind nicht im "Testmodus"; Der enableTestSend
Parameter von NotificationHubClient.CreateClientFromConnectionString
ist auf False gesetzt.
Fehlerbehebung:
Wenn wir die Mitteilung versenden, die meisten Geräte erhalten die Benachrichtigung und im konkreten Fall wir testen, aktualisieren Sie die Abzeichen Zähler mit der richtigen Nummer.
Allerdings scheinen ein paar Geräte die Benachrichtigung nicht zu erhalten. Eines der Geräte hat die Benachrichtigung erhalten, nachdem wir das Gerät neu gestartet haben, danach wurde es jedoch beendet.
Mithilfe der oben genannten Methode GetAllRegistrationsAsync
haben wir überprüft, dass die Problemgeräte korrekt auf Azure registriert sind und über die richtigen Tags und Vorlagen verfügen.
Wir konnten die Geräte-Token der problematischen Geräte aus den Azure-Registrierungen ermitteln. Wir verwendeten ein PHP-Skript, das direkt mit APNS kommuniziert, um eine Benachrichtigung nur an die problematischen Geräte zu senden, die ihre Geräte-Tokens verwenden. Jedes Mal erhält das Gerät diese Direktsendebenachrichtigung. Es sind nur die Benachrichtigungen von Azure, die unzuverlässig sind.
Wenn wir die Azure Mitteilung Hub-Monitor Seite untersuchen, sehen wir diese Kennzahlen für die letzten 24 Stunden:
- 967 APNS Erfolgreiche Benachrichtigungen
- 3 APNS Bad Kanalfehler
- 2 APNS abgelaufen Kanalfehler
- 4 APNS Fehler
... und keine anderen für APNS oder für Azure in ge gemeldeten Fehler Neral. Die Fehlerrate, die wir sehen, sollte eine Fehleranzahl von über 20 ergeben haben.
Wir konnten nicht feststellen, welche Gerätentoken für die Fehler verantwortlich waren. Gibt es eine Möglichkeit, diese Informationen von Azure zu erhalten?
Wir können Ihnen nicht erklären, warum wir Benachrichtigungen direkt über APNS, nicht aber über Azure, an diese Geräte senden können und warum Azure nicht mehr Fehler meldet als dies der Fall ist.
Irgendwelche Vorschläge oder Einsichten?
Das scheint eine ziemlich vernünftige Erklärung zu sein, aber würde Ihre Erklärung nicht bedeuten, dass wir nicht in der Lage sein sollten, die direkte Nachricht über APNS zu senden, indem wir exakt dasselbe Geräte-Token verwenden wie Azure? Oder könnte Apple eingehende Nachrichten selektiv zurückweisen, basierend auf der Absender-IP (oder etwas ähnlichem)? Wissen Sie alternativ, wie Sie ungültige Geräte-Token aus Azure entfernen können? (Wir führen keine Registrierungen durch; die Geräte kommunizieren direkt mit Azure.) –
@AlanMcBee Möglicherweise sind die Gerätetokens, die Sie direkt senden möchten, gültig, andernfalls würden sie niemals funktionieren. Das Problem wird wahrscheinlich durch andere Geräte-Tokens verursacht, die Ihnen nicht bekannt sind. Ich weiß nicht, wie Sie ungültige Token aus Azure entfernen können. Ich habe nie mit Azure gearbeitet. Haben Sie beim Testen der Build-Entwicklung (mit der Sandbox Push-Umgebung) Geräte bei Azure registriert? Das sind die am wahrscheinlichsten problematischen Geräte-Token. – Eran
Wir hätten wahrscheinlich alle Vorserienregistrierungen, die wir während des Tests erstellt haben, nicht registrieren lassen, damit es keine Probleme gibt. Aber alle Problemgeräte haben ihre Token erfolgreich bei Azure registriert, nachdem sie die Produktions-App mit dem Produktionszertifikat installiert hatten.Ich habe erwartet, dass einzelne ungültige Geräte-Token irgendwann aus der Registrierung entfernt werden. Wir haben tatsächlich ein Support-Ticket, das bei Microsoft geöffnet ist, um einzelne Gerätefehler aufzuspüren. Ich werde diesen Thread weiterleiten. –