如何使用 Firebase Firestore 在客户端缓存 getDownloadUrl() 调用?

How can I cache the getDownloadUrl() calls on the client with Firebase Firestore?

我在后端数据库中为 images/videos 存储了一些 Firebase 存储路径,移动客户端使用这些路径获取我的视图所需的下载 URLs as/when:

import {firebase} from '@react-native-firebase/storage';

// e.g. 'images/stars.jpg'
const getDownloadUrlForFilePath = (filePath: string | null): Promise<string> => {
  if (filePath === null) {
    throw 'Path is null!';
  }
  return getDownloadUrlForRef(firebase.storage().ref(filePath));
};

const getDownloadUrlForRef = (ref): Promise<string> => {
  return ref.getDownloadURL();
};

问题是我在很多地方都需要同一张图片。因此,我经常调用 getDownloadURL() 来检索完全相同的下载 Url。这导致手机对我调试网络流量时出现的同一资源发出多个 http 请求。

在我当前的实现中,我没有将检索到的下载 URL 存储在移动客户端的任何位置。

我想找到一种方法,让应用程序只为同一路径获取一次下载 URL 并将其缓存。 Firebase SDK 支持吗?

您可以使用 AsyncStorage 将 URL 保存在应用程序本地,并且无需发出 HTTPS 请求即可在应用程序的任何组件上获取这些 URL。

下载 URL 从生成之日起有效,直到您将其撤销(从 Firebase 控制台)。所以储存和重复使用它确实是安全的。

事实上,大多数通过 Firebase 使用云存储的应用程序会在上传图像后立即生成下载 URL,然后将下载 URL 连同有关元数据一起存储在数据库中图片。

你通常会:

  1. 将下载 URL 传递给需要未经身份验证访问图像的客户端。
  2. 将路径传递给需要对图像进行身份验证访问的客户端,例如,因为他们可能需要更新数据。

如果您只存储下载 URL(许多应用程序都是这样做的),则在第二种情况下,您将通过调用 Storage.refFromUrl() method.