[iuud8]ios不同版本下推送本地通知

“推送很重要,无论是本地还是服务器”。虽然我看不出来,但毕竟产品经理强烈那么说,那就当他很重要好了。。。。

本地推送之前首先需要申请权限,在ios8以后与ios8以后是两套不同的API

    //推送
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)
    {
        if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes] == UIRemoteNotificationTypeNone) {
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeSound];
        }
    }
    else
    {
        if ([[UIApplication sharedApplication]currentUserNotificationSettings].types==UIUserNotificationTypeNone) {
            [[UIApplication sharedApplication]registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound  categories:nil]];
        }
    }

把这段话注册到
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
函数中去,这样,在程序第一次启动的时候,如果没有通知权限,就是弹出提示,向用户来请求权限;


以上就是请求权限的不同版本处理!!!

发送推送的时候就不需要在区别系统版本了,可以一套代码解决

    //定义本地通知对象
    UILocalNotification *notification=[[UILocalNotification alloc]init];
    
    //设置调用时间
    NSDate *now = [NSDate date];
    notification.fireDate=[now dateByAddingTimeInterval:10.0];//通知触发的时间,10s以后
    //使用本地时区
    notification.timeZone=[NSTimeZone defaultTimeZone];
    //通知重复次数
    notification.repeatInterval=1;
    //设置通知属性
    notification.alertBody=@"殿下,您的体力回满了。"; //通知主体
    notification.applicationIconBadgeNumber=1;//应用程序图标右上角显示的消息数
    notification.alertAction=@"打开应用"; //待机界面的滑动动作提示
//    notification.alertLaunchImage=@"Default";//通过点击通知打开应用时的启动图片,这里使用程序启动图片
    notification.soundName= UILocalNotificationDefaultSoundName;//通知声音
    notification.applicationIconBadgeNumber = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]+1;

    //设置用户信息
    //add key  给这个通知增加key 便于半路取消。nfkey这个key是我自己随便起的。
    // 假如你的通知不会在还没到时间的时候手动取消 那下面的两行代码你可以不用写了。
    NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:100],@"nf_powerFull",nil];
    [notification setUserInfo:dict];
    
    //调用通知
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    
    [notification release];


很简单的代码;两点需要注意的

notification.applicationIconBadgeNumber
就是应用图标上右上角那个小红点,表示收到的推送数量,因为,我们在启动游戏或者从后台激活游戏的时候,需要重新设置它为0

[[UIApplication sharedApplication]setApplicationIconBadgeNumber:0];

第二点:

[notification setUserInfo:dict];
如果还没开始推送的时候,用户就主动点开应用了,此时如果想主动取消该条推送的话就该用到这条设置的属性了

    NSArray *narry=[[UIApplication sharedApplication] scheduledLocalNotifications];
    NSUInteger acount=[narry count];
    if (acount<1) {
        return;
    }
    for (int i=0; i<acount; i++) {
        UILocalNotification *myUILocalNotification = [narry objectAtIndex:i];
        NSDictionary *userInfo = myUILocalNotification.userInfo;
        NSNumber *obj = [userInfo objectForKey:@"nf_powerFull"];
        int mytag=[obj intValue];
        if (mytag==100) {
            [[UIApplication sharedApplication] cancelLocalNotification:myUILocalNotification];
            return;
        }
    }
这样,我们就可以移除指定的一条推送。当然还有一种简单粗暴的方法:

[[UIApplication sharedApplication] cancelAllLocalNotifications];

直接移除掉所有的本地推送。

以上!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值