Provisional Permission is not working as expected in iOS 16

We recently developed the provisional permission for our app, but we have noticed that is not working as expected in iOS 16 (We have tested only there). Currently we request the permissions like this:

 UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound, .provisional]) { [weak self] _, _ in

           // here we register for pushes in case authorizationStatus is provisional or authorised

        }

What happens is we do get the 1st notification with the keep CTA - once tapped we see that there pops an action: "Deliver Immediately", but even though the user selects that, we still see under setting the pushes are marked as "Deliver Quietly". In addition to this the sound and bage still stay as toggled off - and the lock screen and banner as well stay off.

Basically, nothing changes after the user selects "Deliver Immediately"

I observed the same for iOS 18. There is a partial workaround:

  • when authorization status is .notDetermined, request only .provisional authorization
  • when authorization status is .authorized (i.e. after the user chose Keep), request [.alert, .badge, .sound]

This way you at least get support for badges and sound, but it is still bad because the Lock screen and Banner settings will still be disabled and I think there is no way to re-request them programmatically.

Unfortunately this makes provisional authorization kind of undesirable for many use cases.

Provisional Permission is not working as expected in iOS 16
 
 
Q