Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过Firebase存储下载检测网络中断_Ios_Firebase_Firebase Storage - Fatal编程技术网

Ios 通过Firebase存储下载检测网络中断

Ios 通过Firebase存储下载检测网络中断,ios,firebase,firebase-storage,Ios,Firebase,Firebase Storage,我正在使用Firebase iOS SDK,并使用“dataWithMaxSize”方法将图像下载到内存中。当网络连接良好时,下载工作正常,但如果没有网络连接,则下载任务将无限期地继续,而不调用错误回调。看起来在使用Firebase Android SDK的SO帖子中也发现了同样的问题。如果有人能在这个问题上提供一些帮助,我将不胜感激 谢谢您可以在尝试下载/上传任何图像等之前检查网络可用性 就像android一样 private boolean isNetworkAvailable() {

我正在使用Firebase iOS SDK,并使用“dataWithMaxSize”方法将图像下载到内存中。当网络连接良好时,下载工作正常,但如果没有网络连接,则下载任务将无限期地继续,而不调用错误回调。看起来在使用Firebase Android SDK的SO帖子中也发现了同样的问题。如果有人能在这个问题上提供一些帮助,我将不胜感激


谢谢

您可以在尝试下载/上传任何图像等之前检查网络可用性

就像android一样

 private boolean isNetworkAvailable() {

    getActivity().runOnUiThread(new Runnable() {
        public void run() {
            // Update UI here when network is available.

            ConnectivityManager connectivityManager
                    = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
            activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            if (!(activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting())) {

                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "No internet connection!", Snackbar.LENGTH_INDEFINITE)
                        .setAction("RETRY", new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                isNetworkAvailable();
                            }
                        });
                View sbView = snackbar.getView();
                snackbar.setActionTextColor(Color.WHITE);
                sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.snackbar_back_color2));
                TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
                //textView.setTextColor(Color.YELLOW);
                snackbar.show();

            }
        }
    });

    return (activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting());
}

maxUploadRetryTime/maxDownloadRetryTime/maxOperationRetryTime都是FIRStorage上的属性,您可以按照另一篇关于android的文章中所述的方法将它们设置为操作失败


这些超时的工作方式是基于尝试重试的时间。因此,如果设置为“4秒”,连接暂停5秒,操作将失败。如果操作在没有网络中断的情况下持续5分钟,则操作将成功(并且您将在数据传输时定期收到进度通知)。

我已使用各种
时间间隔设置
maxUploadRetryTime
进行了许多测试(30、20、10、8、5、2、1)我可以确认设置
maxUploadRetryTime=1.0
只会触发超时故障块

一些日志:

2017-05-03 21:15:17.922[Info][main][UploadRequest.swift:40]upload(uploadData:)>开始上传时超时:1.0

2017-05-03 21:15:18.170[Verbose][main][UploadRequest.swift:60]上传(uploadData:)>上传失败

这是一种非常意外的行为,我不确定他们是否意识到这一点。目前我正在使用
Firebase/Database(3.17.0)

更新:


我向firebase团队提交了一个bug,他们已经确认了这个问题。报告编号:
8-2338000016926

请注意,两种平台的上载和下载的默认超时时间都是相对较长的10分钟。因此,该操作似乎将永远重试,但最终还是会放弃。感谢您的回复。我现在正在尝试这个选择。网站上的文档似乎不准确:“以秒为单位重试下载的最长时间,默认为60秒。”不幸的是,我没有任何运气。我将maxDownloadRetryTime设置为:FIRStorage.storage().maxDownloadRetryTime=5即使重试时间非常短,也不会调用错误回调。我正在使用100%丢包的网络链路调节器来测试Mac OS上的连接性。我注意到控制台中出现以下错误:“Domain=nsurerrordomain Code=-1001”请求超时。“我是否需要附加一个其他观察者来查看错误?我一直在通过观察“失败”、“暂停”、“进度”、“恢复”和“成功”事件来调试文件下载。我已经将maxDownloadRetryTime设置为5秒,并且使用了网络链路调节器,100%丢包。在记录输出时,我注意到先记录“Progress”事件,然后记录“Resume”事件。此后没有其他事件发生。我等了好几分钟,没有任何变化。我不知道这是否是预期的行为,但在这种情况下很难向用户提供下载反馈。必须有其他方法。您的解决方案仅涵盖一种场景。如果在上载/下载文件时连接脱机怎么办?