UILocalNotification - 应用程序未运行时如何处理?

Posted

技术标签:

【中文标题】UILocalNotification - 应用程序未运行时如何处理?【英文标题】:UILocalNotification - How to handle when App is NOT running? 【发布时间】:2012-01-10 18:58:47 【问题描述】:

我现在在两个不同的应用程序中实现了UILocalNotifications。一个使用定位服务,这意味着如果它被杀死,它(通常)会重新启动(所以它不是一个大问题)。但是,在另一个应用程序中,我根据时间安排了UILocalNotification。在这种情况下,我遇到了一个大问题。

如果我安排了通知,则应用程序被终止,内存被挤出,手机关闭然后再次打开,打开应用程序时我无法“自动”查看旧通知。

这是有效的工作流程(应用在后台运行):

    启动应用程序;应用程序安排通知;关闭应用程序;应用现在在后台运行 接收本地通知;一开始忽略它;从顶部拉下拉菜单(状态栏);触摸通知以启动应用 结果:应用适当地在通知中显示信息。

这是工作的工作流程(应用不再在后台运行):

    启动应用程序;应用程序安排通知;关闭应用程序;应用现在在后台运行 手动杀死应用程序(模拟我的情况) 仍然收到本地通知;一开始忽略它;从顶部拉下拉菜单(状态栏);触摸通知以启动应用 结果:应用程序启动,但未调用didReceiveLocalNotification 方法。用户认为该应用程序无法运行。注意:我什至无法手动强制提供信息,因为如果他们收到多个通知,我无法分辨他们是哪一个触摸以知道要显示哪一个。

当应用没有在后台运行(因此不运行didReceiveLocalNotification method)时,有什么方法可以知道他们触摸了哪个通知?

【问题讨论】:

【参考方案1】:

在第二种情况下,用户已经退出(或杀死)应用程序,因此当用户触摸通知时,您的应用程序将启动。

这可以在下面提到的appDelegate的方法中处理

didFinishLaunchingWithOptions 在应用启动时被调用,因此只需检查应用是否因为用户触摸通知而实际启动(代码如下):

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

    UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if (notification) 
    
        NSLog(@"notification caused app to launch, alert body = %@", notification.alertBody);
        // do what ever action you want to do
        // you could just copy the code from "didReceiveLocalNotification" and paste it here
    

    return YES;

【讨论】:

你好,这会起作用,只有在杀死应用程序后,用户点击通知,如果他直接点击应用程序图标,看着徽章,我们如何显示他,想要的风险投资。 @user1046037 这对我不起作用。你知道为什么会这样吗? didReceiveLocalNotification 方法有效(但那是在应用程序运行时)。我似乎无法让它工作。 ***.com/questions/36246104/…【参考方案2】:

@Ranjit,当用户点击应用程序图标时,这将起作用,因为它是一个应用程序委托方法。每次应用程序完成启动时都会被调用。 (不能评论,因为我缺乏声誉......;))

【讨论】:

UIApplicationLaunchOptionsLocalNotificationKey 从图标点击启动应用程序时为零。必须点击通知本身。 有人找到解决方案了吗?

以上是关于UILocalNotification - 应用程序未运行时如何处理?的主要内容,如果未能解决你的问题,请参考以下文章

应用程序被杀死时阻止 UILocalNotification

UILocalNotification 从应用文档播放声音

UILocalNotification 触发时自动将应用程序从后台带到前台?

UILocalNotification - 应用程序未运行时如何处理?

UILocalNotification 应用程序徽章编号重复

如果应用程序在后台,UILocalNotification 如何调用某些方法