iPhone iOS:本地通知未出现

Posted

技术标签:

【中文标题】iPhone iOS:本地通知未出现【英文标题】:iPhone iOS: Local Notifications Aren't Appearing 【发布时间】:2012-01-22 01:45:25 【问题描述】:

我正在编写一个应用程序,当活动日期临近时,它会通过通知中心向用户发送警报。但是当我在日期选择器中设置日期并关闭应用程序时,通知不会出现。我已经在我的配置文件中启用了推送通知。可能是因为我的 objectForKey 区域。我有 2 个笔尖(一个用于 iPhone,一个用于 iPad),分别命名为 ImportDatesViewController_iPhone1 和 ImportantDatesViewController_iPad1。我应该将 objectForKey 区域更改为笔尖名称,而不仅仅是“ImportantDatesViewController”吗?而且我的 .h 和 .m 文件名也只是 ImportDatesViewController。对不起,我在这方面还是很新的,边走边学。 这是我项目中处理通知中心的所有代码,这就是我放在视图控制器中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

UILocalNotification *localNotif = [[UILocalNotification alloc] init];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm'/'dd'/'yyyy"];

NSDate *eventDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"ImportantDatesViewController.selectedDate"];


localNotif.fireDate = [eventDate dateByAddingTimeInterval:-60*60*60];
localNotif.timeZone = [NSTimeZone defaultTimeZone];

localNotif.alertBody = @"Event coming in three days!";

localNotif.alertAction = nil;

localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];    

return YES;

我还在底部 App Delegate 的 didFinishLaunchingWithOptions 方法中添加了这段代码,我认为它可以解决问题:

[[UIApplication sharedApplication]registerForRemoteNotificationTypes:
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound];

非常感谢任何帮助,谢谢!

【问题讨论】:

只是一个旁注,我之前发布过这个但发布不正确,我删除了之前的一个并以正确的格式发布。 iPhone Local Notifications Won't Appear 的可能重复项 【参考方案1】:

您告诉它在您设置它时立即触发通知,并且您通过设置 (NOW)-60*60*60 设置它之前的一段时间。通知已经过去了。

[[UIApplication sharedApplication]presentLocalNotificationNow:localNotif];  

如果您想将其设置为特定时间:

 [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];

如果指定的值为 nil 或者是过去的日期,则立即发送通知。 作为旁注,请确保将 timeZone 和 Locale 设置为您想要的。

【讨论】:

直到你提到它,我才真正检查过它,但我的出现在那里。如果您在设备上进行测试,我看不出有任何原因。 哦,还有一件事,那么 -60*60*60 是否是尝试在用户在日期选择器上设置的日期前 60 小时发送通知的正确公式? 我不能确定,因为我经常使用 NSDateComponents 并将小时数设置为 -60。但是您的解决方案看起来也很可靠,我不能 100% 确定。有时,做同一件事的方法不止一种。 啊废话,实际上它没有工作,对不起我弄错了。我将其更改为[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];,但似乎没有什么不同。如果设备处于睡眠模式并且应用程序未运行,它仍然可以工作吗?我还用更多细节编辑了 OP。【参考方案2】:
UILocalNotifications *localNotif = [[UILocalNotification alloc] init];

   if (localNotif == nil) return;
  NSDate *fireTime = [[NSDate date]   dateByAddingTimeInterval:900] ;  //15 min

            localNotif.fireDate = fireTime;
            localNotif.alertBody = @"Parking your CAR 15 Minutes reached..";
            //    localNotif.repeatInterval=kCFCalendarUnitMinute;
            [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];

【讨论】:

【参考方案3】:

这是适用于我的项目的 LocalNotification 示例代码。

AppDelegate 文件中的这个代码块:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
        [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
        // Override point for customization after application launch.
        return YES;
    

    // This code block is invoked when application is in foreground (active-mode) 
    -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

        UIAlertView *notificationAlert = [[UIAlertView alloc] initWithTitle:@"Notification"    message:@"This local notification" 
        delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];

        [notificationAlert show];
       // NSLog(@"didReceiveLocalNotification");
    

任何 ViewController 的 .m 文件中的此代码块:

-(IBAction)startLocalNotification   // Bind this method to UIButton action
    NSLog(@"startLocalNotification");

    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:7];
    notification.alertBody = @"This is local notification!";
    notification.timeZone = [NSTimeZone defaultTimeZone];
    notification.soundName = UILocalNotificationDefaultSoundName;
    notification.applicationIconBadgeNumber = 10;

    [[UIApplication sharedApplication] scheduleLocalNotification:notification];    

当按下绑定“startLocalNotification”的按钮时,上面的代码会在 7 秒的时间间隔后显示一个 AlertView 如果应用程序在后台,则将 BadgeNumber 显示为 10 并带有默认通知声音。

【讨论】:

以上是关于iPhone iOS:本地通知未出现的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 本地通知未显示

iPhone本地通知不会出现[重复]

在 Apple Watch 中显示 iPhone 本地通知

UILocal 通知未显示

是否可以专门向 Apple Watch 发送本地通知?

iOS 13本地通知未发送