如何取消作为推送通知的通知中心的通知

时间:2013-10-07 12:04:26

标签: ios objective-c push-notification uilocalnotification

我正在使用推送通知和本地通知开发iOS应用,我知道如何从中心删除1和所有通知,

使用

[[UIApplication sharedApplication]cancelAllLocalNotifications];

但我的问题是,如果我安排了一些本地通知,

并且推送通知已在didReceiveRemoteNotification中到达 我写的是

[[UIApplication sharedApplication]cancelAllLocalNotifications];用于明确通知中心,

但它也清除了我的所有LocalNotification ......

修改 如果NC中有3个通知,即1来自本地通知,2个来自push(来自服务器),在这种情况下如何处理它?我点击NC的第一个通知(来自服务器)。在这种情况下应该做什么,我的应用徽章应该是2。

那我该怎么办?

3 个答案:

答案 0 :(得分:3)

cancelAllLocalNotifications只取消本地通知,即使在名称中也是如此!您可以在文档中阅读推送通知:

  

取消所有预定的本地通知的传递。

由于推送通知是服务器端,因此您的应用中无法取消。要从通知中心删除推送通知,只需将applicationBadegNumber设置为0。

答案 1 :(得分:2)

有一个选项,每个通知都包含一个字典,因此当您创建任何本地通知时,在字典中添加任何键,指定此通知用于本地通知。因此,您可以检查它是否不是我的本地通知然后我将删除它。

 -(void)scheduleLocalNotification{
    [self cancelAlarm]; //clear any previous alarms
     UILocalNotification *alarm = [[UILocalNotification alloc] init];
    alarm.alertBody = @"alert msg";
     alarm.fireDate = [NSDate dateWithTimeInterval:alarmDuration sinceDate:startTime]; 
    alarm.soundName = UILocalNotificationDefaultSoundName; 
   NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"localNotification"  forKey:@"localNotification"];
   alarm.userInfo = userInfo;
    [[UIApplication sharedApplication] scheduleLocalNotification:alarm];

}

 -(void)cancelNotification{
for (UILocalNotification *notification in [[[UIApplication sharedApplication] scheduledLocalNotifications] copy]){
    NSDictionary *userInfo = notification.userInfo;
    if (![self.key isEqualToString:[userInfo objectForKey:localNotification]]){
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
    }
}

}

答案 2 :(得分:0)

applicationbadgenumber由您管理。删除预定通知不会更改该号码。你必须自己管理。我前段时间做了一个可能有帮助的演讲。 http://www.youtube.com/watch?v=ixQqZWtn0pg在11:50开始观看。