使用 google 未经身份验证的 firebase 存储

using google firebase storage without authentication

我想在没有服务器的情况下与所有用户共享一些 json 文件,我使用 google firebase 存储服务(没有用户身份验证)。 代码:

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("gs://xxxxxx.appspot.com/xxx-main.json");
Task<byte[]> task = storageRef.getBytes(1000000);
while (!task.isComplete())
    StaticTools.sleep(100);

byte[] b=task.getResult();

但它引发了一个异常:

com.google.android.gms.tasks.RuntimeExecutionException: com.google.firebase.storage.StorageException: User does not have permission to access this object.

存储规则:

service firebase.storage {
  match /b/XXXXXX.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

看起来 Google firebase 存储仅适用于经过身份验证的用户。如果您的应用不需要用户身份验证,您可以设置匿名身份验证。

https://console.firebase.google.com 使用新的 Firebase 存储控制台。浏览您的文件夹和 select 您上传的文件。在“文件位置”选项卡下,有一个名为 下载 URL 的字段。单击它进行复制,您将能够在您的网站中盗链到该文件。

只要规则选项卡中没有写入权限设置,您应该可以公开使用这些文件。

Xavier 对下载 URL 的回答将起作用。

您的规则应该允许 public 读取,但您的规则最多可能需要 5 分钟才能在整个系统中更新。

我将它用于最新的 firebase

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

我只是在if条件下删除。