Memberi otorisasi akses ke data pengguna Google

Autentikasi menentukan identitas seseorang, dan biasanya disebut sebagai pendaftaran atau login pengguna. Otorisasi adalah proses pemberian atau penolakan akses ke data atau resource. Misalnya, aplikasi Anda meminta izin pengguna untuk mengakses Google Drive pengguna.

Panggilan autentikasi dan otorisasi harus berupa dua alur terpisah dan berbeda berdasarkan kebutuhan aplikasi.

Jika aplikasi Anda memiliki fitur yang dapat menggunakan data Google API, tetapi tidak diperlukan sebagai bagian dari fitur inti aplikasi, Anda harus mendesain aplikasi agar dapat menangani kasus dengan baik saat data API tidak dapat diakses. Misalnya, Anda dapat menyembunyikan daftar file yang baru disimpan saat pengguna belum memberikan akses Drive.

Anda harus meminta akses ke cakupan yang diperlukan untuk mengakses Google API hanya saat pengguna melakukan tindakan yang memerlukan akses ke API tertentu. Misalnya, Anda harus meminta izin untuk mengakses Drive pengguna setiap kali pengguna mengetuk tombol "Simpan ke Drive".

Dengan memisahkan otorisasi dari autentikasi, Anda dapat menghindari pengguna baru yang merasa kewalahan, atau membingungkan pengguna tentang alasan mereka diminta untuk memberikan izin tertentu.

Untuk autentikasi, sebaiknya gunakan Credential Manager API. Untuk tindakan otorisasi yang memerlukan akses ke data pengguna yang disimpan oleh Google, sebaiknya gunakan AuthorizationClient.

Meminta izin yang diperlukan oleh tindakan pengguna

Setiap kali pengguna melakukan tindakan yang memerlukan cakupan tambahan, panggil AuthorizationClient.authorize().

Misalnya, jika pengguna melakukan tindakan yang memerlukan akses ke penyimpanan aplikasi Drive-nya, lakukan hal berikut:

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(authorizationRequest)
        .addOnSuccessListener(
            authorizationResult -> {
              if (authorizationResult.hasResolution()) {
                    // Access needs to be granted by the user
                PendingIntent pendingIntent = authorizationResult.getPendingIntent();
                try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
                } catch (IntentSender.SendIntentException e) {
                Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
                }
              } else {
            // Access already granted, continue with user action
                saveToDriveAppFolder(authorizationResult);
              }
            })
        .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

Dalam callback onActivityResult aktivitas, Anda dapat memeriksa apakah izin yang diperlukan berhasil diperoleh, dan jika ya, lakukan tindakan pengguna.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}