Mengizinkan akses ke data pengguna di Android

Otentikasi menetapkan siapa seseorang, dan umumnya disebut sebagai pengguna mendaftar atau login. Otorisasi adalah proses memberikan atau menolak akses pada data atau sumber daya. Misalnya, aplikasi Anda meminta izin pengguna untuk mengakses Google Drive pengguna.

Panggilan otentikasi dan otorisasi harus merupakan dua hal yang terpisah dan berbeda sesuai dengan 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 tersebut dapat menangani kasus dengan lancar ketika data API tidak dapat diakses. Misalnya, Anda mungkin menyembunyikan daftar file yang baru-baru ini disimpan saat pengguna belum memberikan Drive akses.

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

Dengan memisahkan otorisasi dari otentikasi, Anda dapat menghindari terlalu banyak pengguna, atau membingungkan pengguna mengapa mereka diminta untuk izin akses.

Di Layanan identitas Google, autentikasi dilakukan menggunakan SignInClient. Untuk memberi otorisasi tindakan yang memerlukan akses ke data pengguna yang disimpan oleh Google, kami merekomendasikan penggunaan 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 Drive miliknya penyimpanan aplikasi, lakukan tindakan 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 metode yang diperlukan izin akses berhasil diperoleh, dan jika demikian, 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);
  }
}