我正在开发一款应用,需要推送通知。我必须在推送之前检查用户是否允许通知,所以我写了一些这样的代码:
UNUserNotificationCenter *center = [UNUserNotificationCenter
currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionSound; //most snippets on the internet use 'UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound;'
[center requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError * _Nullable error) {
completion(granted);
}];
然后我转到系统设置,输入应用设置,允许通知但仅打开图标徽章。在这里,我仍然得到granted
是的!
为什么?我知道大多数人写的
UNAuthorizationOptions options = UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound;
我对requestAuthorizationWithOptions:
的工作原理感到困惑。当granted
为YES时,我在应用设置中打开了哪些类型的通知选项以及代码中的选项?
答案 0 :(得分:0)
如果您的推送通知与用户互动,那么您必须调用requestAuthorizationWithOptions:
此方法来请求您所需选项的授权。
大多数人都会写UNAuthorizationOptions options = UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound;
,因为他们希望能够更新应用徽章,呈现提醒和播放声音。
您正在传递UNAuthorizationOptions options = UNAuthorizationOptionSound;
,这意味着推送通知,您只想播放声音。
当您的应用首次启动并调用该方法时,这意味着您的应用要求用户授权这些选项。用户可以授予或拒绝授权请求,如果用户被授予,则completionHandler
被呼叫且granted
被设置为YES
,否则为NO
。
系统存储用户响应,以便应用程序不会再次要求用户授予授权请求。
答案 1 :(得分:0)
这个方法是请求授权。如果你想检查用户是否允许通知,你应该使用[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler]。它会给你一个命名设置,你可以用它来检查。
答案 2 :(得分:0)
对不起,这个"问题"来自我们的应用项目中的另一个代码片段的结果,在我询问我的同事之前我都不知道。 实际上我们项目中的一些代码片段负责首次启动时的通知授权请求(当弹出系统警报时)。该代码请求徽章,警报和声音。所以我的代码不再适用了。 感谢@ Boudhayan&和@ zacks的答案!