iOS 上有什么类似 JobScheduler / WorkManager 的 API 吗,还是只能用 APNS 静默推送做个 workaround

2021-05-06 14:03:02 +08:00
 KirbySD

React Native 写了个可以理解为定时爬虫的 App,获取到新数据时会向用户发送一个 Local Notification.
目前在 Android 上用 JobScheduler/AlarmManager 定时执行任务
因为可能有 iOS 的需求(我的主力机也是 iPhone ),考虑 build 一个 iOS 版本时发现 Background Task / Background Processing 相关的 API 并不能保证执行间隔

主要需求如下

而查阅的各种文档和 stackoverflow 等均表示 Background App Refresh 不能保证执行间隔,如果用户不常打开 App,甚至可能一天里都不会执行

这是否意味着要保证相对精度,只能起一个服务器定时给用户发静默推送拉起 App 才行了?


EDIT:

2933 次点击
所在节点    iDev
5 条回复
wienli
2021-05-06 14:19:22 +08:00
作为一个半吊子 iOS 开发告诉你:这个是伪需求,首先苹果对后台进程管理非常严格,一般在退出应用 15-30min 后,进程就被杀死。
APNS 也只是苹果推送服务器与你手机的通信,想靠外部非主观操作激活应用是不可取的
kera0a
2021-05-06 14:34:31 +08:00
定时由服务器发送推送触发执行是可行的。
NotificationServiceExtension 可以有一点执行时间,爬个页面是足够了。

iOS14 小组件也可以,可以搞一个定时刷新的任务交给系统调度,只要保证手机每天会打开就行。

还有就是类似 vpn 那种 app 了,可以直接起个服务后台常驻
dcty
2021-05-06 14:40:07 +08:00
要不用 GPS 的那种方案(始终允许)可能也可以,参考:life cycle,腾讯手机管家的“智能个人报告”,耗电量几乎没有什么感知。
KirbySD
2021-05-06 14:59:18 +08:00
@wienli
后台任务的限制在文档里里面有提及过,不过我打算使用的是后台 App 刷新一类,将任务注册给系统,由系统安排执行的那种
APNS 的静默推送的话,https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app 有提及到"To deliver a background notification, the system wakes your app in the background. ... Your app has 30 seconds to perform any tasks and call the provided completion handler." 这里,我在想这个方法是不是可行

@kera0a
感谢。定时刷新任务主要担心用户不一定每天都打开,这个小功能也没必要后台常驻,最后可能还是考虑用推送解决吧……

@dcty
您指的是 Significant-Change Location Service ( https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_significant-change_location_service )吗?
感觉有点不太可控……不过感谢建议
frqk
2021-05-06 20:53:05 +08:00
你说的静默推送是有可能实现,不过苹果文档里也说了静默推送是不保证会送到的。系统会不会收到你发的静默推送完全看心情(看电量网络情况还有间隔啥的),有可能你发 10 条结果只有一条会收到。
而且锁屏时收到的静默推送所执行的代码可能会有一定的限制。我之前是获取 healthkit 的步数结果锁屏是获取不了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775155

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX