V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Jed2020
V2EX  ›  程序员

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

  •  
  •   Jed2020 · 30 天前 · 3359 次点击

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

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

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

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

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

    老哥们,有方案吗教教我

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

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

    ios 是肯定做不到的,别想了,你老板要是能 ios 做到,可以把这个方案拿去卖给黑产,比你做个什么 app 值钱多了
    myderr
        16
    myderr  
       30 天前
    建立局域网服务器,连 WiFi 上传到局域网的服务器,服务器来处理数据
    Jed2020
        17
    Jed2020  
    OP
       30 天前
    @myderr 有道理,这个可以提一下
    coderljx
        18
    coderljx  
       30 天前
    电池优化白名单,加入自启动,锁定后台。这些都需要用户参与,用在消息推送上还可以,app 能比较稳定接收到推送。
    MoYi123
        19
    MoYi123  
       30 天前   ❤️ 1
    我在安卓平板上挂的 alist, 设置了之后基本上不会被杀. 参考一下.
    https://github.com/jing332/AListFlutter
    maximdx
        20
    maximdx  
       30 天前
    @WebKit 这个不会被检测到有恶意倾向导致上不了架吗?
    tool2dx
        21
    tool2dx  
       30 天前 via Android
    adb 直接运行 elf 可以保活,但是需要用户手机开启开发者模式,感觉没那么通用。
    capgrey
        22
    capgrey  
       30 天前
    老板的网上:拿了个套壳 GPT 随便问了一下。GPT 热情回答:当然可以!
    idonttellyou
        23
    idonttellyou  
       30 天前
    Android 看看 WorkerManager 能不能用
    noparking188
        24
    noparking188  
       30 天前
    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  
       30 天前
    @noparking188 Offline-mode with automatic reconnection and consistency guarantees
    zihuyishi
        26
    zihuyishi  
       30 天前
    你参考下音乐软件怎么实现的,把自己伪装成音乐 app 常驻后台就行了。以前很多流氓 app 也是这么实现的,所以就会出现你听着歌打开这个软件歌停了
    opengps
        27
    opengps  
       30 天前
    既然允许网络恢复后再发送,那这时效性稍微推迟一下也可以允许下次打开再发送。

    所以真实需求是后续补发,而不是网络恢复就补发这个伪需求
    isSamle
        28
    isSamle  
       30 天前   ❤️ 5
    比较简单的实现方法,船上放个中间服务器,弄个树莓派估计都可以,在上面放个消息队列,手机的数据传给中间服务器,中间服务器等连上主服务器之后进行消费
    baolinliu442k
        29
    baolinliu442k  
       30 天前
    他都看到了不直接告诉你,让你沉淀
    ahzjm
        30
    ahzjm  
       30 天前
    微信能做到的你就能做到
    Danmen123
        31
    Danmen123  
       30 天前
    我只知道安卓,国产系统专治不服,后台各种杀死。如果不是国产系统的话,workManager 刚好可以解决你的需求。
    WebKit
        32
    WebKit  
       30 天前
    @maximdx #20 很多大厂都是这么做的。京东 腾讯 网易 都有。而且一般也检测不到
    WebKit
        33
    WebKit  
       30 天前
    @harryWebb #15 现实是 iOS 做起来比 Android 更简单、更稳定。
    harryWebb
        34
    harryWebb  
       30 天前
    @WebKit 老哥细说 ios 咋实现,借鉴一下方案我搞搞看
    ShadowPower
        35
    ShadowPower  
       30 天前
    Android 可以用常驻通知+Service 保持前台运行,iOS 可以通过推送唤醒后台 APP ,联网的时候就可以收到推送。
    YsHaNg
        36
    YsHaNg  
       30 天前
    @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  
       30 天前
    不动 ios, 用个 vpn 方式行不行?那些代理软件都可以常驻后台啊
    cheng6563
        38
    cheng6563  
       30 天前
    Android 让用户把 App 加入电池白名单然后开前台服务就行了。不同系统设置不同,尤其是国产系统可能要到多个地方设置。


    iOS 可以用一些后台短期运行的 API 处理,这些后台时间都有限制,不过一般用来处理一些数据上传够用了。比如后台应用刷新,地理围栏之类的。
    iOS 要后台常驻需要播放声音,这样用户一旦开个其他音频 App 就不行了。
    lostwolfkf
        39
    lostwolfkf  
       30 天前
    1 ,常驻后台,要求用户自己设置不杀进程。2 、保活
    cwcc
        40
    cwcc  
       30 天前
    打开 App 后如果开启“在线时自动传输”的功能后,就保持应用请求开启定位服务,然后好像就能驻留后台了?(依稀记得当初 iSH 应用想要在 iOS 保活也是这么搞来着,就 cat 下/dev/location )
    anjingdexiaocai
        41
    anjingdexiaocai  
       30 天前 via Android
    android 的话,只有前台服务可以解决,至于电池优化,自启动开启,这些用户不一定买账。
    gaobh
        42
    gaobh  
       30 天前
    不能用电脑吗哈哈,右下角最小化挂个程序就行了
    AkaGhost
        43
    AkaGhost  
       29 天前
    这个让我想起了 WakeUp 课程表有个上课提醒功能,简单设置一下提醒就满准确的,就是会请求一个 "闹钟和提醒" 的权限。

    权限描述如下:

    允许设置闹钟和提醒

    允许该应用设置闹钟以及安排在特定时间执行某些操作。此权限开启后,该应用将在后台运行,可能会消耗更多电量。

    若关闭此权限,该应用设置的现有闹钟将不会响起,安排在特定时间执行的现有活动也不会执行。
    champaulmmc
        44
    champaulmmc  
       29 天前
    安卓很简单,后台权限全开,后台一直播放无声背景音乐就行,会一直保活。IOS 费劲,需要一直定位或者看快捷指令,检测到网络就执行 APP 步骤,IOS17 可以默认执行不需要权限
    jingrui
        45
    jingrui  
       29 天前
    Expo BackgroundFetch
    试试这个吧
    skyyan
        46
    skyyan  
       29 天前
    你先解决保活问题再说吧
    hstdt
        47
    hstdt  
       29 天前 via iPhone
    参考长途货运 app 的司机端实现方案,iOS 用 location manager 触发上传
    auhah
        48
    auhah  
       29 天前
    android 吗?直接发送前台通知不就保活了么
    HangoX
        49
    HangoX  
       29 天前
    @champaulmmc iOS 不是也可以放歌吗?放歌可以后台
    HangoX
        50
    HangoX  
       29 天前
    @Jed2020 https://firebase.google.com/docs/database?hl=zh-cn firebase 的 realtime database ,自己会处理同步事件,因为被谷歌收购了,有 google play 的手机会非常容易处理同步的事情,同步会由 gp service 执行
    meteora0tkvo
        51
    meteora0tkvo  
       29 天前
    可以参考流氓软件的做法,申请一个浮窗,颜色透明,大小为 1 像素
    realpg
        52
    realpg  
       29 天前
    既然是必备服务,那么直接发送失败出个浮窗提示失败等待网络恢复就好了,也不用透明,毕竟这是工作用的,有浮窗很正常吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:04 · PVG 22:04 · LAX 06:04 · JFK 09:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.