Memberikan petunjuk login kepada pengguna

Permintaan untuk mengambil kredensial pengguna dapat gagal jika pengguna belum menyimpan kredensial atau jika pengguna belum mendaftar ke aplikasi Anda. Dalam situasi ini, gunakan Credentials API untuk mengambil petunjuk login, seperti nama dan alamat email pengguna. Gunakan petunjuk ini untuk mengisi otomatis formulir login dan pendaftaran aplikasi Anda, sehingga mempercepat proses orientasi aplikasi.

Di Android 6.0 (Marshmallow) dan yang lebih baru, aplikasi tidak perlu meminta izin perangkat atau runtime apa pun untuk mengambil petunjuk login dengan Credentials API.

Sebelum memulai

Mengonfigurasi project Android Studio.

Mengambil petunjuk login

Untuk mengambil petunjuk login, pertama-tama konfigurasikan dialog pemilih petunjuk dengan membuat objek HintRequest. Kemudian, teruskan objek HintRequest ke CredentialsClient.getHintPickerIntent() untuk mendapatkan intent guna meminta pengguna memilih alamat email. Terakhir, mulai intent dengan startIntentSenderForResult().

HintRequest hintRequest = new HintRequest.Builder()
        .setHintPickerConfig(new CredentialPickerConfig.Builder()
                .setShowCancelButton(true)
                .build())
        .setEmailAddressIdentifierSupported(true)
        .setAccountTypes(IdentityProviders.GOOGLE)
        .build();

PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
    startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
    Log.e(TAG, "Could not start hint picker Intent", e);
}

Pemilih petunjuk login Smart Lock

Pengguna diminta memilih alamat email yang akan digunakan.

Kemudian, pada metode onActivityResult() aktivitas, ambil petunjuk dari paket Credential.EXTRA_KEY, periksa apakah pengguna berada dalam database pengguna Anda, dan mulai aktivitas yang sesuai dengan petunjuk kredensial.

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

    if (requestCode == RC_HINT) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            Intent intent;
            // Check for the user ID in your user database.
            if (userDatabaseContains(credential.getId())) {
                intent = new Intent(this, SignInActivity.class);
            } else {
                intent = new Intent(this, SignUpNewUserActivity.class);
            }
            intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential);
            startActivity(intent);
        } else {
            Log.e(TAG, "Hint Read: NOT OK");
            Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    ...

}

Isi formulir login terlebih dahulu

Jika pengguna berada dalam database pengguna dan Anda memulai aktivitas login aplikasi, Anda dapat (opsional) memeriksa apakah objek Credential berisi token ID. Jika demikian, Anda bisa membuat pengguna login dengan token ID, tanpa mengharuskan pengguna mengetik sandi.

Jika objek Credential tidak berisi token ID (atau Anda tidak ingin menggunakan token ID), isi kolom login dengan petunjuk yang Anda tambahkan ke intent.

public class SignInActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");

        // Pre-fill ID field
        mUsernameView.setText(credential.getId());

        ...
    }

    ...
}

Isi formulir pendaftaran terlebih dahulu

Jika pengguna tidak ada di database pengguna dan Anda memulai aktivitas pendaftaran aplikasi, isi kolom pendaftaran dengan petunjuk login yang Anda tambahkan ke intent.

public class SignUpNewUserActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");

        // Pre-fill sign-up fields
        mUsernameView.setText(credential.getId());
        mDisplaynameView.setText(credential.getName()); // Might be null.

        ...
    }

    ...
}

Secara opsional, Anda juga dapat memeriksa apakah objek Credential berisi token ID yang memiliki alamat email terverifikasi. Jika demikian, Anda dapat melewati langkah verifikasi email aplikasi karena alamat email telah diverifikasi oleh Google.