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