"选项"之间的关系是什么?在requestAuthorizationWithOptions中:completionHandler:和系统设置?

时间:2018-03-01 07:59:50

标签: ios nsnotificationcenter

我正在开发一款应用,需要推送通知。我必须在推送之前检查用户是否允许通知,所以我写了一些这样的代码:

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时,我在应用设置中打开了哪些类型的通知选项以及代码中的选项?

3 个答案:

答案 0 :(得分:0)

如果您的推送通知与用户互动,那么您必须调用requestAuthorizationWithOptions:此方法来请求您所需选项的授权。

大多数人都会写UNAuthorizationOptions options = UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound;,因为他们希望能够更新应用徽章,呈现提醒和播放声音。

您正在传递UNAuthorizationOptions options = UNAuthorizationOptionSound;,这意味着推送通知,您只想播放声音。

当您的应用首次启动并调用该方法时,这意味着您的应用要求用户授权这些选项。用户可以授予或拒绝授权请求,如果用户被授予,则completionHandler被呼叫且granted被设置为YES,否则为NO

系统存储用户响应,以便应用程序不会再次要求用户授予授权请求。

答案 1 :(得分:0)

这个方法是请求授权。如果你想检查用户是否允许通知,你应该使用[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler]。它会给你一个命名设置,你可以用它来检查。

答案 2 :(得分:0)

对不起,这个"问题"来自我们的应用项目中的另一个代码片段的结果,在我询问我的同事之前我都不知道。 实际上我们项目中的一些代码片段负责首次启动时的通知授权请求(当弹出系统警报时)。该代码请求徽章,警报和声音。所以我的代码不再适用了。 感谢@ Boudhayan&和@ zacks的答案!