使用 Ionic 和 Capacitor 管理长时间运行的上传的最佳方法是什么?

J. *_*ets 8 background-process firebase ionic-framework firebase-storage capacitor

我正在努力找出在我的 Ionic + Capacitor 移动应用程序中处理大型、长时间运行的上传的最佳方法。

具体来说,我大约同时将几十张照片(约 30 多张)上传到 Firebase 存储,并将一个或多个视频(1-2 分钟)上传到 Vimeo。用户甚至可以同时运行多批上传(用户可以选择何时进行上传)。在良好的连接情况下,整个上传过程需要不到 1 分钟,但我必须考虑到缓慢/不稳定的连接,以及用户在线和离线的情况。

当应用程序位于前台时,上传工作非常完美,但当用户在上传过程中退出或完全关闭应用程序时,问题就会出现。我没有可靠的机制来确保我的上传继续运行。

我目前正在使用 Capacitor v2,因此我尝试使用该BackgroundTask插件来尽可能长时间地保持上传,但事实证明这是不可靠的。

https://capacitorjs.com/docs/v2/apis/background-task

const uploadPromises = []; // Array of promises used to track each individual upload

// Start uploading things, adding each unresolved upload to 'uploadPromises'

const { isActive } = listenForCapacitorAppStateChange(); // This is a redux-saga emitter

if (!isActive) {
    const taskId = BackgroundTask.beforeExit(async () => {
        // Use the background task to wait for all upload promises to resolve
        await Promise.allSettled(uploadPromises);

        // Alert OS that background task is finished
        BackgroundTask.finish({ taskId });
    });
}
Run Code Online (Sandbox Code Playgroud)

我还在检查应用程序何时恢复以恢复由于某种原因未完成的上传,但这很令人沮丧,因为用户可能会开始上传,退出应用程序,然后在一段时间后回来发现他们的上传仍然不完整一直闲着!

现在我正在阅读有关 Capacitor v3 的内容,发现他们已经完全删除了该BackgroundTask插件,但 v2 文档使该插件看起来非常重要:

这在 iOS 上尤其重要,因为任何操作通常都会挂起而不启动后台任务。

由于我的解决方案充其量看起来很糟糕,而且不太可靠,现在 Capacitor 团队正在完全删除该插件,这让我相信我缺少一个完全不同(即更好)的解决方案来解决这个问题。

有谁知道现有的解决方案?我是否需要编写自己的插件来为 Android 和 iOS 启动适当的后台服务,以保持我的上传活动?我还没有遇到过似乎涵盖这一点的社区插件。