3

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

谢谢

4

3 回答 3

2

我已经maxUploadRetryTime用各种TimeInterval(30、20、10、8、5、2、1)进行了许多测试设置,我可以确认该设置maxUploadRetryTime = 1.0只会触发超时失败块。

一些日志:

2017-05-03 21:15:17.922 [Info] [main] [UploadRequest.swift:40] upload(uploadData:) > Start uploading with Timeout: 1.0

2017-05-03 21:15:18.170 [Verbose] [main] [UploadRequest.swift:60] upload(uploadData:) > Upload failed

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

更新:

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

于 2017-05-03T13:33:25.270 回答
0

maxUploadRetryTime/maxDownloadRetryTime/maxOperationRetryTime 都是 FIRStorage 上的属性,您可以将它们设置为使操作失败,就像另一篇关于 android 的帖子中描述的那样。

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

于 2016-06-14T03:32:10.967 回答
0

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

就像在安卓中

 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());
}
于 2016-06-13T23:32:39.840 回答