Dùng Firebase Storage như backend lưu trữ dữ liệu cho ứng dụng Android
I. GIỚI THIỆU Firebase Storage là dịch vụ được xây dựng cho mục đích lưu trữ và quản lý các nội dung mà người dùng ứng dụng tạo ra như ảnh, videos hay dữ liệu dạng file. Firebase Storage cung cấp các API cho việc uploads và download các file từ app của bạn một cách bảo mật và bạn không cần quan ...
I. GIỚI THIỆU
Firebase Storage là dịch vụ được xây dựng cho mục đích lưu trữ và quản lý các nội dung mà người dùng ứng dụng tạo ra như ảnh, videos hay dữ liệu dạng file.
Firebase Storage cung cấp các API cho việc uploads và download các file từ app của bạn một cách bảo mật và bạn không cần quan tâm đến chất lượng đường truyền mạng.
Firebase Storage được xây dựng trên nền tảng Google Cloud Platform nên có nhiều lợi thế.
Một số điểm mạnh:
- Robust : Firebase Storage thực hiện việc upload và download không phụ thuộc vào chất lượng đường truyền mạng hơn nữa các quá trình đó có thể bắt đầu lại khi bị tạm dừng giúp tiết kiệm thời gian và băng thông.
- Secure: Được tích hợp Firebase Authentication cho việc bảo mật nên dễ dàng quản lý quyền truy cập vào các files.
- Scalable : Firebase Storage được xây dựng trên nền tảng Google Cloud Platform nên khả năng mở rộng có thể lên đến hàng Petabyte dữ liệu.
II. CÀI ĐẶT FIREBASE SDK
Để có thể sử dụng Firebase SDK trong project trước hết bạn phải tạo thêm ứng dụng trong Firebase Console.
Giao diện Dashboard của một ứng dụng như sau:
Bạn vào nhấn vào "Add Firebase to your Android app" và điền tên package name ứng dụng cùng với SHA1 của keystore, bạn có thể thêm cả SHA1 của debug key và release key.
Cách lấy SHA1 của file keystore, dùng keytool của jdk.
keytool -list -v -keystore C:usersLuPham.androiddebug.keystore -alias androiddebugkey -storepass android -keypass android
Add App và tải file json chứa thông tin cấu hình project đặt file json đó trong thư mục của module chính.
Tiếp đến thêm dependencies
Thêm vào file build.gradle của project (<project>/build.gradle):
buildscript { dependencies { // Add this line classpath 'com.google.gms:google-services:3.0.0' } }
Thêm vào file build.gradle của module (<project>/<app-module>/build.gradle):
dependencies{ compile 'com.google.firebase:firebase-storage:9.4.0' compile 'com.google.firebase:firebase-auth:9.4.0' } // Add to the bottom of the file apply plugin: 'com.google.gms.google-services'
Vậy là xong bước cài đặt.
III. REFERENCE
Firebase Storage sử dụng các Reference để chỉ đến một bucket hoặc một file, bạn có thể làm bất cứ thứ gì với bucket, files thông qua Reference đó như upload, download hay thay đổi metadata hoặc xóa file. Reference mang tính chất lightweight vì vậy bạn có thể sử dụng nó bao nhiêu tùy thích hoặc có thể sử dụng lại một Reference cho nhiều hành động khác nhau.
1. Tạo Reference
Tạo một Reference đến root của Firebase Storage và bạn có thể làm gì tùy ý.
FirebaseStorage rootRef = FirebaseStorage.getInstance();
Bên cạnh đó có thể tạo một Reference từ một Url
// Create a storage reference from our app StorageReference storageRef = storage.getReferenceFromUrl(" gs://fir-storage-sample-7ce3e.appspot.com");
Tạo Refernce tới cấp độ thấp hơn bằng method child(), bạn có thể tạo Reference ngay cả khi file chưa tồn tại.
// Create a child reference // imagesRef now points to "images" StorageReference imagesRef = storageRef.child("images"); // Child references can also take paths // spaceRef now points to "users/me/profile.png // imagesRef still points to "images" StorageReference spaceRef = storageRef.child("images/space.jpg");
2. Di chuyển với Reference
Bạn có thể sử dụng 2 mthod getParent() và getRoot() để di chuyển lên trong cấu trúc files.
// Parent allows us to move our reference to point to // imagesRef now points to 'images' imagesRef = spaceRef.getParent(); // Root allows us to move all the way back to the top of our bucket // rootRef now points to the root StorageReference rootRef = spaceRef.getRoot();
child(), getParent(), và getRoot() có thể kết hợp với nhau nhiều lần.
// References can be chained together multiple times // earthRef points to 'images/earth.jpg' StorageReference earthRef = spaceRef.getParent().child("earth.jpg"); // nullRef is null, since the parent of root is null StorageReference nullRef = spaceRef.getRoot().getParent();
IV. UPLOAD FILES
Tạo reference
StorageReference storageRef = storage.getReferenceFromUrl("gs://<your-bucket-name>"); // Create a reference to 'images/mountains.jpg' StorageReference mountainImagesRef = storageRef.child("images/mountains.jpg");
Bạn có thể upload từ Memory, Stream hoặc Local File. Cách upload một file như sau
Uri file = Uri.fromFile(new File("path/to/images/rivers.jpg")); StorageReference riversRef = storageRef.child("images/"+file.getLastPathSegment()); uploadTask = riversRef.putFile(file); // Register observers to listen for when the download is done or if it fails uploadTask.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle unsuccessful uploads } }).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(); } });
V. DOWNLOAD FILES
Tương tự khi download file bạn cũng phải tạo reference và có thể download file vào Memory hoặc Local file.
islandRef = storageRef.child("images/island.jpg"); File localFile = File.createTempFile("images", "jpg"); islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { @Override public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { // Local temp file has been created } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
VI. KẾT LUẬN
Firebase Storage là một giải pháp tuyệt vời cho bạn lưu trữ file tạo ra từ app của bạn hoặc là nơi lưu trữ file dữ liệu online cho app. Bạn không cần biết một dòng code server hay quan tâm đến hạ tầng phức tạp mà vẫn có thể viết app phục vụ hàng triệu người dùng.
Tham khảo Firebase Storage Document