6

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?

Antwort

5

Es ist durchaus möglich, dass Sie einige Sandbox-Geräte-Token in Ihrer Datenbank haben (ich bin nicht sicher, ob die Geräte-Tokens auf Ihrem Server oder in Azure Notification Hub gespeichert sind). Wenn versucht wird, eine Benachrichtigung mit einem Sandbox-Geräte-Token an die Produktions-Push-Umgebung zu senden, wird von Apple ein InvalidToken-Fehler zurückgegeben und die Verbindung wird geschlossen.

Sehr oft, wenn der Server, der Push-Benachrichtigungen an Apples APN-Server sendet, die Fehlerantwort erhält, hat er bereits viele weitere Benachrichtigungen (möglicherweise mit gültigen Token) gesendet, die alle von Apple verworfen werden. Zu diesem Zeitpunkt werden neue Benachrichtigungen erst dann von Apple akzeptiert, wenn eine neue Verbindung mit APNS hergestellt wurde. Daher müssen Nachrichten, die nach dem ungültigen Token an die alte Verbindung gesendet wurden, erneut gesendet werden. Es ist möglich, dass Azure dieses erneute Senden nicht korrekt verarbeitet.

Wie bereits erwähnt, zeigt die Azure Notification Hub-Monitorseite einige Fehler. Ich vermute, dass 3 APNS Bad Channel Errors ungültige Geräte Tokens bedeutet. Ich weiß nicht, wie viele ungültige Geräte-Tokens Sie tatsächlich in der Datenbank haben, aber selbst eine davon kann dazu führen, dass viele Benachrichtigungen mit gültigen Tokens von Apple nicht akzeptiert werden.

Die beste Lösung besteht darin, alle Geräte-Token in der Datenbank zu testen und die ungültigen zu ermitteln und zu löschen.

+0

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.) –

+0

@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

+0

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. –

Verwandte Themen