使用 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条件下删除。
我想在没有服务器的情况下与所有用户共享一些 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条件下删除。