Ich schlage meinen Kopf. Ich implementiere eine Push-Benachrichtigung. Alles funktioniert einwandfrei (Push wird empfangen, Badge wird aktualisiert), aber unter iOS 13.3 wird die Methodenanwendung (_: didReceiveRemoteNotification: fetchCompletionHandler :) nicht aufgerufen, wenn sich die App im Hintergrund befindet. Wenn sich die App im Vordergrund befindet oder ein iOS 12-Gerät verwendet, wird die Methode aufgerufen. Ich registriere mich wie folgt für die Push-Benachrichtigung:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
Die Nutzlast ist wie folgt eingestellt
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Ich habe versucht, "Remote-Benachrichtigungen" und "Hintergrundverarbeitung" als App-Funktionen in allen Varianten hinzuzufügen (nur "Remote-Benachrichtigungen" / "Hintergrundverarbeitung", ohne eine dieser Funktionen, die beide aktivieren), ohne Änderungen vorzunehmen. Ich habe den Delegaten für das UNUserNotificationCenter festgelegt, aber wieder ohne Erfolg. Ich setze die Header entsprechend:
curl -v \
-H 'apns-priority: 4' \
-H 'apns-topic: xx.xxxxx.xxxx' \
-H 'apns-push-type: alert' \
-H 'Content-Type: application/json; charset=utf-8' \
-d '{"aps": {"badge": 10,"alert": "test", "content-available":1}}' \
--http2 \
--cert pushcert.pem \
https://api.sandbox.push.apple.com/3/device/1234567890
Aus den Dokumenten geht hervor, dass diese Methode auch dann aufgerufen wird, wenn sich die App im Hintergrund befindet:
Verwenden Sie diese Methode, um eingehende Remote-Benachrichtigungen für Ihre App zu verarbeiten. Im Gegensatz zur Methode application: didReceiveRemoteNotification:, die nur aufgerufen wird, wenn Ihre App im Vordergrund ausgeführt wird, ruft das System diese Methode auf, wenn Ihre App im Vordergrund oder Hintergrund ausgeführt wird.
Was fehlt mir hier für iOS 13?
quelle
application(_:didReceiveRemoteNotification:withCompletionHandler:)
Methode zu implementieren ?Antworten:
Hast du eingestellt
in Ihrem Backend APS Nutzlast?
Stellen Sie außerdem sicher, dass Sie den Hintergrundmodus in der info.plist-Datei Ihrer iOS-App aktiviert haben
quelle
Ich gebe ein Support-Ticket aus, um eine Antwort auf dieses Problem zu erhalten.
Es stellt sich heraus, dass die Dokumentation für iOS 13 zu diesem Thema nicht 100% "gültig" ist. Das Gerät entscheidet, ob es aufwacht oder nicht. Obwohl die Dokumentation etwas anders angibt.
Apples bevorzugte Implementierungsmethode als Benachrichtigungserweiterung. Danach müssen Sie die Nutzdaten anpassen, um "veränderlichen Inhalt" einzuschließen.
Ich fragte den Support danach, ob ich ein Radar einreichen sollte und sie antworteten mit "Ja".
quelle
Implementieren Sie
didRegisterForRemoteNotificationsWithDeviceToken
und auchdidFailToRegisterForRemoteNotificationsWithError
im Delegaten Ihrer App, um zu überprüfen, ob das Gerät eine gute Verbindung zum APN-Server von Apple herstellt. Ist dies nicht der Fall, starten Sie das Gerät neu und / oder versuchen Sie, eine Verbindung über ein anderes Wi-Fi-Netzwerk herzustellen und die App neu zu starten.quelle
Diese Delegatenmethode: -
wird aufgerufen, wenn wir auf Benachrichtigung für iOS 13 klicken und die App im Hintergrund ist.
quelle
Sie müssen eine Benachrichtigungsinhaltserweiterung implementieren
Da ich OneSignal und dessen Setup-Code verwendet habe, hat dies für mich unter https://documentation.onesignal.com/docs/ios-sdk-setup einwandfrei funktioniert
Ich bin mir nicht sicher, ob die OneSignal-Bits einen Unterschied machen, aber ich füge sie trotzdem hinzu
quelle