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. Di ini, gunakan Credentials API untuk mengambil petunjuk login, seperti nama pengguna dan alamat email Anda. Gunakan petunjuk ini untuk mengisi otomatis info login aplikasi dan formulir pendaftaran, sehingga mempercepat proses orientasi aplikasi Anda.

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

Sebelum memulai

Mengonfigurasi project Android Studio.

Mengambil petunjuk login

Untuk mengambil petunjuk login, konfigurasikan dialog pemilih petunjuk terlebih dahulu dengan membuat HintRequest . Lalu, teruskan objek HintRequest ke CredentialsClient.getHintPickerIntent() untuk mendapatkan intent meminta pengguna memilih alamat email. Terakhir, mulai 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, dalam metode onActivityResult() aktivitas, ambil petunjuk dari paket Credential.EXTRA_KEY, periksa apakah pengguna ada dalam database pengguna Anda, dan memulai 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 terlebih dahulu

Jika pengguna berada dalam database pengguna dan Anda memulai proses login aplikasi Anda dapat (secara opsional) memeriksa apakah objek Credential berisi ID sebelumnya yang benar. Jika demikian, Anda dapat membuat pengguna login dengan token ID, tanpa mengharuskan pengguna untuk mengetik {i>password<i}.

Jika objek Credential tidak berisi token ID (atau Anda tidak ingin menggunakannya token ID), isi kolom login dengan petunjuk yang telah ditambahkan 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 berada dalam database pengguna dan Anda memulai pendaftaran aplikasi aktivitas Anda, maka isi bidang pendaftaran terlebih dahulu dengan petunjuk masuk yang Anda tambahkan 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 elemen token ID yang memiliki yang telah diverifikasi. Jika demikian, Anda dapat melewati langkah verifikasi email untuk aplikasi, karena alamat email telah diverifikasi oleh Google.