我试图使用Firebase和一个安卓应用程序连接到NOAA的公共存储桶上,获取gs://gcp--公共数据--gcp-16上的gs 16卫星数据,然后获得一个StorageReference,然后我可以使用它来浏览存储桶的内容,并获取ABI-L2-ACMC目录下的最新文件。
问题是,所有的Firebase“入门”示例似乎都假设我希望连接到存储桶I拥有的存储桶,而不是其他人拥有的存储桶&提供给公众。
基本上,我遇到了一个安全、授权、权限和/或配置问题。
错误消息的文本表明,这是桶的配置出现问题,但我现在假设NOAA知道它在做什么,问题确实在我的末尾(我的代码,我的应用程序的Firebase控制台设置,或者两者兼而有之)。
更新
我觉得这个项目已经完全没有希望了。
事实证明,要访问存储桶和其中的文件,您必须登录到Google帐户。好吧没问题..。我有一个,每个人都有安卓手机。然后,我遇到了一堵看似不可逾越的砖墙,那真的更像是三峡大坝。
根据https://firebase.google.com/docs/auth/android/google-signin的说明,您似乎无法从客户端登录,除非客户端本身(以其SHA1 Android签名证书的形式)被GCP桶的所有者显式地白化。因为我不是它的主人。
情况真的是这样完全没有希望吗?目前看来,我唯一的选择可能是做一些非常糟糕的事情,比如让用户使用手机浏览器手动获取数据文件(这可以登录到Google并避开客户端白名单限制),并将其保存到手机的/Download目录中。这会使这个应用程序的使用变得如此糟糕,我会给它两颗星,因为它的可用性差。:-(
现行代码:
FirebaseStorage storage = FirebaseStorage.getInstance("gs://gcp-public-data-goes-16");
StorageReference storageRef = storage.getReference();
storageRef.listAll().addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult result) {
for (StorageReference fileRef : result.getItems()) {
Log.i("test", fileRef.toString());
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception exception) {
Log.e("test", "error listing bucket contents");
}
});运行时出错:
java.io.IOException:{“错误”:{“代码”:400,“消息”:“您的存储桶没有为Firebase存储正确设置。请访问'https://console.firebase.google.com/project/gcp-public-data---goes-16/storage/files‘自动修复此问题,然后重试。如果问题持续时间超过5分钟,您可能没有足够的权限修复项目。您可以通过访问’https://console.firebase.google.com/iam-admin/iam/project?project=gcp-public-data---goes-16‘来检查权限。”}}
https://stackoverflow.com/questions/61925456
复制相似问题