取消用户关闭/退出应用程序时未执行的 LocalNotifications 方法
Posted
技术标签:
【中文标题】取消用户关闭/退出应用程序时未执行的 LocalNotifications 方法【英文标题】:Cancel LocalNotifications method not executing when user closes/exits the app 【发布时间】:2015-07-23 16:56:11 【问题描述】:我正在 Xcode 模拟器和 iPhone 6 上的 ios 8.4 上对此进行测试。我的通知工作正常并且可以完美触发。但我不知道如何在用户退出/关闭应用程序时取消通知。按主页按钮不应取消通知,仍应触发通知。
这是我尝试过的。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
return YES;
[[UIApplication sharedApplication] cancelAllLocalNotifications];
对于以下方法 - 当用户按下主页按钮但或关闭不是我想要的应用程序时,它会取消通知。
- (void)applicationDidEnterBackground:(UIApplication *)application
对于以下方法 - 通知不会取消主页按钮或关闭应用程序。
- (void)applicationWillEnterForeground:(UIApplication *)application
对于下面的方法 - 它根本不执行主页按钮或关闭应用程序的方法。
- (void)applicationWillTerminate:(UIApplication *)application
我查看了关于堆栈溢出的其他类似问题,但似乎无法让任何这些建议发挥作用。请指教。
【问题讨论】:
【参考方案1】:一旦您触发通知,它将在操作系统中注册。操作系统及时呈现通知。应用程序终止后,您无法删除通知。终止时不会调用任何方法。
如果您的应用处于前台,当通知到达时,didReceiveLocalNotification 方法将被调用。
如果你在后台调用 DidLaunchwithOption 方法。
如果应用程序终止,则不会调用任何方法。
当您在这些方法中收到静默通知时,您会触发静默通知并呈现实际通知。您可以使用 userinfo 来识别您的通知。
【讨论】:
你能用代码解释我如何实现这一点吗?应在何时何地调用 cancelLocalNotitification 方法。【参考方案2】:(void)applicationDidEnterBackground:(UIApplication *)application
过渡到背景,即按下主页按钮时。
(void)applicationWillEnterForeground:(UIApplication *)application
退出后台状态时调用
(void)applicationWillTerminate:(UIApplication *)application
仅在应用运行时调用。如果应用被挂起,则不会调用此方法。
因此,当应用程序即将终止时,您将无法取消通知。因此,您应该选择其他一些机制来删除本地通知。比如创建一个按钮来取消所有通知或类似的东西。
【讨论】:
我希望它自动发生。这样,如果应用程序崩溃或用户电池没电了,它就会取消通知。以上是关于取消用户关闭/退出应用程序时未执行的 LocalNotifications 方法的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 在关闭/退出时未清除 SESSION COOKIES