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,一经查实,立即删除!

相关文章

php金额类,PHP类-人民币金额转大写

这篇文章介绍的内容是关于PHP类-人民币金额转大写&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下<?php //人民币金额转大写程序PHP版class Ext_Num2Cny{static $basical array(0>"零","壹","…

第一课 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;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将…

2015已经过去三分之一了

今天5月4号转载于:https://www.cnblogs.com/rewufu/p/4475352.html

VIM自动格式化C代码

From: http://leloup.blog.51cto.com/blog/1113857/596107 在vim的官方FAQ &#xff08;http://vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#14.6&#xff09;找到的&#xff1a; 格式化全文&#xff1a; ggG 自动缩进当前行&#xff1a; 这个是原文节选&#xff1a; …

Claims 认证详解(1)

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

ThinkPHP - 6 - 学习笔记(2015.5.4)

解决&#xff1a;OneThink 站点无法被友言uyan后台识别 打开友言uyan插件功能&#xff0c;但OneThink站点无法被友言uyan后台检测到。页面生成的uyan代码为&#xff1a; 1 <!-- UY BEGIN --> 2 <div id"uyan_frame"></div> 3 <script type"…

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;汗………

CodeIgniter配置之config

配置说明 $config[language]&#xff1a;指定项目语言包。需要注意的时Codeigniter自带的类库错误提示语言包位于/system/language/english/目录下&#xff0c;当这里配置非english时&#xff0c; 如果需要用到这些类库&#xff0c;则需要拷贝语言包到指定的目录中&#xff0c;…

VIM 文件编码识别与乱码处理

From: http://edyfox.codecarver.org/html/vim_fileencodings_detection.html 在 Vim 中&#xff0c;有四个与编码有关的选项&#xff0c;它们是&#xff1a;fileencodings、fileencoding、encoding 和 termencoding。在实际使用中&#xff0c;任何一个选项出现错误&#xff0c…

php 动态修改网站配置,动态修改php的配置项

我们一般修改php的配置项都是在php.ini中修改。在php,ini中的修改会影响到所有使用php的程序。假如我想让修改只在某个域名下生效&#xff0c;该如何做呢?使用ini_set() 首先想到的可能是使用ini_set()方法在脚本中修改。但是这个只能修改作用域为PHP_INI_USER和PHP_INI_ALL的…

【Oracle】Python 连接Oracle 数据库

From: http://space.itpub.net/22664653/viewspace-711728 Python 连接Oracle 数据库&#xff0c;需要使用cx_Oracle 包。1 下载cx_Oracle该包的下载地址&#xff1a;http://cx-oracle.sourceforge.net/下载的时候&#xff0c;注意选择与操作系统和oracle版本相对应的cx_Oracle…

php评星,jQuery+PHP星级评分实现方法

搜索热词本例实现的效果&#xff1a;过渡动画显示评分操作。及时更新平均得分和用户所评的分数。后台限制用户重复评分操作&#xff0c;并在前端及时显示。XHTMLHTML结构分为用于显示灰星星div#big_rate、亮星星div#big_rate_up、分数span#s及span#g和提示信息div#my_rate。CSS…

Web Api无法访问 404

最近需要在项目中添加一个Web Api&#xff0c;项目是.net mvc4项目。要想添加一个api&#xff0c;无论你怎么封装&#xff0c;无非就是在Application_Start方法中将WebApi的路由注册进去就行了。例如如下代码&#xff1a; public static class WebApiConfig{public static void…