V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xingzhi
V2EX  ›  外包

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

  •  
  •   xingzhi · 2019-03-05 01:34:00 +08:00 · 864 次点击
    这是一个创建于 2098 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题描述:
    iOS 应用退出到后台,会进入 Suspended 状态,无法执行任何程序代码,现需提供一个后台常驻不被系统挂起的实现。

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

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

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

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

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

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

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

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

    如果不上架,我能想到的就是用私有接口或者也许你可以尝试阻塞住 App 将要被终止那个代理方法试试,不确定可行性。知道 App 完成启动时间有限制,退出时间有没有限制还真没了解过。
    xingzhi
        17
    xingzhi  
    OP
       2019-03-06 00:09:41 +08:00
    @vincentxue
    终于看到了方向,感谢,有兴趣试一试吗?
    vincentxue
        18
    vincentxue  
       2019-03-06 00:12:19 +08:00 via iPhone
    如果你非要上架,你可以用 JSPatch 之类的库动态下发到你已经上架的 App 里执行。混淆 JSPatch 比混淆 Private API 要容易得多。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2366 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.