user3570727
user3570727

Reputation: 10213

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

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.

Upvotes: 6

Views: 2294

Answers (4)

brooks42
brooks42

Reputation: 138

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}.

Upvotes: 0

Mahmut K.
Mahmut K.

Reputation: 850

My problem was to use Turkish characters in the Product Name section.

https://developer.apple.com/forums/thread/660648

In my case, Build Settings - Packaging - Product Name was not English. Changed to English and worked.

Upvotes: 3

user3570727
user3570727

Reputation: 10213

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.

Upvotes: 0

matt
matt

Reputation: 535316

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.

Upvotes: 0

Related Questions