iOS学习开发iOS开发iOS开发实战

iOS开发基础:桌面角标的显示

2018-04-16  本文已影响113人  溪石iOS
角标.png

如果iOS应用需要显示角标(桌面应用图标上的小红点),关键代码就一行(片段1):

[UIApplication sharedApplication].applicationIconBadgeNumber = 3;

但是如果你只调用这句,看不到任何效果,这是为什么呢?
这是因为 iOS 8 以后,需要注册用户通知,以获得用户的授权,这时用户会得到以下通知:


授权提示

下面是注册通知的代码(片段2):

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    
if (version >= 8.0) {
      UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
      [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
      [application registerForRemoteNotifications];
}

由此可见,如果用户没有授权之前,就设置applicationIconBadgeNumber,就得不到任何效果,所以注册和设置的时机就显得很重要,一般来说,片段2放入AppDelegate 的didFinishLaunchingWithOptions方法中,这样在程序第一次安装后,就会提示用户授权;片段1放入applicationDidEnterBackground 方法中,这样,程序运行期间的变更会体现在角标上,当然如果角标体现的是网络通知等,请根据实际情况设置。
最后,如果用户点击了“不允许”,再次启动APP,授权对话框和角标设置都不会再次显示,这时可以引导用户前往“设置”打开“通知”开关:

设置通知开关

这时,我们可以通过代理判断是否被授权:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    if (!(notificationSettings.types & UIUserNotificationTypeBadge)) { //没有设置角标
        NSLog(@"授权失败,引导用户前往设置");
    }
}

在iOS10 后,苹果引入了一个管理通知的框架UserNotifications.framework,所以iOS10 以上可以这样判断:

#import <UserNotifications/UserNotifications.h>
...
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
    if (granted) {
        NSLog(@"授权成功");
    } else {
        NSLog(@"授权失败,引导用户前往设置");
    }
}];

小结

由于iOS8以后有通知授权的存在,我们需要选择设置角标数值的时机,并在用户拒绝(往往是误点)后,引导用户手动开启通知;为了解决历代通知注册的混乱局面,iOS10引入了统一的通知框架,但可能进一步加深了这种混乱,建议先使用iOS8的方式判断,并为iOS10做好准备,有什么心得,欢迎来评论区一吐为快。

上一篇 下一篇

猜你喜欢

热点阅读