iOS 14 : UNUserNotificationCenter requestAuthorizationWithOptions always fails with "Notifications are not allowed for this application"

Viewed 1331

I could not find a solution for this and dumbfounded on this. I have this code :

UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
        UNAuthorizationOptionSound | UNAuthorizationOptionBadge;

[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions
        completionHandler:^(BOOL granted, NSError * _Nullable error) {
             NSLog(@"%i %@",granted, error);
        }];

and then it immediately gets into the call handler without showing the notification permission

2020-09-18 18:05:46.657991-0700 My App [404:9600] 0 Error Domain=UNErrorDomain Code=1 "Notifications are not allowed for this application" UserInfo={NSLocalizedDescription=Notifications are not allowed for this application}

What am i missing? The alert does not even popup.

NOTE: This same code works with no issues on iOS 13.x, on iOS 14 it immediately fails.

4 Answers

The problem is you omitted a step. Before asking for authorization, call getNotificationSettingsWithCompletionHandler: and look at the authorizationStatus of the resulting object. If it is UNAuthorizationStatusDenied there is no point proceeding.

My product name was in Japanese. When the product name is non-english the above issue happens! If I change the product name to English it works! I have filed an issue via Apple Feedback Assistant.

I had the same problem. The other posters are right that it seems to be a non-English character in the app name (mine was ñ), for some reason that's disallowed.

To get around it I added CFBundleDisplayName to my plist and put the app's "correct" name (with the ñ) in there, and removed that character from the ${PRODUCT_NAME}.

Related