我正在开发一个应用程序,需要推送通知。我必须在推送之前检查用户是否允许通知,所以我写了一些这样的代码:
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);
}];
然后我转到系统设置,进入应用程序设置,允许通知但只打开图标角标(Badge)。在这里我仍然得到 granted YES!
这是为什么呢?我知道大多数人都写
UNAuthorizationOptions 选项 = UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound; 我只是对 requestAuthorizationWithOptions: 的工作原理感到困惑。当 granted 为 YES 时,我在应用程序设置中使用代码中的选项打开哪些类型的通知选项无关?
最佳答案
如果您的推送通知与用户交互,那么您必须调用 requestAuthorizationWithOptions: 此方法来请求对您想要的选项的授权。
大多数人写 UNAuthorizationOptions options = UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound; 因为他们希望能够更新应用程序角标(Badge)、显示警报和播放声音。
您正在传递 UNAuthorizationOptions options = UNAuthorizationOptionSound;,这意味着对于推送通知,您只想播放声音。
当您的应用首次启动并调用该方法时,这意味着您的应用正在请求用户对这些选项进行授权。用户可以授予或拒绝授权请求,如果用户授予则调用completionHandler并将granted设置为YES,否则为否。
系统会存储用户响应,以便应用不会再次询问用户是否授予授权请求。
关于ios - requestAuthorizationWithOptions :completionHandler: and system setting?中的 "options"是什么关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49045097/