文档章节

iOS开发之判断用户是否打开APP通知开关

Youth_关旋
 Youth_关旋
发布于 2016/11/14 09:10
字数 691
阅读 42
收藏 0

 

标签: enabledRemoteNotificiOS通知iOS是否开启推送开关currentUserNotificat

 

1.最近在做app内部的推送开关功能。 这样顾客可以自己定义推送给他的内容,屏蔽不想要的一些烦人推送。 

 

在开发过程中, 如果顾客打开推送开关的时候,也已经向服务器发送指令,进行推送开关同步,给它说这个用户已经打开了A推送,现在服务器推送A推送给客户端, 这时候照说,客服端是可以收到通知的,但是客服端却没有收到。 这是为什么呢? 很简单的一个问题,原来是顾客没有在系统通知处打开app的通知开关,所以收不到推送是正常现象。 

 

那现在就产生了一个需求:

       用户在进行设置推送开关的时候,当用户打开推送开关为开的时候,需要去判断 系统通知处的 推送开关用户有没有进行设置?

       网上这样的代码都是一大把,关于怎么去检测系统通知有没有打开,但是,发现运用到程序中,没什么鸟用, 会一直提示说,用户没有打开推送。

下面就到了贴代码的环节了,首先先看下这段代码:

 

 

  1. if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes]  == UIRemoteNotificationTypeNone) { //判断用户是否打开通知开关  
  2.         }  

[objc] view plain copy

 在CODE上查看代码片派生到我的代码片

  1. typedef NS_OPTIONS(NSUInteger, UIRemoteNotificationType) {//这个是用户当前通知的几种状态,第一种就是用户没有开大通知开关  
  2.     UIRemoteNotificationTypeNone    = 0,  
  3.     UIRemoteNotificationTypeBadge   = 1 << 0,  
  4.     UIRemoteNotificationTypeSound   = 1 << 1,  
  5.     UIRemoteNotificationTypeAlert   = 1 << 2,  
  6.     UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,  
  7. } NS_ENUM_DEPRECATED_IOS(3_0, 8_0, "Use UIUserNotificationType for user notifications and registerForRemoteNotifications for receiving remote notifications instead.") __TVOS_PROHIBITED;  

 

我在程序中就是用到了这个方法,去进行检测,用户有没有打开推送开关, 却忽视了 

 

  1. NS_ENUM_DEPRECATED_IOS(3_0, 8_0, "Use UIUserNotificationType for user notifications and registerForRemoteNotifications for receiving remote notifications instead.") __TVOS_PROHIBITED  

 


 

通过上面的图,可以看到此方法在iOS8.0就废弃了,虽然说并没有被移除,但是也要用他最新建议的方法去进行版本的兼容,现在加上在iOS9.0上用这个方法进行判断没有任何作用,现在就用新版的判断方法。下面是新版的判断方法。

 

[objc] view plain copy

 在CODE上查看代码片派生到我的代码片

  1. if ([[UIApplication sharedApplication] currentUserNotificationSettings].types  == UIRemoteNotificationTypeNone) {     
  2.        }  

注意: [objc] view plain copy

 在CODE上查看代码片派生到我的代码片

  1. currentUserNotificationSettings 是一个对象,属于UIUserNotificationSettings类  

所以.types切莫忘记。

 

 

总结:

 最完善的做法就是,进行两者兼容 iOS7下的也要兼容, iOS7以上的我更要兼容啦,最完善的做法

  

 

#define IOS8 ([[[UIDevice currentDevice] systemVersion] doubleValue] >=8.0 ? YES : NO)

 

 

  1. if (IOS8) { //iOS8以上包含iOS8  
  2.         if ([[UIApplication sharedApplication] currentUserNotificationSettings].types  == UIRemoteNotificationTypeNone) {  
  3.     }  
  4.  }else{ // ios7 一下      
  5.          if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes]  == UIRemoteNotificationTypeNone) {  
  6.   }  
  7. }  
  8.  

本文转载自:http://blog.csdn.net/zhonggaorong/article/details/51374275

共有 人打赏支持
Youth_关旋
粉丝 2
博文 70
码字总数 23376
作品 0
枣庄
私信 提问
iOS 10 的推送 User Notifications Framework

介绍 User Notifications Framework 是苹果在 WWDC 2016 推出的。iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifications.framework 来集中管理和使用...

佳妮
10/30
0
0
苹果向开发者发布 iOS 8 Beta 3,第三个测试版

苹果今天向开发者发布了 iOS 8 Beta 3,距离 Beta 2发布相隔三周。iOS 8 测试版在今年 WWDC 结束后发布,距离今天一个多月。iOS 8 Beta 3的编译号为12A4318c,iOS 8测试版用户可以通过 OTA ...

oschina
2014/07/08
1K
9
iOS中使用schema协议调用APP和使用iframe打开APP的例子

在iOS中,需要调起一个app可以使用schema协议,这是iOS原生支持的,并且因为iOS系统中都不能使用自己的浏览器内核,所以所有的浏览器都支持,这跟android生态不一样,android是可以自己搞内核...

BearCatYN
2015/06/12
0
1
已有ecshop网站开发对接安卓,IOSAPP

[背景] 大学生创业项目起步,目前已上线运营的网站版以ecshop二次开发而成,业务扩大需要对接安卓+IOS双平台移动APP(网址:http://h5.sanguobuluo.com) 【业务需求】 一、功能需求 1.开发安...

三国部落
2016/01/10
7
0
Safari 浏览器被曝存在严重的 JavaScript 漏洞

据appleinsider报道,iOS 6系统Safari浏览器包含严重的JavaScript漏洞,可能会导致安全和隐私性问题。最新iOS 6包含了“智能App横幅”功能,开发者可以利用该功能在自己的网站上向用户推荐应...

oschina
2012/12/22
2.9K
11

没有更多内容

加载失败,请刷新页面

加载更多

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles,手把手...

阿里云官方博客
16分钟前
1
0
Double数相加后结果不准确

在我们进行两个double运算时,例如:2..0-1.1 不是想象的输出0.9,而是0.89999999999999999。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十...

嘴角轻扬30
24分钟前
1
0
去除移动端点击效果

移动端点击时,会有一个类似active的短暂背景淡出效果,去除该效果可使用 -webkit-tap-highlight-color: rgba(255, 0, 0, 0);

originDu
25分钟前
1
0
腾讯云与MariaDB 基金会签署战略合作,共建全球开源生态圈

本文由云+社区发表 腾讯云日前与MariaDB基金会正式签署战略合作协议,2019年,腾讯云将继续以白金会员身份为基金会的发展提供强有力的资源支持,与MariaDB全球用户和开发者一道,共建开放共赢...

腾讯云加社区
30分钟前
2
0
Kotlin的SAM(Single Abstract Method)

今天有人在群里问kotlin支持SAM的问题,其实kotlin不支持SAM,因为人家支持FP(function programing) package reactinterface Test { fun print()}class TestInterface(var...

SuShine
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部