iOS 本地通知 - 在后台时回调

Posted

技术标签:

【中文标题】iOS 本地通知 - 在后台时回调【英文标题】:iOS Local Notification - Callback when in Background 【发布时间】:2016-12-09 16:27:55 【问题描述】:

上下文: 我的 ios 应用程序使用本地通知 我安排本地通知,然后在通知触发时通过 didRecieveLocalNotifications 收到回电。

当应用程序位于 前台 时,这工作正常,但是当应用程序进入 后台 时,我收到 iOS 通知 但没有回调 .

我的问题: 当应用处于后台时,如何从 iOS 获取回调。

这是回调代码 -

- (void)application:(UIApplication *)application didReceiveLocalNotification:    (UILocalNotification *)notification


    //call your method that you want to do something in your app
    NSLog (@"Received Notification");
    [UIApplication sharedApplication].applicationIconBadgeNumber = 1;
    [myRootController HandleLocalNotifications:notification];


【问题讨论】:

你在前台得到什么“回调”?请出示您的代码,以便我们知道您在说什么。 更新显示回调代码 很好,谢谢。看我的回答。 【参考方案1】:

您正在描述application:didReceiveLocalNotification:。这在 iOS 10 中已弃用。您应该更新到 UserNotification 框架。

那么现在。

如果您的应用程序位于 最前面,则用户不会收到任何警报。相反,得到application:didReceiveLocalNotification:

如果您的应用不在最前面,则用户会收到警报。因此,您不会收到application:didReceiveLocalNotification:,因为通知已触发。但是,如果用户收到通知并通过点击通知警报召唤您的应用,您确实会收到它。如果用户这样做,即使在后台,您也会收到application:didReceiveLocalNotification:

但是,如果您的应用在后台终止,您将收到 application:didFinishLaunchingWithOptions:(您可以查看 options 以了解您正在因为通知而被启动)。

如果您的应用程序在后台或未运行,并且用户确实没有点击通知并召唤您的应用程序,您将一无所获,也无法知道通知被解雇了。这是因为通知不是为了的利益,而是一种向用户发送消息的方式。 (从您的问题看来,您可能误用本地通知作为向您自己发送消息的一种方式。这不是它们的用途。)

【讨论】:

啊哈 - 谢谢我现在明白了。跟进 - 假设您的应用程序需要在每天中午做某事,只要它在前台或后台。实现这一目标的最佳方法是什么? 这不是你问的。如果我的回答是对的并且对你有帮助,希望你能采纳。如果你有不同的问题,我希望你能提出一个新问题——除了不要问那个问题,因为它已经在 Stack Overflow 上被问过很多次了。 谢谢 - 已接受回答。你能指出我跟进的答案吗?大多数答案建议为此使用 UILocalNotification ,因此我的原始问题 我认为这不是一个好的答案。阅读后,我觉得当应用程序处于后台时收到通知回调是非法的。尽管在某些情况下,回电会很好。例如,我将手表与 iPhone 配对。当应用程序处于后台/被杀死时,通知会发送到 iPhone。我想检查手表上通知中所说的内容。但显然我的手表不可能知道通知已在 iPhone 上触发,因为后台有应用程序。这是不对的。 嗨@Shalugin到底是什么问题?

以上是关于iOS 本地通知 - 在后台时回调的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在后台时未触发 iOS 本地通知

iOS如何在本地通知上启动后台任务

iOS 后台获取本地通知

如何在 iOS 后台运行服务以接收本地通知?

iOS10应用关闭时如何响应本地通知?

本地通知 ios 11 在后台