收到推送通知时在后台执行代码
Posted
技术标签:
【中文标题】收到推送通知时在后台执行代码【英文标题】:Execute code in background when push notification is received 【发布时间】:2013-03-08 07:20:04 【问题描述】:我正在尝试找出 ios 在后台任务方面的实际可能性。 我有一个在后台运行并跟踪设备上的位置变化的应用程序。
现在,是否可以向设备发送推送通知并让设备将当前位置发送到服务器,而无需用户打开应用程序使其在前台运行?
【问题讨论】:
【参考方案1】:我知道这个问题有点老了,但我是为那些像我一样在提出问题很久之后才来到这里的人回答的。
现在,是否可以向设备发送推送通知并让设备将当前位置发送到服务器,而无需用户打开应用程序使其在前台运行?
是的。你现在可以这样做了。我目前在我的应用程序中做一些非常相似的事情。还有一些其他的 SO 问题现在可以正确地说明这一点。 This is one
基本上,您必须为Remote Notifications
启用Background Execution
。您可以通过转到应用程序的目标在 XCode 中执行此操作。打开Capabilities
选项卡启用Background Modes
功能并检查清单中的Remote Notifications
项。 (我假设您已经启用了Push Notifications
功能)。
这样,您用于在前台处理通知的代码也将在后台为您服务
application:didReceiveRemoteNotification:fetchCompletionHandler
方法将在您的应用程序处于后台时被调用。
这是 Swift 3.0 中的示例代码:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any])
// Print full message.
print(userInfo)
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
// Print full message.
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
您可能想查看这个关于如何在后台处理网络请求的 SO 问题(和已接受的答案)。 Background request not execute Alamofire Swift
Check out the docs about Background Execution. 特别是关于推送通知的部分
【讨论】:
请问,当您的应用程序处于后台时,是否需要在接收本地通知时启用推送通知?我遇到了问题【参考方案2】:不幸的是,我不这么认为。当您的应用处于暂停(冻结)状态时,推送通知由 SO 管理,用户需要重新打开应用。他们的另一种方法是为重大更改创建本地通知,当通知到达时,您的应用程序有最少的时间,发布数据是不够的,但您可以研究一些东西。我建议你阅读这个关于蓝牙和地理位置的问题link
【讨论】:
【参考方案3】:这是不可能的。这个操作系统有一个原则——用户应该知道你(你的应用)做了什么。当您的应用暂停时,通知中心将收到您的推送消息。让您的应用知道这件事发生的唯一方法是通过通知中心启动您的应用。所以.....
【讨论】:
你确定吗?根据此线程 (***.com/questions/15225677/…) 中的答案,可以发送空通知。不会出现警报或徽章,您可以包含一些自定义字典数据。但是您的意思是,在应用程序启动之前,这些数据不会传送到应用程序?我的应用运行在后台监控位置变化。 没有警报或徽章通知用于向您的应用发送其他自定义字典数据。您的后台工作也是从系统注册的,当您的应用进入后台时,无法接收推送消息,案例您的通知也是从系统注册的。以上是关于收到推送通知时在后台执行代码的主要内容,如果未能解决你的问题,请参考以下文章