ios - 我可以在后台收听 CMPedometer 并根据不同情况发送本地推送通知吗?

标签 ios ios8 push-notification apple-push-notifications background-process

这是一个 iOS 问题。

我想做的是在应用程序处于后台时收听内置计步器 (CMPedometer)。当计步器事件发生变化(从“步行”到“运行”再到“不动”等)时,我希望可以选择向用户的设备发送本地推送通知。

例如,应用程序位于后台。当我开始移动时,我收到一条推送通知,“你在移动!”当我停止移动时,我会收到一条推送通知,“你已经停止移动了!”

目前,我已经为我的后台模式设置了“位置更新”。该应用程序将在后台运行约 15 分钟并跟踪位置并执行我想要的操作(计步器数据更改时触发推送通知)。但 15 分钟后,它完全停止了。

我所描述的在设备上是否可行?如果是这样,应用程序在 15 分钟后超时,我做错了什么?

很高兴提供更多细节,但我不想让这个已经很长的问题过载!

最佳答案

当您的应用被暂停时,无法获得实时事件更新。

如果您想跟踪用户的事件,如步行、运行等,请使用 CMMotionActivityManager

Motion data reflects whether the user is walking, running, in a vehicle, or stationary for periods of time.

根据Documentation :

应用程序暂停时不会传递更新,应用程序可以使用 queryActivityStartingFromDate:toDate:toQueue:withHandler: 获取应用程序暂停时的事件。

因此,在后台跟踪用户事件的最佳方式是使用后台抓取,并将抓取间隔设置为最小值。

UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

关于ios - 我可以在后台收听 CMPedometer 并根据不同情况发送本地推送通知吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072009/

相关文章:

ios - 核心图 float y轴

class - Xcode 6:是否有任何简单的方法可以在尺寸类之间复制约束?

cocoa - 创建 Cocoapod 库和 [UIImage imageNamed :] returns NULL

azure - 如何从 iOS 在 Azure 移动应用程序通知中心注册目标推送通知

ios - 以编程方式绘制的圆圈不会出现在 SwiftUI 中

ios - 通过单击单元格中的取消按钮来删除该单元格,也可以通过 editActionsForRowAt 方法删除该单元格

iphone - 'high speed scrubbing' *提示*出现在哪个版本的iOS中?

ios - UITextView inputAccessoryView 在 iOS 8 中与键盘顶部重叠

push-notification - Apple (APN) 和 Google (GCM) 服务器是否会告诉您哪些设备注册了推送通知?