iOS开发之判断用户是否打开APP通知开关,看我就够了。

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


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


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

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

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

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

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

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

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上用这个方法进行判断没有任何作用,现在就用新版的判断方法。下面是新版的判断方法。

if ([[UIApplication sharedApplication] currentUserNotificationSettings].types  == UIRemoteNotificationTypeNone) {   
       }
注意: 
currentUserNotificationSettings 是一个对象,属于UIUserNotificationSettings类
所以.types切莫忘记。


总结:

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

  

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

if (IOS8) { //iOS8以上包含iOS8
        if ([[UIApplication sharedApplication] currentUserNotificationSettings].types  == UIRemoteNotificationTypeNone) {
    }
 }else{ // ios7 一下    
         if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes]  == UIRemoteNotificationTypeNone) {
  }
}




你可能感兴趣的:(Object_c,IOS高级知识总结)