Silent push notification (background) not received on macOS Catalina (Mac Catalyst app)
Asked Answered
P

1

13

I'm currently implementing push notifications from our backend server to our app (macOS Catalina & iOS - same code base), using Apple Push Notifications & the token based way of authentication (generating JWT from keyId, teamId, ... & signing it with the private key generated in the Apple developer console) to send pushes to APN service.

The problem I am facing is that I can successfully send "alert" notifications (status 200, with header apns-push-type: alert) and receive them on my iOS and MacOS device (the push notifications appear successfully in production and sandbox mode) but for some reason, "silent" pushes (with header apns-push-type: background) are only received on my iOS device (iPhone), but not on my Mac (didReceiveRemoteNotification(...) in AppDelegate is never called).

What I have done so far:

  • Made sure APN request header is correctly configured for silent push: apns-push-type: background
  • Made sure to have the correct APN topic header: apns-topic: my.bundle.id (this is different for sandbox/production)
  • Added the "semi-required" priority header: apns-priority: 5 (only when delivering background pushes)
  • Verified that the created JWT is valid and used in the APN auth header: authorization: mytoken (this must be the case, otherwise APN service would not respond with status 200)
  • Confirmed that my application has the correct entitlements & capabilities defined in Xcode (my reasoning: this must be the case, otherwise 'alert' push notifications would also not work)
  • Double checked that push notifications for the Mac app are allowed/enabled (checked system settings)
  • Made sure the device token im sending the push to is actually from the device intended to receive the push (e.g. my MacBook)
  • Checked that the private key I'm using to sign the JWT has the APN capability
  • Tested while the Mac app is running but not in focus & also when in focus

The APNs requests I am performing to send the push are:

The payload (JSON) I'm sending to APN service in the request body looks as follows:

{
   "aps": {
      "content-available": 1 # defines push as "silent"
   },
   "data": { #some key-value pairs here }
}

In any case (both production & sandbox, both with the device token of iOS and macOS), my request to APN returns with a status code 200. My MacBook is running Catalina 10.15.3. What am I possibly doing wrong here or is that something that is simply not supported for Catalyst apps?

Parenthesis answered 11/2, 2020 at 8:8 Comment(0)
L
2

Wow doozy question. I'm reasonably familiar with APNs headaches but something popped out at me from the latest docs:

Additionally, the notification’s POST request should contain the apns-push-type header field with a value of background, and the apns-priority field with a value of 5. The APNs server requires the apns-push-type field when sending push notifications to Apple Watch, and recommends it for all platforms. For more information, see Create and Send a POST Request to APNs.

Does the priority 5 thing make a difference?

Also my usually attempt to fix these problems is to test in an archive as opposed to an Xcode build. AFAIK the prod push server can only send to App Store, ad-hoc, enterprise, or testflight builds, so if you're just building from Xcode I don't think you'd get any push notifications with production apns.

Lampkin answered 19/2, 2020 at 1:13 Comment(4)
Thank you for your thoughts. I have tried with the apes-priority header (value 5) as well, unfortunately no difference. I'll try the final suggestions you made concerning testing with an archived build.Parenthesis
@PhilippJahoda fyi archiving is only half the solution, you still need to distribute ad-hoc or one of the other methods I listed to receive production push notifications. This makes debugging a larger pain as well. Hopefully you can solve this, I'd be pleased to know when you do.Lampkin
Yes, thank you for the heads up. This thing is a major pain in the ass. Any more thoughts other than that? I can't wrap my head around the fact that it is working on iOS but not on macOS.Parenthesis
Im having the same issue :(Brushwood

© 2022 - 2024 — McMap. All rights reserved.