Memberi otorisasi akses ke data pengguna Google

Autentikasi menetapkan 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 Anda untuk mengakses Google Drive pengguna.

Panggilan autentikasi dan otorisasi harus berupa dua alur yang 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, Anda harus mendesain aplikasi Anda agar dapat menangani kasus dengan baik saat data API tidak dapat diakses. Misalnya, Anda dapat menyembunyikan daftar file yang baru saja disimpan jika pengguna belum memberikan akses Drive.

Anda hanya boleh meminta akses ke cakupan yang diperlukan untuk mengakses Google API 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 pengguna yang bingung mengapa mereka diminta izin tertentu.

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

Menyiapkan project

  1. Buka project Anda di , atau buat project jika Anda belum memilikinya.
  2. Di , pastikan semua informasi sudah lengkap dan akurat.
    1. Pastikan aplikasi Anda memiliki Nama Aplikasi, Logo Aplikasi, dan Halaman Beranda Aplikasi yang ditetapkan dengan benar. Nilai ini akan ditampilkan kepada pengguna di layar izin Login dengan Google saat mendaftar dan di layar Aplikasi & layanan pihak ketiga.
    2. Pastikan Anda telah menentukan URL kebijakan privasi dan persyaratan layanan aplikasi Anda.
  3. Di , buat ID klien Android untuk aplikasi Anda jika Anda belum memilikinya. Anda harus menentukan nama paket dan tanda tangan SHA-1 aplikasi Anda.
    1. Buka .
    2. Klik Buat klien.
    3. Pilih jenis aplikasi Android.
  4. Di , buat ID klien "Aplikasi web" baru jika Anda belum melakukannya. Anda dapat mengabaikan kolom "Authorized JavaScript Origins" dan "Authorized redirect URIs" untuk saat ini. ID klien ini akan digunakan untuk mengidentifikasi server backend Anda saat berkomunikasi dengan layanan autentikasi Google.
    1. Buka .
    2. Klik Buat klien.
    3. Pilih jenis Web application.

Mendeklarasikan dependensi

Dalam file build.gradle modul Anda, deklarasikan dependensi menggunakan versi terbaru library Google Identity Services.

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

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));

Di 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);
  }
}

Jika mengakses Google API di sisi server, Anda dapat memanggil metode getServerAuthCode() AuthorizationResult untuk mendapatkan kode autentikasi yang Anda kirim ke backend untuk ditukar dengan token akses dan refresh.