正确处理启动选项和本地通知
Posted
技术标签:
【中文标题】正确处理启动选项和本地通知【英文标题】:handling launching options and local notifications correctly 【发布时间】:2013-08-14 13:13:34 【问题描述】:我不确定如何处理处理本地通知(或推送)的不同状态。
据我所知,这些是不同的场景(如果我错了,请纠正我):
一个。应用程序在前台
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
被调用并且:application.applicationState == UIApplicationStateActive
b.应用在后台
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
被调用并且:application.applicationState == UIApplicationStateInactive
c。该应用程序因此被终止:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
首先被调用,然后被调用:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
在 application.applicationState == UIApplicationStateActive 的地方被调用(因为它在 didFinishLanching 之后一段时间变得活跃......
在这三种情况下,我应该采取不同的行动:
一个。如果应用程序在前台,我想显示一个显示通知正文的警报,并在用户使用继续按钮关闭警报时将一些视图控制器推送到堆栈上。
b.如果应用程序在后台,并且用户按下警报,那么我想自动将视图控制器推送到堆栈,因为用户按下警报表明他想要遵循它的含义。
c。与 b 相同的场景。用户按下警报并希望看到相关视图。
我的问题是我应该如何/在哪里将相关视图推送到 navigationViewController 以及在前台收到通知时如何显示警报?
问题是场景 c 包含场景 a。这意味着,在调用了 didFinishlaunching 之后(不管我是否在那里处理了通知),然后调用了 didRecieveLocalNotification(就好像我在前台收到通知一样),但在这种情况下,我不想显示警报。 .
我对一开始的假设有误吗?
【问题讨论】:
场景C,不调用didReceiveLocalNotification
,只调用didFinishLaunchingWithOptions
。由于这些是应用程序委托方法,它们可以随时接收事件,您可以从那里做任何您想做的事情。也许一次问一个更具体的问题。
@MarcusAdams,谢谢。实际上,我问了一个非常具体的问题,然后不管我一开始的假设是否错误。正如你所说,我做到了,在场景 C 中没有调用 didReceiveLocalNotification 方法,这简化了一切。继续,将您的评论转换为答案,我会接受。
【参考方案1】:
对于场景C,不调用didReceiveLocalNotification
,只调用didFinishLaunchingWithOptions
。
由于这些是应用程序委托方法,它们可以随时接收事件(无论哪个视图控制器处于活动状态),您可以从那里做任何您想做的事情。
例如,您可以从didFinishLaunchingWithOptions
(在默认return YES;
之前)显示UIAlertView
,并将应用程序委托设置为UIAlertView
的委托,以便您可以处理警报的解除。
另外,请注意,如果应用在接收本地通知时处于前台,则用户不会收到警报。如果需要,您可以提醒用户。
【讨论】:
以上是关于正确处理启动选项和本地通知的主要内容,如果未能解决你的问题,请参考以下文章