Tôi đang đập đầu mình. Tôi đang thực hiện thông báo đẩy. Mọi thứ đều hoạt động tốt (nhận được đẩy, huy hiệu được cập nhật) nhưng trong iOS 13.3, ứng dụng phương thức (_: didReceiveRemoteNotification: fetchCompletionHandler :) không được gọi khi ứng dụng ở chế độ nền. Nếu ứng dụng ở phía trước hoặc sử dụng thiết bị iOS 12, phương thức được gọi. Tôi đăng ký thông báo đẩy theo cách sau:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
Tải trọng được đặt thành như sau
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Tôi đã thử thêm "Thông báo từ xa" và "Xử lý nền" làm khả năng của ứng dụng trong tất cả các biến thể (chỉ "Thông báo từ xa" / "Xử lý nền", không có bất kỳ khả năng nào trong số đó, cho phép cả hai) mà không thay đổi. Tôi đặt đại biểu cho UNUserNotificationCenter nhưng một lần nữa không thành công. Tôi đặt tiêu đề cho phù hợp:
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
Từ các tài liệu, nó nói rằng phương thức này được gọi ngay cả khi ứng dụng ở chế độ nền:
Sử dụng phương pháp này để xử lý các thông báo từ xa đến cho ứng dụng của bạn. Không giống như phương thức: didReceiveRemoteNotification: chỉ được gọi khi ứng dụng của bạn đang chạy ở nền trước, hệ thống gọi phương thức này khi ứng dụng của bạn đang chạy ở nền trước hoặc nền.
Tôi còn thiếu gì ở đây cho iOS 13?
application(_:didReceiveRemoteNotification:withCompletionHandler:)
phương pháp thực hiện chưa?