Menyimpan kredensial pengguna

Setelah pengguna berhasil login, membuat akun, atau mengubah sandi, izinkan mereka menyimpan kredensial untuk mengotomatiskan autentikasi selanjutnya di aplikasi Anda.

Sebelum memulai

Mengonfigurasi project Android Studio.

Simpan kredensial

Buat objek Credential yang berisi informasi login pengguna. Misalnya, untuk mengizinkan pengguna menyimpan kredensial mereka setelah berhasil login dengan sandi:

Credential credential = new Credential.Builder(email)
        .setPassword(password)  // Important: only store passwords in this field.
                                // Android autofill uses this value to complete
                                // sign-in forms, so repurposing this field will
                                // likely cause errors.
        .build();

Atau, misalnya, setelah pengguna berhasil login dengan Akun Google mereka:

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

Dialog Simpan Smart Lock

Selanjutnya, panggil CredentialsClient.save() untuk menyimpan kredensial pengguna. Jika panggilan ke CredentialsClient.save() tidak segera berhasil, kredensial mungkin baru, dalam hal ini pengguna harus mengonfirmasi permintaan simpan. Selesaikan ResolvableApiException dengan startResolutionForResult() untuk meminta konfirmasi pengguna.

Jika pengguna memilih untuk tidak menyimpan kredensial, pengguna tidak akan diminta lagi untuk menyimpan kredensial akun untuk aplikasi. Jika Anda memanggil CredentialsClient.save() setelah pengguna memilih tidak ikut, hasilnya akan memiliki kode status CANCELED. Pengguna dapat memilih ikut serta nanti dari aplikasi Setelan Google, di bagian Smart Lock untuk Sandi. Pengguna harus mengaktifkan penyimpanan kredensial untuk semua akun agar diminta untuk menyimpan kredensial di lain waktu.

mCredentialsClient.save(credential).addOnCompleteListener(
        new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "SAVE: OK");
                    Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // Try to resolve the save request. This will prompt the user if
                    // the credential is new.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    try {
                        rae.startResolutionForResult(this, RC_SAVE);
                    } catch (IntentSender.SendIntentException exception) {
                        // Could not resolve the request
                        Log.e(TAG, "Failed to send resolution.", exception);
                        Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // Request has no resolution
                    Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                }
            }
        });</pre>

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // ...

        if (requestCode == RC_SAVE) {
            if (resultCode == RESULT_OK) {
                Log.d(TAG, "SAVE: OK");
                Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
            } else {
                Log.e(TAG, "SAVE: Canceled by user");
            }
        }

        // ...

    }

Setelah menyimpan kredensial, ambil dengan memanggil CredentialsClient.request().

Menargetkan Android O dan yang lebih baru

Saat Anda menyimpan kredensial sandi menggunakan Smart Lock di perangkat yang menjalankan Android O atau yang lebih baru, Smart Lock akan menggunakan dialog konfirmasi isi otomatis native melalui dialognya sendiri jika memungkinkan. (Perlu diketahui bahwa kredensial yang disimpan menggunakan Isi Otomatis dengan Google dibagikan secara dua arah dengan Smart Lock untuk Sandi.)