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 - 应用程序未运行时如何处理?