【问题标题】:Firebase Storage Warning: downloadURL()' is deprecated: Use `StorageReference.downloadURLWithCompletion()Firebase 存储警告:不推荐使用 downloadURL()':使用 `StorageReference.downloadURLWithCompletion()
【发布时间】:2018-09-20 18:02:41
【问题描述】:

我刚刚将我的项目更新到了最新版本的 Firebase Storage,现在我收到了一条警告: 不推荐使用 downloadURL():使用 StorageReference.downloadURLWithCompletion() 获取当前下载 URL。

我查看了 Firebase 图像上传文档,但它仍然使用 downloadURL() 进行引用,现在已弃用。在下面的代码中,我将图像的下载 URL 作为字符串获取。代码有效,但现在要更新,因为downloadURL() 已贬值

uploadProfilePicTask.observe(.success) { snapshot in

  guard let profilePicStringURL = snapshot.metadata?.downloadURL()?.absoluteString else { return }
  ...

这是我尝试的更新。我用新的downloadURLWithCompletion() 尝试了下面的代码,但snapshot.metadata?.storageReference? 中的某些内容返回 nil,因此我无法检索 url 字符串。有谁知道如何在下面适当地使用新的downloadURLWithCompletion()

uploadProfilePicTask.observe(.success) { snapshot in
  snapshot.metadata?.storageReference?.downloadURL { URL, error in
    if let urlString = URL?.absoluteString {
      // Do something
    } else {
      return
    }
  }

【问题讨论】:

  • 您是否尝试过设置断点并查看snapshot 包含的内容?
  • @Niamh 是的,我有。 storageReference 返回 Nil 但我不知道为什么。

标签: ios swift firebase firebase-storage


【解决方案1】:

基本上不使用元数据,而只是在观察事件成功后获取 url。由于它成功并且您知道它在那里,您可以下载该 URL。它在他们的docs 中用于“生成下载 URL”。下面,我假设您的 StorageReference 是 uploadProfilePicTask。

uploadProfilePicTask.downloadURL(completion: { (url, error) in
                    if (error == nil) {
                        if let downloadUrl = url {
                           // Make you download string
                           let downloadString = downloadUrl.absoluteString
                        }
                    } else {
                   // Do something if error
                    }
           })

【讨论】:

  • 请编辑您的答案以包括对您的代码在做什么的一些解释。在 SO 上不鼓励仅使用代码回答。
【解决方案2】:

我遇到了同样的问题,但我用这段代码修复了它:

    uploadTask.observe(.success) { snapshot in
        guard let imageURL = snapshot.metadata?.storageReference?.downloadURL(completion: { (url, error) in if error != nil {
            print(error as Any)
        } else {                      //add all you want

            }
        }) else { return }
        let imageStr = String(describing: imageURL)
        DBService.manager.updatePhoto(profileImageUrl: imageStr)
        AuthService.manager.updatePhoto(urlString: imageStr)
    }

}

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2020-01-31
    • 2020-05-14
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2020-02-23
    • 2019-09-21
    • 2015-02-26
    相关资源
    最近更新 更多