หลังจากที่ผู้ใช้ลงชื่อเข้าใช้ สร้างบัญชี หรือเปลี่ยนรหัสผ่านสำเร็จแล้ว ให้อนุญาตให้ผู้ใช้จัดเก็บข้อมูลเข้าสู่ระบบเพื่อใช้การตรวจสอบสิทธิ์ในอนาคตในแอปโดยอัตโนมัติ
ก่อนเริ่มต้น
กำหนดค่าโปรเจ็กต์ Android Studio
จัดเก็บข้อมูลเข้าสู่ระบบ
สร้างออบเจ็กต์ Credential
ที่มีข้อมูลการลงชื่อเข้าใช้ของผู้ใช้ ตัวอย่างเช่น หากต้องการอนุญาตให้ผู้ใช้จัดเก็บข้อมูลเข้าสู่ระบบหลังจากลงชื่อเข้าใช้ด้วยรหัสผ่านเรียบร้อยแล้ว ให้ทำดังนี้
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();
หรือ เช่น เมื่อผู้ใช้ลงชื่อเข้าใช้ด้วยบัญชี Google สำเร็จแล้ว ก็ให้ทำดังนี้
GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
.setAccountType(IdentityProviders.GOOGLE)
.setName(gsa.getDisplayName())
.setProfilePictureUri(gsa.getPhotoUrl())
.build();
จากนั้นเรียกใช้ CredentialsClient.save()
เพื่อบันทึกข้อมูลเข้าสู่ระบบของผู้ใช้ หากการเรียก CredentialsClient.save()
ไม่สำเร็จในทันที ข้อมูลเข้าสู่ระบบอาจเป็นข้อมูลใหม่ ซึ่งในกรณีนี้ผู้ใช้ต้องยืนยันคำขอบันทึก ปิด ResolvableApiException
ด้วย startResolutionForResult()
เพื่อแสดงข้อความแจ้งให้ผู้ใช้ยืนยัน
หากผู้ใช้เลือกที่จะไม่บันทึกข้อมูลเข้าสู่ระบบ ผู้ใช้จะไม่ได้รับข้อความแจ้งอีกครั้งให้บันทึกข้อมูลเข้าสู่ระบบของบัญชีสําหรับแอป หากเรียกใช้ CredentialsClient.save()
หลังจากผู้ใช้เลือกไม่รับแล้ว ผลลัพธ์จะมีรหัสสถานะ CANCELED
ผู้ใช้สามารถเลือกใช้ได้ในภายหลังจากแอป
การตั้งค่า Google ในส่วน Smart Lock สำหรับรหัสผ่าน ผู้ใช้ต้องเปิดใช้การบันทึกข้อมูลเข้าสู่ระบบสำหรับทุกบัญชีเพื่อได้รับแจ้งให้บันทึกข้อมูลเข้าสู่ระบบในครั้งถัดไป
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");
}
}
// ...
}
หลังจากจัดเก็บข้อมูลเข้าสู่ระบบแล้ว ให้เรียกใช้ CredentialsClient.request()
การกำหนดเป้าหมาย Android O ขึ้นไป
เมื่อคุณบันทึกข้อมูลเข้าสู่ระบบของรหัสผ่านโดยใช้ Smart Lock ในอุปกรณ์ที่ใช้ Android O หรือเวอร์ชันใหม่กว่า Smart Lock จะใช้กล่องโต้ตอบการยืนยันการป้อนอัตโนมัติแบบดั้งเดิมผ่านกล่องโต้ตอบของตนเองทุกครั้งที่ทำได้ (โปรดทราบว่าข้อมูลเข้าสู่ระบบที่บันทึกโดยใช้การป้อนข้อความอัตโนมัติด้วย Google จะแชร์แบบ 2 ทิศทางกับ Smart Lock สำหรับรหัสผ่าน)