[go: up one dir, main page]

Silent push throttling breaking accessibility app for neurodivergent users

Hello all 👋

We're developing an app for families with neurodivergent members (primarily autistic children) and have run into a critical reliability issue with silent push notifications that breaks core functionality.

Our current implementation:

When a caretaker updates the person's daily routine/schedule in our system, we send a silent push notification to the user's device. The app wakes, connects to our server, downloads the updated schedule, and creates/updates local notifications for upcoming activities.

The problem:

Because the app is rarely/never directly interacted with by the end user (the child doesn't open the app - caregivers configure it on their behalf), silent push notifications get progressively throttled and eventually stop being delivered entirely. This means schedule changes made by caregivers never reach the device, breaking the app's core value proposition. Uninstalling and reinstalling doesn't reset the throttling state

Questions:

Is there any way to reset or mitigate throttling for devices that legitimately need background updates but have low or no user interaction? This is an accessibility use case where the end user (child) doesn't interact with the app, but the app must reliably receive updates. Would switching to regular (visible) push notifications avoid this throttling even if the app is not interacted with?

We already have Critical Alerts entitlement, but for regular updates we're worried that the "CRITICAL ALERT" banner will be too upsetting for the child. Is there any exception process for accessibility apps to change the way Critical Alerts are presented?

For neurodivergent individuals, predictable routines are essential. When schedule updates don't reach their device, it can cause significant distress. This is a genuine accessibility need, not a "nice-to-have" feature.

Any guidance from Apple engineers or developers who've solved similar challenges would be greatly appreciated.

Thank you!

Answered by Engineer in 861265022

There are no exceptions, entitlements, etc. that will cut through the throttling of silent notifications. These are not a suitable solution if you need the app to process or take action for all sent notifications.

What you will want to use is a Notification Service Extension as described in the article Modifying content in newly delivered notifications

The NSE will be launched for every notification, and you can create your local notifications in the extension.

The main issue you might have is, these notifications will have to have visible content. While there is an entitlement you can request, your use case is not necessarily what it was intended for, and your request could be rejected. If you want to try anyways, that's up to you.

Without the entitlement, you could make the otherwise visible notifications less disruptive. By setting the interruption-level entry in your payload to passive.

Passive notifications (as described in Notification Payload key reference) will be visible in the Notification Center, but will not wake up the screen, or play a sound, or interrupt if another app is being used at the time.

You can try those out if it works for your clients, and if not, you can try and apply for the filtering entitlement. But a mismatch of supported use cases, and the recommended way of doing what you want is to send notifications at the time, you may want to keep alternative solutions in your back pocket in case your request is denied.


Argun Tekant /  WWDR Engineering / Core Technologies

All I can add is that from our experience, even when push notifications are visible (i.e. contain a title and body), background execution of the app is not guaranteed. It is solely decided by the system whether it triggers background execution of an app.

I am not aware of any mechanism to force background execution. I assume one must exist, though, because to my knowledge mobile device management also relies on silent push notifications to update a devices' settings.

One question about your use case though: you say that the app updates its schedule in the background to deliver local notifications. Could the notifications not also be sent by the server? Then you would not need to rely on background execution at all.

Could the notifications not also be sent by the server? Then you would not need to rely on background execution at all.

Yes, we could send directly from the server, but then it won't work if the device, for some reason, is not connected to the internet. The only way to guarantee that the notification shows up at the correct time, no matter what the circumstances, is to have it scheduled by the device itself. But definitely a good thought—thank you kindly 🙏

Accepted Answer

There are no exceptions, entitlements, etc. that will cut through the throttling of silent notifications. These are not a suitable solution if you need the app to process or take action for all sent notifications.

What you will want to use is a Notification Service Extension as described in the article Modifying content in newly delivered notifications

The NSE will be launched for every notification, and you can create your local notifications in the extension.

The main issue you might have is, these notifications will have to have visible content. While there is an entitlement you can request, your use case is not necessarily what it was intended for, and your request could be rejected. If you want to try anyways, that's up to you.

Without the entitlement, you could make the otherwise visible notifications less disruptive. By setting the interruption-level entry in your payload to passive.

Passive notifications (as described in Notification Payload key reference) will be visible in the Notification Center, but will not wake up the screen, or play a sound, or interrupt if another app is being used at the time.

You can try those out if it works for your clients, and if not, you can try and apply for the filtering entitlement. But a mismatch of supported use cases, and the recommended way of doing what you want is to send notifications at the time, you may want to keep alternative solutions in your back pocket in case your request is denied.


Argun Tekant /  WWDR Engineering / Core Technologies

Thank you for the detailed and realistic guidance. This is very helpful.

I totally understand your point that the filtering entitlement is not originally intended for suppressing notifications for data sync purposes.

One question: With the filtering entitlement, will the alert notifications work after force-quit?

Thanks again for the pragmatic advice.

When you are handling the notifications in the extension (which will be done even with the filtering entitlement), app state does not matter, as the extension will be launched in a separate process.

You would need to compartmentalize you logic though, as a force quit app can only be launched by the user after that.

Many thanks, very much appreciated 🙏

Silent push throttling breaking accessibility app for neurodivergent users
 
 
Q