나는 머리를 두드리고있다. 푸시 알림을 구현하고 있습니다. 모든 것이 제대로 작동하지만 (푸시가 수신되고 배지가 업데이트 됨) iOS 13.3에서는 응용 프로그램이 백그라운드에있을 때 application (_ : didReceiveRemoteNotification : fetchCompletionHandler 🙂 메소드가 호출되지 않습니다. 앱이 포 그라운드에 있거나 iOS 12 디바이스를 사용하는 경우 메소드가 호출됩니다. 다음과 같은 방법으로 푸시 알림을 등록합니다.
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
페이로드는 다음과 같이 설정됩니다
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
“원격 알림”및 “배경 처리”를 모든 변형에서 앱 기능으로 추가하려고했습니다 (이 기능을 사용하지 않고 “원격 알림”/ “배경 처리”만 가능). UNUserNotificationCenter의 대리자를 설정했지만 다시 성공하지 못했습니다. 이에 따라 헤더를 설정했습니다.
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
문서에서 앱이 백그라운드에있는 경우 에도이 메소드가 호출된다는 것을 나타냅니다.
이 방법을 사용하여 앱에 대한 수신 원격 알림을 처리하십시오. 앱이 포 그라운드에서 실행될 때만 호출되는 application : didReceiveRemoteNotification : 메소드와 달리 시스템은 앱이 포 그라운드 또는 백그라운드에서 실행될 때이 메소드를 호출합니다.
iOS 13에서 여기서 무엇을 놓치고 있습니까?
답변
설정 했습니까
"content-available": 1
백엔드 APS 페이로드에서
또한 iOS 앱의 info.plist 파일에서 백그라운드 모드를 활성화해야합니다
<key>UIBackgroundModes</key>
<array>
<string>processing</string>
<string>remote-notification</string>
</array>
답변
이 문제에 대한 답변을 얻기 위해 지원 티켓을 사용합니다.
이 주제에 대한 문서가 iOS 13에 대해 100 % “유효하지 않음”으로 밝혀졌습니다. 장치가 깨 울지 여부를 결정합니다. 설명서에 약간의 내용이 있지만.
알림 확장으로 Apple이 선호하는 구현 방식. 그런 다음 “변경 가능 컨텐츠”를 포함하도록 페이로드를 조정해야합니다.
나중에 레이더를 제출해야하는지 지원팀에 요청한 후 “예”라고 답했습니다.
답변
기기가 Apple의 APN 서버와 제대로 연결되어 있는지 확인하기 위해 앱 대리인을 구현 didRegisterForRemoteNotificationsWithDeviceToken
하고 실행 didFailToRegisterForRemoteNotificationsWithError
하십시오. 그렇지 않은 경우 장치를 다시 시작하거나 다른 Wi-Fi 네트워크를 통해 연결을 시도하고 앱을 다시 시작하십시오.
답변
이 위임 방법 :-
(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler
iOS 13에 대한 알림을 클릭하면 앱이 호출되고 앱이 백그라운드에 있습니다.
답변
알림 컨텐츠 확장을 구현해야합니다.
OneSignal을 사용하고 있었고 설정 코드이므로 https://documentation.onesignal.com/docs/ios-sdk-setup 에서 잘 작동했습니다.
OneSignal 비트가 차이를 만드는지 확실하지 않지만 어쨌든 추가
import UserNotifications
import OneSignal
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var receivedRequest: UNNotificationRequest!
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.receivedRequest = request;
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
OneSignal.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
}