Memberikan petunjuk login kepada pengguna

Permintaan untuk mengambil kredensial pengguna dapat gagal saat 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 formulir pendaftaran dan pendaftaran aplikasi Anda terlebih dahulu, sehingga mempercepat proses orientasi aplikasi Anda.

Di Android 6.0 (Marshmallow) dan yang lebih baru, aplikasi Anda 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() guna mendapatkan intent untuk 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 akan diminta untuk memilih alamat email yang akan digunakan.

Kemudian, pada metode onActivityResult() aktivitas, ambil petunjuk dari paket Credential.EXTRA_KEY, periksa apakah pengguna ada di database pengguna, lalu 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();
        }
    }

    ...

}

Mengisi formulir login lebih dulu

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

Jika objek Credential tidak berisi token ID (atau Anda tidak ingin menggunakan token ID), isi otomatis 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 lebih dulu

Jika pengguna tidak berada dalam 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 sudah diverifikasi oleh Google.