Walę głową Wdrażam powiadomienie push. Wszystko działa dobrze (wypychanie jest odbierane, znaczek jest aktualizowany), ale w iOS 13.3 aplikacja metody (_: didReceiveRemoteNotification: fetchCompletionHandler :) nie jest wywoływana, gdy aplikacja jest w tle. Jeśli aplikacja znajduje się na pierwszym planie lub używa urządzenia z systemem iOS 12, wywoływana jest metoda. Rejestruję się w celu powiadomienia push w następujący sposób:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
Ładunek jest ustawiony na następujące
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Próbowałem dodać „Zdalne powiadomienia” i „Przetwarzanie w tle” jako funkcje aplikacji we wszystkich odmianach (tylko „Zdalne powiadomienia” / „Przetwarzanie w tle”, bez żadnej z tych możliwości, umożliwiając jedno i drugie) bez żadnych zmian. Ustawiłem delegata dla UNUserNotificationCenter, ale znowu bez powodzenia. Ustawiam odpowiednio nagłówki:
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
Z dokumentów wynika, że ta metoda jest wywoływana nawet wtedy, gdy aplikacja działa w tle:
Ta metoda służy do przetwarzania przychodzących zdalnych powiadomień dotyczących aplikacji. W przeciwieństwie do aplikacji: didReceiveRemoteNotification: metoda, która jest wywoływana tylko wtedy, gdy aplikacja działa na pierwszym planie, system wywołuje tę metodę, gdy aplikacja działa na pierwszym planie lub w tle.
Czego mi brakuje tutaj na iOS 13?
źródło
application(_:didReceiveRemoteNotification:withCompletionHandler:)
metodę?Odpowiedzi:
Ustawiłeś?
w twoim backendie APS?
Upewnij się również, czy masz włączony tryb tła w pliku info.plist swojej aplikacji na iOS
źródło
Wydaję bilet na wsparcie, aby uzyskać odpowiedź na ten problem.
Okazuje się, że dokumentacja nie jest w 100% „poprawna” dla iOS 13 na ten temat. Urządzenie decyduje, czy się obudzić, czy nie. Chociaż dokumentacja mówi nieco inaczej.
Preferowany przez Apple sposób implementacji jako rozszerzenie powiadomienia. Następnie musisz dostosować ładunek, aby zawierał „treść zmienną”.
Zapytałem potem wsparcie, czy powinienem złożyć radar, a oni odpowiedzieli „tak”.
źródło
Wdróż,
didRegisterForRemoteNotificationsWithDeviceToken
a takżedidFailToRegisterForRemoteNotificationsWithError
w delegacie aplikacji, aby sprawdzić, czy urządzenie nawiązuje dobre połączenie z serwerem APN Apple. Jeśli tak nie jest, uruchom ponownie urządzenie i / lub spróbuj nawiązać połączenie za pośrednictwem innej sieci Wi-Fi i uruchom ponownie aplikację.źródło
Ta metoda przekazania:
jest wywoływany, gdy klikamy powiadomienie dla iOS 13, a aplikacja jest w tle.
źródło
Musisz wdrożyć rozszerzenie treści powiadomienia
Ponieważ korzystałem z OneSignal i jego kodu instalacyjnego, działało to dobrze dla mnie https://documentation.onesignal.com/docs/ios-sdk-setup
Nie jestem pewien, czy bity OneSignal mają znaczenie, ale i tak je dołączam
źródło