Derzeit implementiere ich Push-Benachrichtigungen von unserem Backend-Server in unsere App (macOS Catalina & iOS - gleiche Codebasis). Dabei verwende ich Apple Push-Benachrichtigungen und die tokenbasierte Authentifizierungsmethode (Generieren von JWT aus keyId, teamId, ... und Signieren mit dem in der Apple-Entwicklerkonsole generierten privaten Schlüssel), um Pushs an den APN-Dienst zu senden.
Das Problem, mit dem ich konfrontiert bin, ist, dass ich erfolgreich "Alarm" -Benachrichtigungen (Status 200, mit Header apns-push-type: alert
) senden und auf meinem iOS- und MacOS-Gerät empfangen kann (die Push-Benachrichtigungen werden erfolgreich im Produktions- und Sandbox-Modus angezeigt), aber aus irgendeinem Grund "stumm" "Pushs (mit Header apns-push-type: background
) werden nur auf meinem iOS-Gerät (iPhone) empfangen, nicht jedoch auf meinem Mac ( didReceiveRemoteNotification(...)
in AppDelegate
wird nie aufgerufen).
Was ich bisher gemacht habe:
- Stellen Sie sicher, dass der APN-Anforderungsheader für den unbeaufsichtigten Push korrekt konfiguriert ist:
apns-push-type: background
- Stellen Sie sicher, dass Sie den richtigen APN-Themenheader haben:
apns-topic: my.bundle.id
(Dies ist anders für Sandbox / Produktion) - Der Prioritätsheader "semi-required" wurde hinzugefügt:
apns-priority: 5
(nur bei Übermittlung von Hintergrund-Pushs) - Verifiziert, dass das erstellte JWT gültig ist und im APN-Authentifizierungsheader verwendet wird:
authorization: mytoken
(Dies muss der Fall sein, sonst würde der APN-Dienst nicht mit dem Status 200 antworten.) - Bestätigt, dass meine Anwendung über die in Xcode definierten korrekten Berechtigungen und Funktionen verfügt (meine Argumentation: Dies muss der Fall sein, andernfalls würden Push-Benachrichtigungen für "Warnungen" ebenfalls nicht funktionieren).
- Doppelte Überprüfung, ob Push-Benachrichtigungen für die Mac-App zulässig / aktiviert sind (überprüfte Systemeinstellungen)
- Stellen Sie sicher, dass das Gerätetoken, an das der Push gesendet wird, tatsächlich von dem Gerät stammt, das den Push empfangen soll (z. B. mein MacBook).
- Überprüft, ob der private Schlüssel, den ich zum Signieren des JWT verwende, APN-fähig ist
- Getestet, während die Mac-App ausgeführt wird, aber nicht im Fokus und auch im Fokus
Die APN-Anforderungen, die ich zum Senden des Pushs ausführe, sind:
- Sandbox: POST https://api.sandbox.push.apple.com/3/device/ {deviceToken}
- Produktion: POST https://api.push.apple.com/3/device/ {deviceToken}
Die Nutzlast (JSON), die ich im Anforderungshauptteil an den APN-Dienst sende, sieht wie folgt aus:
{
"aps": {
"content-available": 1 # defines push as "silent"
},
"data": { #some key-value pairs here }
}
In jedem Fall (sowohl Produktion als auch Sandbox, beide mit dem Geräte-Token von iOS und macOS) wird meine Anfrage an APN mit dem Statuscode 200 zurückgegeben. Auf meinem MacBook wird Catalina 10.15.3 ausgeführt. Was mache ich hier möglicherweise falsch oder wird das für Catalyst-Apps einfach nicht unterstützt?
quelle