iOS技术点:判断用户是否开启推送开关/是否允许推送?

来源:互联网 发布:如何向妈妈介绍云计算 编辑:程序博客网 时间:2024/05/16 02:06
- (BOOL)isAllowedNotification {
   
//iOS8 check if user allow notification
   
if (IS_IOS_8) {// system is iOS8
        UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
       
if (UIUserNotificationTypeNone != setting.types) {
           
return YES;
        }
    }
else {//iOS7
        UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
       
if(UIRemoteNotificationTypeNone != type)
           
return YES;
    }
   
   
return NO;
}

(iOS8中 用户开启的推送通知类型 对应的是 UIUserNotificationType (下边代码中 UIUserNotificationSettings 的types属性的类型) ,iOS7对应的是 UIRemoteNotificationType)

此处以iOS8的UIUserNotificationType为例,(如下图)当本地通知或push/远程通知 推送时,这个常量指明了app如何去提醒用户(比如:Badge,Sound,Alert的组合) 

那么如何获得呢,在iOS8中是通过types属性,[[UIApplication sharedApplication] currentUserNotificationSettings].types

如上图,获得之后,我们要知道的是这个property储存了所有你指定的推送类型(Badge,Sound,Alert),而在图一中我们知道了推送类型对应的bitmask:(以四位二进制为例)

UIUserNotificationTypeNone     = 0 ,             == 0000                                 0

UIUserNotificationTypeBadge = 1 << 0 ,     == 0001      1左移0位     2^0 = 1

UIUserNotificationTypeSound = 1 << 1 ,     == 0010      1左移1位     2^1 = 2 

UIUserNotificationTypeAlert = 1 << 2 ,   == 0100      1左移2位    2^2 = 4

(以前老师教c语言的时候说过,还可以把左移当做乘2,右移除2)

假如用户勾选推送时显示badge和提示sound,那么types的值就是3(1+2) ==  0001 & 0010 =  0011    ==  2^0 + 2 ^1 = 3


所以,如果用户没有允许推送,types的值必定为0
0 0
原创粉丝点击