是否可以在 Firebase 存储中手动上传 PDF 文件(通过 Web 浏览器),然后通过 Android 应用程序下载它们?
是的,您可以使用 Firebase 控制台手动上传 PDF 文件。但是,要使用 android 应用程序访问该文件,您需要知道它的文件名和完整的参考。
另外,我是否必须对用户(移动应用)进行身份验证才能下载文件?
没有必要,但建议只允许经过身份验证的访问。您可以通过在 Firebase 存储仪表板中更改 Security Rules 来进行配置。
示例规则:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
// CHOOSE EITHER ONE FROM THESE
allow read, write: if request.auth != null; // requires authentication
allow read, write: if true; // doesn't require authentication
}
}
}
他们的应用程序应该做的就是,如果有互联网连接,检查是否有新文件要下载
目前,Firebase 存储不提供 API 来获取存储在引用下的所有文件的列表。因此,您无法直接访问存储桶中的文件列表。
您可以使用here 建议的这种方法来使用 Firebase 实时数据库来存储存储中存在的文件的元数据(下载 URL)。请注意,当您上传要列出的文件时,您必须在实时数据库中添加(删除)条目。
上传文件到存储:
Uri file = Uri.fromFile(new File("path/to/your_pdf.jpg"));
StorageReference pdfRef = storageRef.child("pdfs/"+file.getLastPathSegment());
UploaduploadTask = pdfRef.putFile(file);
// Register observers to listen for when the download is done or if it fails
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
// ADD TO REALTIME DATABASE TOO.
addPdfToRealtimeDatabase(downloadUrl);
}
}); // you might also want to add an onFailure listener.
下载代码:在数据库引用中将ChildEventListener 设置为pdfs。
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
String fileName = dataSnapshot.getKey();
String downloadUrl = dataSnapshot.getValue(String.class);
// Add pdf to the display list.
// displayList contains urls of pdfs to be downloaded.
displayList.add(downloadUrl);
}
// Other methods of ChildEventListener go here
};
pdfRef.addChildEventListener(childEventListener);
您可以使用displayList 下载所有可用的 PDF 并显示它们。
注意:我已经修改了 firebase 文档中的代码 sn-ps。