Thông báo đẩy im lặng (nền) không nhận được trên macOS Catalina (ứng dụng Catalyst)


9

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 AppDelegatekhô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à:

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?

Câu trả lời:


2

Wow câu hỏi doozy. Tôi khá quen thuộc với những cơn đau đầu của APN nhưng có gì đó xuất hiện trong tôi từ những tài liệu mới nhất :

Ngoài ra, yêu cầu POST của thông báo phải chứa trường tiêu đề loại apns-đẩy có giá trị nền và trường ưu tiên apns có giá trị là 5. Máy chủ APN yêu cầu trường loại apns-đẩy khi gửi thông báo đẩy đến Apple Watch, và giới thiệu nó cho tất cả các nền tảng. Để biết thêm thông tin, hãy xem Tạo và gửi Yêu cầu POST đến APN.

Liệu 5 điều ưu tiên có làm nên sự khác biệt?

Ngoài ra, tôi thường cố gắng khắc phục những sự cố này là kiểm tra trong kho lưu trữ trái ngược với bản dựng Xcode. AFAIK máy chủ đẩy prod chỉ có thể gửi đến các bản dựng App Store, ad-hoc, Enterprise hoặc testflight, vì vậy nếu bạn chỉ xây dựng từ Xcode, tôi không nghĩ rằng bạn sẽ nhận được bất kỳ thông báo đẩy nào với các lỗi sản xuất.


1
Cảm ơn bạn đã suy nghĩ của bạn. Tôi cũng đã thử với tiêu đề ưu tiên vượn (giá trị 5), rất tiếc, không có sự khác biệt. Tôi sẽ thử các đề xuất cuối cùng mà bạn đã thực hiện liên quan đến thử nghiệm với bản dựng được lưu trữ.
Philipp Jahoda

@PhilippJahoda fyi lưu trữ chỉ là một nửa giải pháp, bạn vẫn cần phân phối ad-hoc hoặc một trong những phương pháp khác tôi liệt kê để nhận thông báo đẩy sản xuất. Điều này làm cho việc gỡ lỗi là một nỗi đau lớn hơn là tốt. Hy vọng bạn có thể giải quyết điều này, tôi rất vui được biết khi bạn làm điều đó.
Matthew Weldon

Vâng, cảm ơn bạn cho những người đứng đầu. Điều này là một nỗi đau lớn trong ass. Còn suy nghĩ nào khác không? Tôi không thể che giấu sự thật rằng nó đang hoạt động trên iOS nhưng không phải trên macOS.
Philipp Jahoda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.