我正在尝试找出iOS在后台任务方面实际可行的内容。 我有一个应用程序,它在后台运行并跟踪设备上的位置变化。
现在,是否可以向设备发送推送通知并让设备将当前位置发送到服务器,而无需用户打开应用程序以使其在前台运行?
答案 0 :(得分:3)
我知道这个问题有点老了,但是我回答那些和我一样,在问到这个问题后很久就来到这里的人。
现在,是否可以向设备发送推送通知并让设备将当前位置发送到服务器,而无需用户打开应用程序以使其在前台运行?
是。你现在可以做到这一点。我目前在我的应用程序中做了类似的事情。还有一些其他SO问题现在正确说明了这一点。 This is one
基本上,您必须为Background Execution
启用Remote Notifications
。您可以通过转到应用程序的目标在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)
}
您可能想查看有关如何在后台处理网络请求的此问题(以及接受的答案)。 Background request not execute Alamofire Swift
Check our the docs about Background Execution.特别是有关推送通知的部分
答案 1 :(得分:0)
不幸的是我不这么认为。当您的应用处于暂停(冻结)状态时,推送通知由SO管理,用户需要重新打开该应用。他们的另一种方法是为重大更改创建本地通知,当通知到达时您的应用程序有最短的时间,发布数据是不够的,但您可以学习一些东西。我建议你阅读这个问题,讨论蓝牙和地理位置link
答案 2 :(得分:-3)
这是不可能的。这个操作系统有一个原则 - 用户应该知道你(你的应用程序)做了什么。当您的应用程序被暂停时,通知中心会收到您的推送消息。只有这样才能让您的应用知道发生此事情的方法是通过通知中心启动您的应用。所以......