Tôi hiện đang triển khai thông báo đẩy từ máy chủ phụ trợ đến ứng dụng của mình (macOS Catalina & iOS - cùng mã cơ sở), sử dụng Thông báo đẩy của Apple và cách xác thực dựa trên mã thông báo (tạo JWT từ keyId, teamId, ... & ký tên với khóa riêng được tạo trong bảng điều khiển dành cho nhà phát triển của Apple) để gửi các lần đẩy tới dịch vụ APN.
Vấn đề tôi gặp phải là tôi có thể gửi thành công thông báo "cảnh báo" (trạng thái 200, có tiêu đề apns-push-type: alert
) và nhận chúng trên thiết bị iOS và MacOS của tôi (thông báo đẩy xuất hiện thành công ở chế độ sản xuất và hộp cát) nhưng vì một số lý do, "im lặng "đẩy (với tiêu đề apns-push-type: background
) đều chỉ nhận được trên thiết bị iOS của tôi (iPhone), nhưng không phải trên máy Mac của tôi ( didReceiveRemoteNotification(...)
trong AppDelegate
không bao giờ được gọi là).
Những gì tôi đã làm cho đến nay:
- Đảm bảo tiêu đề yêu cầu APN được cấu hình chính xác để đẩy im lặng:
apns-push-type: background
- Đảm bảo có tiêu đề chủ đề APN chính xác:
apns-topic: my.bundle.id
(điều này khác với hộp cát / sản xuất) - Đã thêm tiêu đề ưu tiên "bán bắt buộc":
apns-priority: 5
(chỉ khi phân phối đẩy nền) - Đã xác minh rằng JWT được tạo là hợp lệ và được sử dụng trong tiêu đề xác thực APN:
authorization: mytoken
(đây phải là trường hợp, nếu không dịch vụ APN sẽ không phản hồi với trạng thái 200) - Xác nhận rằng ứng dụng của tôi có các quyền và khả năng chính xác được xác định trong Xcode (lý do của tôi: đây phải là trường hợp, nếu không, thông báo đẩy 'cảnh báo' cũng sẽ không hoạt động)
- Đã kiểm tra hai lần rằng thông báo đẩy cho ứng dụng Mac được cho phép / bật (cài đặt hệ thống đã kiểm tra)
- Đảm bảo mã thông báo của thiết bị đang gửi đẩy đến thực sự là từ thiết bị dự định nhận đẩy (ví dụ: MacBook của tôi)
- Đã kiểm tra xem khóa riêng tôi đang sử dụng để ký JWT có khả năng APN không
- Đã kiểm tra trong khi ứng dụng Mac đang chạy nhưng không tập trung & cả khi tập trung
Các yêu cầu APN tôi đang thực hiện để gửi đẩy là:
- Hộp cát: POST https://api.sandbox.push.apple.com/3/device/ {deviceToken}
- Sản xuất: POST https://api.push.apple.com/3/device/ {deviceToken}
Tải trọng (JSON) tôi đang gửi đến dịch vụ APN trong phần yêu cầu trông như sau:
{
"aps": {
"content-available": 1 # defines push as "silent"
},
"data": { #some key-value pairs here }
}
Trong mọi trường hợp (cả sản xuất & hộp cát, cả mã thông báo thiết bị của iOS và macOS), yêu cầu của tôi về APN đều trả về với mã trạng thái 200. MacBook của tôi đang chạy Catalina 10.15.3. Tôi có thể làm gì sai ở đây hoặc là thứ gì đó đơn giản là không được hỗ trợ cho ứng dụng Catalyst?