iOS 通知功能的状态判断与开启

App的设置界面通常会有“开启通知”这项功能,这个需要在跳转设置页面的时候就进行判断,如果当前是已开启的状态,多数app就直接隐藏系统通知这一行功能了,如果是未开启,则显示这项功能,并点击可跳转到手机系统设置的app通知开启界面。
判断通知功能是否开启:

    ///判断通知权限是否已开启
    if (@available(iOS 10.0, *)) {
        
            [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
                
                if (settings.authorizationStatus == UNAuthorizationStatusDenied || settings.authorizationStatus == UNAuthorizationStatusNotDetermined) {
                    // 用户未授权开启通知
                    dispatch_async(dispatch_get_main_queue(), ^{
                        ///用户未开启通知功能
                        isOpenNoti = NO;
                       //更新列表数组的数量和内容(比如通知这一行数据还要不要)
                      //刷新列表
                    });
                }else if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
                    //用户已授权开启通知
                    dispatch_async(dispatch_get_main_queue(), ^{
                      ///用户已开启通知功能
                        isOpenNoti = YES;
                        //更新列表数组的数量和内容(比如通知这一行数据还要不要)
                      //刷新列表
                    });
                }
            }];
        
            
        } else {
            //iOS 10 以下系统版本询权方式
            if ([[UIApplication sharedApplication] currentUserNotificationSettings].types  == UIRemoteNotificationTypeNone) {
                
                dispatch_async(dispatch_get_main_queue(), ^{
                   ///未开启通知
                    isOpenNoti = NO;
                  //更新列表数组的数量和内容(比如通知这一行数据还要不要)
                      //刷新列表
                });
            }else {
                dispatch_async(dispatch_get_main_queue(), ^{
                    ///用户已开启通知功能
                    isOpenNoti = YES;
                    //更新列表数组的数量和内容(比如通知这一行数据还要不要)
                      //刷新列表
                });
            }
        }

由于通知状态是异步获取的,所以需要在获取了用户通知状态后切回主线程的block内根据通知状态更新列表数组的内容(分组数或某个分组的个数),然后刷新列表。

如果当前用户未开启通知功能,点击“开启通知”这一行,跳转到系统设置中app对应的权限列表进行开启

 if (@available(iOS 10.0, *)) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
        } else {
            
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=NOTIFICATIONS_ID&path=App的BundleID"] options:@{} completionHandler:nil];
        }

你可能感兴趣的:(iOS 通知功能的状态判断与开启)