iOS - 判断用户是否允许推送通知(iOS7/iOS8)

(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)

 1 /**
 2  *  check if user allow local notification of system setting
 3  *
 4  *  @return YES-allowed,otherwise,NO.
 5  */
 6 + (BOOL)isAllowedNotification {
 7     //iOS8 check if user allow notification
 8     if ([UIDevice isSystemVersioniOS8]) {// system is iOS8
 9         UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
10         if (UIUserNotificationTypeNone != setting.types) {
11             return YES;
12         }
13     } else {//iOS7
14         UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
15         if(UIRemoteNotificationTypeNone != type)
16             return YES;
17     }
18     
19     return NO;
20 }

下面这个方法我是添加在UIDecive的Category中的,用于判断当前系统版本是大于iOS8还是小于iOS8的

 1 /**
 2  *  check if the system version is iOS8
 3  *
 4  *  @return YES-is iOS8,otherwise,below iOS8
 5  */
 6 + (BOOL)isSystemVersioniOS8 {
 7     //check systemVerson of device
 8     UIDevice *device = [UIDevice currentDevice];
 9     float sysVersion = [device.systemVersion floatValue];
10     
11     if (sysVersion >= 8.0f) {
12         return YES;
13     }
14     return NO;
15 }

 

转载于:https://www.cnblogs.com/fu4904/p/4475015.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一课 PE格式

From: http://bbs.pediy.com/showpost.php?p138590&postcount2 要想学脱壳&#xff0c;第一步就得掌握PE格式&#xff0c;PE是Portable Executable File Format&#xff08;可移植的执行体&#xff09;简写&#xff0c;它是目前Windows平台上的主流可执行文件格式。 Micr…

React开发(182):ant design table中 带线框的列表

ReactDOM.render(<Tablecolumns{columns}dataSource{data}borderedtitle{() > Header}footer{() > Footer}/>,mountNode, );

Linux DHCP Server 配置给FIT AP 使用的option

Linux DHCP Server 配置给FIT AP 使用的option 2010-09-17 09:45:52标签&#xff1a;Linux DHCP Server option FIT    [推送到技术圈] 版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将…

Claims 认证详解(1)

很多时候&#xff0c;我们进行应用程序之间的交互。比如&#xff0c;一个员工登录了门户网站后&#xff0c;需要访问进销存系统、CRM系统&#xff0c;如果不进行特殊处理&#xff0c;就需要多次输入用户名和密码。用过SharePoint的朋友&#xff0c;可能知道有个“单点登录”的东…

php什么设置前端代码,代码编辑器与PHPSTUDY的安装与配置过程(前端第一课)

前端第一课&#xff1a;编辑器与PHPSTUDY的安装与配置过程编辑器安装过程1.Visual Studio Code 官网下载软件&#xff0c;解压下载文件&#xff0c;打开安装程序安装至你的计算机。2.安装“Chinese(Simplified)Language Pack for Visual Studio Code” 插件&#xff0c;并重启v…

重学java基础第二十课:环境配置和第一个helloWorld

大家好 我是歌谣 闲来无事做 不如敲代码 今天大概说如何编译一个简单的helloWorld小案例 安装环境的配置 1首先进入jdk的官网 找到对应的jdk版本 这边一window为例 2接下来--右键--计算机--属性--进行高级系统设置 3在用户变量里面配置 JAVA_HOME:G:\java CLASSPATH:.;%JAV…

vim QuickFix 窗口

From: http://hi.baidu.com/bali5/blog/item/82f87c0ab670a136b0351d4f.html 在上一节的图10中大家可以看到在窗口下面有一个显示查询结果的窗口, 这个窗口中列出了查询命令的查询结果, 用户可以从这个窗口中选择每个结果进行查看, 这个窗口叫"QuickFix"窗口, 以前也…

谷歌笔试题(Google十二岁生日晚)

2010-9-27日是Google十二岁生日&#xff0c;就在生日当天&#xff0c;Google进行了一场宣讲会加笔试。Google果然不一般&#xff0c;宣讲会门外都站满了人&#xff0c;也可见竞争之激烈&#xff0c;据说只需要40个人参加面试&#xff0c;而笔试的人有1000之多&#xff0c;汗………

RHE5服务器配置——Samba服务器

Samba的核心 Samba的核心是两个守护进程&#xff0c;即smbd和nmbd。服务器启动到停止期间持续运行&#xff0c;smba监听139TCP端口&#xff1b;nmbd监听137和 138UDP端口。smbd和nmbd使用的全部配置信息保存在smb.conf文件中&#xff0c;smb.conf向smbd和nmbd两个守护进程说明输…

PHP检查微信域名屏蔽接口,微信域名检测API接口,实时查询域名是否被微信拦截...

微信域名检测API接口的应用场景&#xff1a;由于微信对外部链接内容规范比较严格&#xff0c;所以可能一不小心就会被判定为是违反内容规范的&#xff0c;或被同行恶意举报投诉之类的。那么此时就要用到微信域名检测接口&#xff0c;实时检测域名的状态&#xff0c;实时查询域名…

NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享

原文地址&#xff1a; http://my.oschina.net/u/1791256/blog/283064 TOMCAT7.0 NGINX MEMCACHED memcached-session-manager 实现SESSION共享 http://blog.csdn.net/nerissa/article/details/18961361 ; //参考博客 http://pan.baidu.com/s/1pJlZ0mB //相关包下载&#…

实验二十四、OSPF 在NBMA 环境中点到点的配置

实验二十四、OSPF 在NBMA 环境中点到点的配置 一、 实验目的 1. 掌握NBMA 环境中点到点的配置 2. 理解NBMA 环境中点到点网络类型的意义 二、 应用环境 在帧中继的网络中&#xff0c;OSPF 的路由更新不能正常进行&#xff0c;需要配置点到点的网络类型保证OSPF 协议的正常运行…

ad从2003升级到2008总结

一、升级前要在2003域控运行adprep命令来扩展2003森林架构和域架构 &#xff08;adprep命令在2008 r2安装光盘的support\adprep目录。需要将其复制到2003域控中&#xff09; 源2003 server为64位&#xff1a;adprep.exe 源2003 server为32位&#xff1a;adprep32.exe 转载于:h…

在Xcode6中搭建Python开发环境

http://jingyan.baidu.com/article/f71d60379c73001ab741d14e.html 对于使用Mac电脑&#xff0c;刚入门Python的同学&#xff0c;一定很好奇是不是可以使用Xcode这款IDE工具集成学习Python语言&#xff0c;答案是Yes&#xff01;网络中有很多使用Xcode5搭建的帖子&#xff0c;现…

设计模式心得:三——命令模式

继续设计模式心得体验——命令模式。 命令模式&#xff1a; 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 一般在命令模式中有三个元素&#xff0c;invoker、command、…