自动化何时运行
只要 iOS 允许 Marrow 在后台运行,自动化就会尽量按你设定的频率发送。Marrow 用上了 Apple 为 App 提供的所有唤醒方式。具体时刻由 Apple 决定,而且手机锁定时,任何 App 都无法读取 Apple Health。
所有 Marrow 指南: MCP · 自托管镜像 · 自动化 · 文件 · 支持
Marrow 做了什么
- 有新健康数据时被唤醒。对于同步的每种数据类型(步数、心率、睡眠、训练等),Marrow 都请 Apple Health 在有新数据时于后台唤醒它。手表或其他 App 传来的新读数都可能唤醒它。
- 始终预约一次后台刷新。Marrow 进入后台时,会向 iOS 申请大约一小时后的刷新,每次刷新又会预约下一次,所以总有一次在等待。
- 打开时补上进度。打开 Marrow 会读取所有新数据,并发送所有到期的自动化。
- 每次唤醒都发送所有到期的内容。每次被唤醒,Marrow 都会把新数据读入自己的存储,然后逐个发送已到设定频率的自动化。
- 补齐空缺。选择自上次运行以来时,每次运行都会发送自上次成功运行以来的全部数据,再加上那之前的两天。即使运行来晚了,也会发送错过的每一天。
- 记录每次运行。活动记录会保留最近 30 次运行及其时间和结果。
Apple 决定的事
这些规则来自 iOS,适用于每个在后台导出 Apple Health 数据的 App。Marrow 里的任何设置都无法改变它们。
- 没有固定时间。iOS 不允许 App 在自己选定的时间于后台运行。App 可以请求被唤醒,由 iOS 根据电量、网络、你使用该 App 的频繁程度以及手机正在做的其他事情来选择时机。你设定的频率是两次运行之间的最短间隔,而不是时间表。每小时的意思是最多每小时一次。
- 锁定时什么都不运行。手机锁定时,Apple Health 数据处于加密状态,在你解锁之前任何 App 都无法读取。手机锁定期间运行会暂停,并在你下次解锁后补上。
- 时间窗口很短。一次后台唤醒只持续几秒钟,通常不到 30 秒。负载过大或接收端太慢,可能来不及在这段时间内完成。
- 低电量模式会暂缓后台刷新,直到你关闭它。
- 必须为 Marrow 开启后台App刷新,否则 iOS 会跳过它预约好的刷新。
- 被划掉了。你在应用切换器里把 Marrow 划掉之后,iOS 可能不会在后台唤醒它,直到你再次打开。
- 手表数据是分批传来的。Apple Watch 不是每次读数都立即传给手机,而是每隔一段时间传一次,所以新数据以及它触发的唤醒,可能比测量的时刻晚一些。
实际会怎样
- 白天一直在用手机:运行大致按你设定的频率进行。有的准时,有的晚一些,也可能跳过某个小时。
- 手机锁定几个小时,比如整夜:这段时间没有运行,解锁后会有一次运行,把这段时间以来的全部数据发送出去。
- 每小时一次的频率并不会让一天正好运行 24 次。空缺来自 iOS 调度 App 的方式,下一次运行会把它们补上。
让运行尽量规律
- 为 Marrow 开启后台App刷新:设置,通用,后台App刷新。
- 在意运行是否准时的时候,请关闭低电量模式。
- 把 Marrow 留在 App切换器中,不要划掉。
- 选择自上次运行以来,或者比你预计的最长空缺更长的日期范围,这样即使运行来晚了也能覆盖每一天。你这边对每项指标每天只保留最新的值,重复就无害。
- 让每次的负载保持小巧,以便在后台时间窗口内完成:用每日总计代替原始样本,缩短日期范围,每种数据各用一个自动化。
- 让接收端先立即回应,再做后续处理。详情见编写接收端。
- 现在就想运行?打开 Marrow,或在该自动化上轻点立即运行。
查看发生了什么
- 活动记录(在自动化的“更多选项”中):最近 30 次运行。失败的运行会显示错误,问题排查表说明了每种错误的含义。
- 预期有记录却没有:当时 iOS 没有唤醒 Marrow,或者手机处于锁定状态。
- 设置,Apple Health 访问权限,正在从 Apple Health 读取:Marrow 最后一次读取每种数据类型的时间。如果那里的时间很近,说明 Marrow 正在被唤醒。
- 运行时通知(更多选项):排查期间每次运行都会收到一条通知。
手机在使用中,却仍然看到很长的空缺?请联系支持,附上活动记录的截图和你的接收端收到数据的时间,我们会帮你查看。