iOS技术点:判断用户是否开启推送开关/是否允许推送?
- (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
- (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