4

我正在尝试找出 iOS 在后台任务方面的实际可能性。我有一个在后台运行并跟踪设备上的位置更改的应用程序。

现在,是否可以向设备发送推送通知并让设备将当前位置发送到服务器,而无需用户打开应用程序使其在前台运行?

4

3 回答 3

6

我知道这个问题有点老了,但我正在为那些像我一样在提出问题很久之后才来到这里的人回答。

现在,是否可以向设备发送推送通知并让设备将当前位置发送到服务器,而无需用户打开应用程序使其在前台运行?

是的。你现在可以这样做了。我目前在我的应用程序中做一些非常相似的事情。还有一些其他的 SO 问题现在可以正确地说明这一点。这是一

基本上,您必须启用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)
}

您可能想查看有关如何在后台处理网络请求的 SO question(和接受的答案)。后台请求不执行 Alamofire Swift

查看有关后台执行的文档。特别是关于推送通知的部分

于 2017-04-08T02:15:04.480 回答
0

不幸的是,我不这么认为。当您的应用处于暂停(冻结)状态时,推送通知由 SO 管理,用户需要重新打开应用。他们的另一种方法是为重大更改创建本地通知,当通知到达时,您的应用程序有最少的时间,发布数据是不够的,但您可以研究一些东西。我建议你阅读这个关于蓝牙和地理位置链接的问题

于 2013-03-08T07:33:00.100 回答
-4

不可能。这个操作系统有一个原则——用户应该知道你(你的应用)做了什么。当您的应用程序暂停时,通知中心将收到您的推送消息。让您的应用程序知道这件事发生的唯一方法是通过通知中心启动您的应用程序.so.....

于 2013-03-08T07:36:32.293 回答