Ios 通过Firebase存储下载检测网络中断
我正在使用Firebase iOS SDK,并使用“dataWithMaxSize”方法将图像下载到内存中。当网络连接良好时,下载工作正常,但如果没有网络连接,则下载任务将无限期地继续,而不调用错误回调。看起来在使用Firebase Android SDK的SO帖子中也发现了同样的问题。如果有人能在这个问题上提供一些帮助,我将不胜感激Ios 通过Firebase存储下载检测网络中断,ios,firebase,firebase-storage,Ios,Firebase,Firebase Storage,我正在使用Firebase iOS SDK,并使用“dataWithMaxSize”方法将图像下载到内存中。当网络连接良好时,下载工作正常,但如果没有网络连接,则下载任务将无限期地继续,而不调用错误回调。看起来在使用Firebase Android SDK的SO帖子中也发现了同样的问题。如果有人能在这个问题上提供一些帮助,我将不胜感激 谢谢您可以在尝试下载/上传任何图像等之前检查网络可用性 就像android一样 private boolean isNetworkAvailable() {
谢谢您可以在尝试下载/上传任何图像等之前检查网络可用性 就像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”事件。此后没有其他事件发生。我等了好几分钟,没有任何变化。我不知道这是否是预期的行为,但在这种情况下很难向用户提供下载反馈。必须有其他方法。您的解决方案仅涵盖一种场景。如果在上载/下载文件时连接脱机怎么办?