您的位置:首页 > 移动开发 > IOS开发

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

2016-10-24 08:29 543 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: