Mengizinkan akses ke data pengguna di Android

Autentikasi menetapkan siapa 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 terdiri dari dua alur yang terpisah dan berbeda berdasarkan kebutuhan situs atau 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 sebaiknya 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 membebani pengguna baru, atau membingungkan pengguna terkait alasan mereka dimintai izin tertentu.

Di Layanan identitas Google, autentikasi dilakukan menggunakan SignInClient. Untuk mengizinkan tindakan 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 mereka, 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);
  }
}