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

求助: APP 在后台还能执行逻辑,发送数据吗

  •  
  •   Jed2020 · 4 小时 6 分钟前 · 1224 次点击

    背景介绍:我们 APP ( react-native 写的)的用户是某船舶公司船员,需要上传各种轮船信息,然后海上的信号大家也都知道。

    现在有个需求:如果上传失败,能够在网络恢复的时候自动上传。

    老板的意思最好能做到网络恢复就发送,不管这个时候 APP 在前台后台,手机锁没锁屏

    让我调研下,并给出上传失败的解决方案。

    我的方案是做数据缓存,下次打开的时候提示他上次失败了,点击继续发送。老板让我去沉淀沉淀,研究下后台上传数据的方案,说他已经在网上看到相关解决方案了...

    老哥们,有方案吗教教我

    38 条回复    2024-11-21 18:12:13 +08:00
    Shura
        1
    Shura  
       4 小时 1 分钟前
    安卓,可以写个前台服务,ios 就没辙了。
    chachi
        2
    chachi  
       3 小时 55 分钟前
    这种 app 不应该工业设备吗
    NoOneNoBody
        3
    NoOneNoBody  
       3 小时 54 分钟前
    需求是网络恢复自动发送,但不需要用“发送”这个数据来检测网络啊,只要检测到 True 就可以通过事件驱动发送任务了吧?
    前台后台这个问题才是手机的事,这个不懂,但肯定有方法的
    kzfile
        4
    kzfile  
       3 小时 54 分钟前   ❤️ 1
    老板自己找到方法了为啥不直说,还让你沉淀沉淀?
    null113
        5
    null113  
       3 小时 53 分钟前
    "说他已经在网上看到相关解决方案了" 让他发你参考呗
    HangoX
        6
    HangoX  
       3 小时 50 分钟前
    让老板给出网上的方案,你自己参考一下
    android 目前还可以,直接挂前台服务,监听网络变化
    或者用账号同步服务,或者直接用 firebase 自己带的
    Jed2020
        7
    Jed2020  
    OP
       3 小时 49 分钟前
    @null113 他看到的是解决方案是 APP 申请后台常驻权限,然后监听网络信号,信号好的时候发送数据。我跟他说常驻也不是一直常驻的,而且我感觉锁屏状态下还能发送数据应该做不到吧
    manami
        8
    manami  
       3 小时 48 分钟前 via Android
    手机病毒为啥都可以 /思考 ing
    InkStone
        9
    InkStone  
       3 小时 45 分钟前
    挂后台必须用户手动允许 app 后台运行,不然会被系统杀进程
    Jed2020
        10
    Jed2020  
    OP
       3 小时 44 分钟前
    老板看到的解决方案是安卓申请后台常驻权限,然后监听网络信号,信号好的时候发送数据。我没做过 APP 保活的功能,不确定能不能做到,而且就算安卓可以做到,iOS 可以做到吗,因为我们用的 RN ,业务得统一,还有一个问题就是锁屏状态下也能保活吗?
    Jed2020
        11
    Jed2020  
    OP
       3 小时 43 分钟前
    @InkStone 只要申请权限就可以了吗,还是要写什么后台服务,然后只有这个服务能在后台执行
    Jed2020
        12
    Jed2020  
    OP
       3 小时 42 分钟前
    @HangoX 老哥细说,firebase 自带的啥
    WebKit
        13
    WebKit  
       3 小时 29 分钟前
    @Jed2020 #10 iOS 可以后台播放无声音乐来实现常驻,比 Android 更简单。
    wu67
        14
    wu67  
       3 小时 15 分钟前
    你去看看那个短信转发工具呗. 印象中分好几步来完成后台常驻呢.
    harryWebb
        15
    harryWebb  
       3 小时 1 分钟前
    参考一下流氓安卓软件的方案。。。

    时不时弹出来让用户点一下,然后常驻,还有的直接更换桌面常驻

    ios 是肯定做不到的,别想了,你老板要是能 ios 做到,可以把这个方案拿去卖给黑产,比你做个什么 app 值钱多了
    myderr
        16
    myderr  
       2 小时 59 分钟前
    建立局域网服务器,连 WiFi 上传到局域网的服务器,服务器来处理数据
    Jed2020
        17
    Jed2020  
    OP
       2 小时 55 分钟前
    @myderr 有道理,这个可以提一下
    coderljx
        18
    coderljx  
       2 小时 53 分钟前
    电池优化白名单,加入自启动,锁定后台。这些都需要用户参与,用在消息推送上还可以,app 能比较稳定接收到推送。
    MoYi123
        19
    MoYi123  
       2 小时 52 分钟前   ❤️ 1
    我在安卓平板上挂的 alist, 设置了之后基本上不会被杀. 参考一下.
    https://github.com/jing332/AListFlutter
    maximdx
        20
    maximdx  
       2 小时 48 分钟前
    @WebKit 这个不会被检测到有恶意倾向导致上不了架吗?
    tool2dx
        21
    tool2dx  
       2 小时 38 分钟前 via Android
    adb 直接运行 elf 可以保活,但是需要用户手机开启开发者模式,感觉没那么通用。
    capgrey
        22
    capgrey  
       2 小时 36 分钟前
    老板的网上:拿了个套壳 GPT 随便问了一下。GPT 热情回答:当然可以!
    idonttellyou
        23
    idonttellyou  
       2 小时 28 分钟前
    Android 看看 WorkerManager 能不能用
    noparking188
        24
    noparking188  
       2 小时 18 分钟前
    https://github.com/aspen-cloud/triplit

    这个咋样呢

    Real-time Sync: Triplit provides real-time data synchronization between server and browser with incremental updates and conflict resolution.
    Local Caching: It includes a full-fledged client-side database for local caching, ensuring fast interactions and offline mode.
    noparking188
        25
    noparking188  
       2 小时 16 分钟前
    @noparking188 Offline-mode with automatic reconnection and consistency guarantees
    zihuyishi
        26
    zihuyishi  
       2 小时 14 分钟前
    你参考下音乐软件怎么实现的,把自己伪装成音乐 app 常驻后台就行了。以前很多流氓 app 也是这么实现的,所以就会出现你听着歌打开这个软件歌停了
    opengps
        27
    opengps  
       2 小时 13 分钟前
    既然允许网络恢复后再发送,那这时效性稍微推迟一下也可以允许下次打开再发送。

    所以真实需求是后续补发,而不是网络恢复就补发这个伪需求
    isSamle
        28
    isSamle  
       2 小时 8 分钟前   ❤️ 1
    比较简单的实现方法,船上放个中间服务器,弄个树莓派估计都可以,在上面放个消息队列,手机的数据传给中间服务器,中间服务器等连上主服务器之后进行消费
    baolinliu442k
        29
    baolinliu442k  
       1 小时 53 分钟前
    他都看到了不直接告诉你,让你沉淀
    ahzjm
        30
    ahzjm  
       1 小时 44 分钟前
    微信能做到的你就能做到
    Danmen123
        31
    Danmen123  
       1 小时 42 分钟前
    我只知道安卓,国产系统专治不服,后台各种杀死。如果不是国产系统的话,workManager 刚好可以解决你的需求。
    WebKit
        32
    WebKit  
       1 小时 40 分钟前
    @maximdx #20 很多大厂都是这么做的。京东 腾讯 网易 都有。而且一般也检测不到
    WebKit
        33
    WebKit  
       1 小时 39 分钟前
    @harryWebb #15 现实是 iOS 做起来比 Android 更简单、更稳定。
    harryWebb
        34
    harryWebb  
       1 小时 24 分钟前
    @WebKit 老哥细说 ios 咋实现,借鉴一下方案我搞搞看
    ShadowPower
        35
    ShadowPower  
       1 小时 3 分钟前
    Android 可以用常驻通知+Service 保持前台运行,iOS 可以通过推送唤醒后台 APP ,联网的时候就可以收到推送。
    YsHaNg
        36
    YsHaNg  
       25 分钟前
    @harryWebb 不是 iOS 开发 不确定好不好用 background tasks API https://developer.apple.com/documentation/backgroundtasks https://forums.developer.apple.com/forums/thread/693337 但是使用一些类似 Google photos 群晖 photo 只要后台卡片不划掉自主备份都没问题 不用管保活拉起
    yidev
        37
    yidev  
       23 分钟前
    不动 ios, 用个 vpn 方式行不行?那些代理软件都可以常驻后台啊
    cheng6563
        38
    cheng6563  
       10 分钟前
    Android 让用户把 App 加入电池白名单然后开前台服务就行了。不同系统设置不同,尤其是国产系统可能要到多个地方设置。


    iOS 可以用一些后台短期运行的 API 处理,这些后台时间都有限制,不过一般用来处理一些数据上传够用了。比如后台应用刷新,地理围栏之类的。
    iOS 要后台常驻需要播放声音,这样用户一旦开个其他音频 App 就不行了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3831 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.