iOS本地通知 - 后台时回调函数

11

背景: 我的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];

}

在前台中,你得到了什么“回调”?请展示你的代码,这样我们才知道你在说什么。 - matt
更新以显示回调代码 - OneGuyInDc
非常好,谢谢。请看我的回答。 - matt
1个回答

21
您所描述的是application:didReceiveLocalNotification:。在iOS 10中已经被废弃,您应该更新为UserNotification框架。
如果您的应用程序正在前台,则用户不会收到警报。相反,您将收到application:didReceiveLocalNotification:
如果您的应用程序不在前台,则用户会收到警报。因此,您不会收到application:didReceiveLocalNotification:,因为通知已触发。但是,如果用户通过点击通知警报来召唤您的应用程序,则您将收到它。如果用户这样做,即使在后台,您也将收到application:didReceiveLocalNotification:
但是,如果您的应用程序在后台中终止,则会收到application:didFinishLaunchingWithOptions:(您可以检查选项以了解您由于通知而启动)。
如果您的应用程序在后台或未运行,并且用户没有点击通知并召唤您的应用程序,则您将什么都不会收到,并且无法知道通知已触发。这是因为通知不是为了您的利益,而是发送消息给用户的一种方式。(从您的问题中可以看出,您可能误用本地通知作为向自己发送消息的一种方式。那不是它们的用途。)

1
这不是你所问的问题。如果我的回答正确并对你有帮助,我希望你能接受它。如果你有其他问题,我希望你能提出一个新的问题——但请不要问那个问题,因为它已经在 Stack Overflow 上被问过和回答过很多次了。 - matt
2
谢谢 - 答案被接受。你能指向我的跟进问题的答案吗?大多数答案建议使用UILocalNotification,这也是我最初的问题。 - OneGuyInDc
@Shalugin 本地通知不是发送给您的应用程序的东西。它是代表您的应用程序发送给用户的。如果当本地通知发送给用户时,您的应用程序在后台运行,则不会收到任何事件,因为这并不是针对您的应用程序的,除非用户对该通知采取了某些操作,此时您可以得知这一事实。如果您希望即使在后台仅因为通知触发而通知您的应用程序,则需要推送(远程)通知,而不是本地通知。 - matt
@Shalugin,然而,这并不是称呼我的回答“不好”的理由。我描述的是事实,而且是正确的。你可能不喜欢这些事实,但我的回答是准确的。 - matt
@matt,你引用了别人的话。我没有说这不是一个好答案,我说“我不认为这是一个好答案”。这不是一回事。我解释了为什么我这样认为。如果你想让我重复一遍,我有一种感觉,“当应用程序在后台时获取通知回调是非法的”,我从你的话中得到了这个感觉:“这是因为通知不是为了你的利益,而是向用户发送消息的一种方式。” 对我来说听起来很荒谬,因为我们在这里不是为了找出滥用用户的方法,而是为了找出使应用程序工作的方法。干杯 - Shalugin
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接