[Android] Sao lưu và khôi phục dữ liệu sử dụng Google Drive API (Phần 2)
Google Drive API cho phép các bạn tạo các ứng dụng tận dụng lưu trữ đám mây của Google Drive. Bạn có thể phát triển ứng dụng của mình tích hợp với Google Drive, và tạo các chức năng trong ứng dụng của bạn sử dụng Google Drive.
Hãy cùng xem qua hình ảnh thể hiện quan hệ giữa ứng dụng của bạn, Google Drive, và Google Drive API:
1. Giới thiệu về Google Drive API
Google Drive
: Dịch vụ lưu trữ tệp đám mây của Google cung cấp cho người dùng không gian lưu trữ cá nhân, được gọi là My Drive và tùy chọn truy cập các thư mục chia sẻ cộng tác, được gọi là ổ đĩa chung.Google Drive API
: Là REST API cho phép bạn tận dụng bộ nhớ Google Drive từ trong ứng dụng của mình.Google Drive app
: Một ứng dụng tận dụng Google Drive làm giải pháp lưu trữ.Google Drive UI
: Giao diện người dùng của Google quản lý các tệp được lưu trữ trên Google Drive. Nếu ứng dụng của bạn là ứng dụng loại trình chỉnh sửa, chẳng hạn như ứng dụng bảng tính hoặc trình xử lý văn bản, bạn có thể tích hợp với Giao diện người dùng để tạo và mở tệp trong ứng dụng của mình.
My Drive
: Vị trí lưu trữ Google Drive mà người dùng cụ thể sở hữu. Các tệp được lưu trữ trên My Drive có thể được chia sẻ với những người dùng khác, nhưng quyền sở hữu nội dung vẫn dành riêng cho một người dùng cá nhân.OAuth 2.0:
Giao thức ủy quyền mà Google Drive API yêu cầu để xác thực người dùng ứng dụng của bạn. Nếu ứng dụng của bạn sử dụng Đăng nhập Google, nó sẽ xử lý luồng OAuth 2.0 và mã thông báo truy cập ứng dụng.
2. Ứng dụng
- Download và Upload file lên Google Drive
- Tìm kiếm file, thư mục trên Google Drive.
- User có thể chia sẻ file, thư mục hợp tác về nội dung trên Google Drive.
- Kết hợp với API Google Picker để tìm kiếm tất cả các tệp trong Google Drive, sau đó trả lại tên tệp, URL, ngày sửa đổi cuối cùng và người dùng.
- Tạo các phím tắt là các liên kết bên ngoài đến dữ liệu được lưu trữ bên ngoài Drive, trong một kho lưu trữ dữ liệu hoặc hệ thống lưu trữ đám mây khác.
- Tạo thư mục Drive chuyên dụng để lưu trữ dữ liệu của ứng dụng để ứng dụng không thể truy cập tất cả nội dung của người dùng được lưu trữ trong Google Drive. Xem Lưu trữ dữ liệu dành riêng cho ứng dụng.
- Tích hợp với Giao diện người dùng Google Drive, là giao diện người dùng web tiêu chuẩn của Google mà bạn có thể sử dụng để tương tác với các tệp Drive.
3. Cài đặt Google Drive API
Ở bài trước, chúng ta đã tìm hiểu cách kích hoạt Google Drive API trên Google Cloud Platform, sau đó, chúng ta sẽ config ở dưới client.
Thêm dependency vào ứng dụng của bạn giúp chúng ta có thể sử dụng các thư viện để thao tác Google Drive API:
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-drive</artifactId>
<version>v3-rev136-1.25.0</version>
</dependency>
Setup Bean cho Drive:
@Autowired
private GoogleCredential googleCredential;
@Bean
public Drive getService() throws GeneralSecurityException, IOException {
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
return new Drive.Builder(HTTP_TRANSPORT,
JacksonFactory.getDefaultInstance(), googleCredential)
.build();
}
@Bean
public GoogleCredential googleCredential() throws GeneralSecurityException, IOException {
Collection<String> elenco = new ArrayList<String>();
elenco.add("https://www.googleapis.com/auth/drive");
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
return new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("account_service_cua_ban@account_sercie_cua_ban.iam.gserviceaccount.com")
.setServiceAccountScopes(elenco)
.setServiceAccountPrivateKeyFromP12File(new File("path/to/google-service-key.p12"))
.build();
}
Nhớ rằng account_service_cua_ban@account_sercie_cua_ban.iam.gserviceaccount.com
là google-drive.service-account mà lúc generate file p12 mình đã nhắc tới.
path/to/google-service-key.p12
là đường dẫn tới file .p12 mà chúng ta mới download ở trên.
Đến đây, chúng ta có thể dễ dàng thao tác với Google Drive bằng thư viện com.google.api.services.drive.Drive
mà chúng ta đã khởi tạo Bean ở trên cho ứng dụng Spring boot:
@Autowired
private Drive googleDrive;
Sử dụng một số hàm cơ bản
Get all file:
private List<File> getAllGoogleDriveFiles() throws IOException {
FileList result = googleDrive.files().list()
.setFields("nextPageToken, files(id, name, parents, mimeType)")
.execute();
return result.getFiles();
}
hàm setFields
chỉ định những field chúng ta có thể get ra từ File nhận được. Ví dụ bạn sử dụng .setFields("files(id, name, parents, mimeType)")
lúc này, chúng ta có thể get Id bằng cách sử dụng hàm file.getId()
Tạo folder mới:
private String createNewFolder(String folderName) throws IOException {
File fileMetadata = new File();
fileMetadata.setName(folderName);
fileMetadata.setMimeType("application/vnd.google-apps.folder");
File file = googleDrive.files().create(fileMetadata).setFields("id").execute();
return file.getId();
}
Upload file:
File newGGDriveFile = new File();
newGGDriveFile.setParents(parents).setName(fileName);
FileContent mediaContent = new FileContent("application/zip", fileToUpload);
File file = googleDrive.files().create(newGGDriveFile, mediaContent).setFields("id,webViewLink").execute();
fileName
là tên file sẽ được upload lên Google Drive
fileToUpload
là đối tượng java.io.File
chỉ định file sẽ được upload lên Google Drive
FileContent mediaContent = new FileContent("application/zip", fileToUpload);
: chỉ định file upload lên là định dạng zip file
parents
: là list các id của folder cha mà bạn muốn upload lên.
sau đó bạn có thể lấy url của file bằng cách sử dụng file.getWebViewLink()
do trước đó chúng ta đã set giá trị của webViewLink trả ra:setFields("id,webViewLink")
Delete file
private static void deleteFile(String fileId) {
try {
googleDrive.files().delete(fileId).execute();
} catch (IOException e) {
System.out.println("An error occurred: " + e);
}
}
fileId
: id của file cần xóa trên Google Drive.
Download file
String fileId = "0BwwA4oUTeiV1UVNwOHItT0xfa4G";
OutputStream outputStream = new ByteArrayOutputStream();
googleDrive.files().get(fileId)
.executeMediaAndDownloadTo(outputStream);
Lưu ý: Khi thao tác trên Google Drive chúng ta sử dụng account service. Vì vậy các folder là của account service, account service không có giao diện cụ thể như tài khoản Goolge chính nên bạn sẽ không xem được trực tiếp các file bằng Google Drive. Dể có thể xem được bạn có thể tạo 1 folder trên Google Drive bằng tài khoản Google chính sau đó share quyền cho tài khoản account service. Tiếp đó ứng dụng của chúng ta sẽ thao tác trên folder đó, lúc này bạn sẽ có thể vào Google Drive xem các file của mình một cách bình thường.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!