[外包] 寻 iOS 后台保活机制 Demo 实现

2019-03-05 01:34:00 +08:00
 xingzhi
问题描述:
iOS 应用退出到后台,会进入 Suspended 状态,无法执行任何程序代码,现需提供一个后台常驻不被系统挂起的实现。

应用场景:后台计时器、闹钟服务等需要后台执行的业务

要求:
1. 不能使用特殊服务如:录音、GPS、VoIP 等
2. 耗电,内存消耗尽可能低
3. 稳定性高,有中断恢复机制,不易被系统终止
4. 满足指定测试用例

预算 3K,提供满足需求的 demo 代码即可。

微信联系:imxingzhi (请注明 v2 外包)
862 次点击
所在节点    外包
18 条回复
catror
2019-03-05 03:06:23 +08:00
只是计时的话,本地推送就好了。到了时间推送一条通知,不需要保活。
jnotnull
2019-03-05 09:36:07 +08:00
这个 3K 真的搞不了 😄
tonywwwz
2019-03-05 09:41:54 +08:00
感觉你这种场景 用推送就好了 后台唤醒 App,客户端在被唤醒之后将获得 30s 的后台运行时间,类似微信收账到手那个功能.
xingzhi
2019-03-05 10:43:58 +08:00
@catror @tonywwwz
感谢回复,这个场景不仅仅是指定时间点的处理,后台需要持续间隔性地执行一些操作,所以需要保活。

@jnotnull
有可行方式的话,可加我再议:)
QiuMing
2019-03-05 11:10:42 +08:00
Background Fetch 也不能满足吗?
sauchye
2019-03-05 11:35:01 +08:00
需要使用一些后台常驻服务、GPS、VOIP、音乐服务等,可以尝试着重复播放一段无音铃声,当然这是不太优雅的,也可能被拒 = =
xingzhi
2019-03-05 11:58:40 +08:00
@QiuMing
Background Fetch 的时间不可控。

@sauchye
嗯,后台服务是最正规的,但需要权限&配合业务场景,否则审核不过。
播无声文件是比较常用的方式,但耗电较高,也容易被中断(如来电),从而导致保活失效

谢谢大家回复。
jimrok
2019-03-05 12:03:23 +08:00
@xingzhi 如果你找到了 iOS 的漏洞是可以做到的,但下个版本苹果会给你堵上。这中漏洞的价值应该很大,一般在公开市场是不能被交易的。
xingzhi
2019-03-05 15:08:29 +08:00
有做过类似业务的朋友吗,我把预算提高了,2 倍!
leon0918
2019-03-05 15:12:57 +08:00
从目前的情形看,只有后台播放一条路,审核的时候,造一个审核入口,上架之后下掉就好了。
LeoNG
2019-03-05 16:28:31 +08:00
要和服务器配合的算不算。
xingzhi
2019-03-05 16:34:14 +08:00
@LeoNG
push 唤醒吗?这个不算保活,因为期间无法执行业务。

@leon0918
嗯,播放是可行的,但耗能以及稳定性差。
LeoNG
2019-03-05 16:41:14 +08:00
@xingzhi #12 在静默推送到达后,是能触发回调的,感觉这个时候可以做点事吧。当然,纯理论,没试过。
xunfeng
2019-03-05 21:43:10 +08:00
私有方法可以做到
xingzhi
2019-03-05 23:59:39 +08:00
@xunfeng
有了解的私有方法吗,聊一聊?
vincentxue
2019-03-06 00:00:29 +08:00
不限制私有方法可以。官方给出的方案都被你排除了,包括静默推送苹果在服务器也有做频率限制,不具备可行性。iOS 开放的 API 中也没有类似 Android 的 Service 那种机制。

如果不上架,我能想到的就是用私有接口或者也许你可以尝试阻塞住 App 将要被终止那个代理方法试试,不确定可行性。知道 App 完成启动时间有限制,退出时间有没有限制还真没了解过。
xingzhi
2019-03-06 00:09:41 +08:00
@vincentxue
终于看到了方向,感谢,有兴趣试一试吗?
vincentxue
2019-03-06 00:12:19 +08:00
如果你非要上架,你可以用 JSPatch 之类的库动态下发到你已经上架的 App 里执行。混淆 JSPatch 比混淆 Private API 要容易得多。

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

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

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

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

© 2021 V2EX