码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-06-16 19:23:38      阅读:168      评论:0      收藏:0      [点我收藏+]

标签: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

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

标签:ios   技术   推送   

原文地址:http://blog.csdn.net/wxs0124/article/details/46520215

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!