ดึงข้อมูลเข้าสู่ระบบที่จัดเก็บไว้ของผู้ใช้

ให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยอัตโนมัติโดยใช้ Credentials API เพื่อขอ และเรียกข้อมูลเข้าสู่ระบบที่จัดเก็บไว้สำหรับผู้ใช้

ก่อนเริ่มต้น

กำหนดค่าโปรเจ็กต์ Android Studio

สร้างออบเจ็กต์ CredentialsClient

หากต้องการขอข้อมูลเข้าสู่ระบบที่จัดเก็บไว้ คุณต้องสร้างอินสแตนซ์ของ CredentialsClient เพื่อเข้าถึง Credentials API

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient
= Credentials.getClient(this);

สร้างออบเจ็กต์ CredentialRequest

ออบเจ็กต์ CredentialRequest จะระบุ ระบบลงชื่อเข้าใช้ที่คุณต้องการขอข้อมูลเข้าสู่ระบบ สร้าง CredentialRequest ที่ใช้เมธอด setPasswordLoginSupported สำหรับ การลงชื่อเข้าใช้ด้วยรหัสผ่าน และวิธี setAccountTypes() สำหรับการรวมศูนย์ บริการลงชื่อเข้าใช้ เช่น Google Sign-In

mCredentialRequest = new CredentialRequest.Builder()
   
.setPasswordLoginSupported(true)
   
.setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
   
.build();

ใช้ค่าคงที่ที่ระบุไว้ใน IdentityProviders เพื่อระบุผู้ให้บริการการลงชื่อเข้าใช้ที่ใช้กันโดยทั่วไป สำหรับผู้ให้บริการลงชื่อเข้าใช้รายอื่นๆ ให้ใช้ สตริงที่ระบุผู้ให้บริการโดยไม่ซ้ำกัน คุณต้องใช้ตัวระบุผู้ให้บริการเดียวกัน เพื่อจัดเก็บข้อมูลเข้าสู่ระบบเมื่อคุณใช้เรียกข้อมูลเข้าสู่ระบบ

ขอข้อมูลเข้าสู่ระบบที่จัดเก็บไว้

หลังจากที่คุณสร้างออบเจ็กต์ CredentialsClient และ CredentialRequest แล้ว ให้ส่งออบเจ็กต์คำขอ ไปยัง CredentialsClient.request() วิธีขอข้อมูลเข้าสู่ระบบที่จัดเก็บไว้สำหรับแอปของคุณ

  mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
     
new OnCompleteListener<CredentialRequestResponse>() {
         
@Override
         
public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

             
if (task.isSuccessful()) {
                 
// See "Handle successful credential requests"
                  onCredentialRetrieved
(task.getResult().getCredential());
                 
return;
             
}

             
// See "Handle unsuccessful and incomplete credential requests"
             
// ...
         
}
     
});

กำหนด Callback เพื่อจัดการคำขอที่สำเร็จและล้มเหลวโดยใช้ addOnCompleteListener() วิธี

จัดการคำขอข้อมูลเข้าสู่ระบบที่ประสบความสำเร็จ

ข้อความโทสต์บ่งชี้ว่าการลงชื่อเข้าใช้สำเร็จ ในคำขอข้อมูลเข้าสู่ระบบที่สำเร็จ ให้ใช้ผลลัพธ์ Credential เพื่อลงชื่อเข้าใช้ให้ผู้ใช้ ในแอปของคุณให้เสร็จสมบูรณ์ ใช้เมธอด getAccountType() เพื่อระบุประเภทของข้อมูลเข้าสู่ระบบที่ดึงมา จากนั้นลงชื่อเข้าใช้ที่เหมาะสม ขั้นตอนได้ ตัวอย่างเช่น สำหรับ Google Sign-In ให้สร้างออบเจ็กต์ GoogleSignInClient ที่ รวมรหัสผู้ใช้ จากนั้นใช้ออบเจ็กต์เพื่อเริ่มขั้นตอนการลงชื่อเข้าใช้ สำหรับแบบใช้รหัสผ่าน ลงชื่อเข้าใช้ แล้วใช้รหัสและรหัสผ่านของผู้ใช้จากออบเจ็กต์ข้อมูลเข้าสู่ระบบเพื่อดำเนินการกับแอปให้เสร็จสมบูรณ์ ขั้นตอนการลงชื่อเข้าใช้

private void onCredentialRetrieved(Credential credential) {
   
String accountType = credential.getAccountType();
   
if (accountType == null) {
       
// Sign the user in with information from the Credential.
        signInWithPassword
(credential.getId(), credential.getPassword());
   
} else if (accountType.equals(IdentityProviders.GOOGLE)) {
       
// The user has previously signed in with Google Sign-In. Silently
       
// sign in the user with the same ID.
       
// See https://developers.google.com/identity/sign-in/android/
       
GoogleSignInOptions gso =
               
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                       
.requestEmail()
                       
.build();

       
GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
       
Task<GoogleSignInAccount> task = signInClient.silentSignIn();
       
// ...
   
}
}

จัดการข้อมูลเข้าสู่ระบบที่บันทึกไว้หลายรายการ

ตัวเลือกบัญชี Smart Lock

เมื่อต้องป้อนข้อมูลจากผู้ใช้เพื่อเลือกข้อมูลเข้าสู่ระบบ งาน request() จะ ล้มเหลวด้วย ResolvableApiException โปรดตรวจสอบว่า getStatusCode() ส่งคืน RESOLUTION_REQUIRED และ เรียกใช้เมธอด startResolutionForResult() ของข้อยกเว้นเพื่อแสดงข้อความแจ้งผู้ใช้ เพื่อเลือกบัญชี จากนั้นให้ดึงข้อมูลเข้าสู่ระบบที่ผู้ใช้เลือกจาก เมธอด onActivityResult() ของกิจกรรม โดยส่ง Credential.EXTRA_KEY ไปยัง getParcelableExtra()

mCredentialsClient.request(request).addOnCompleteListener(
       
new OnCompleteListener
private void resolveResult(ResolvableApiException rae, int requestCode) {
   
try {
        rae
.startResolutionForResult(MainActivity.this, requestCode);
        mIsResolving
= true;
   
} catch (IntentSender.SendIntentException e) {
       
Log.e(TAG, "Failed to send resolution.", e);
        hideProgress
();
   
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   
super.onActivityResult(requestCode, resultCode, data);

   
// ...

   
if (requestCode == RC_READ) {
       
if (resultCode == RESULT_OK) {
           
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            onCredentialRetrieved
(credential);
       
} else {
           
Log.e(TAG, "Credential Read: NOT OK");
           
Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
       
}
   
}

   
// ...

}

เมื่อไม่พบข้อมูลเข้าสู่ระบบ ผู้ใช้ต้องสร้างบัญชีหรือด้วยตนเอง ลงชื่อเข้าใช้ หากเป็น getStatusCode() ส่งคืน SIGN_IN_REQUIRED, คุณสามารถเร่งขั้นตอนการลงชื่อสมัครใช้และการลงชื่อเข้าใช้โดยการแสดงข้อความแจ้ง ผู้ใช้จะเลือกข้อมูลการลงชื่อเข้าใช้ที่ใช้ล่าสุด เช่น อีเมลและ แล้วป้อนข้อมูลนั้นลงในฟิลด์ของแบบฟอร์มโดยอัตโนมัติ โปรดดูหัวข้อมอบคำแนะนำในการลงชื่อเข้าใช้ให้แก่ผู้ใช้ เพื่อดูรายละเอียด

เมื่อลงชื่อเข้าใช้สำเร็จ ให้อนุญาตให้ผู้ใช้บันทึกข้อมูลเข้าสู่ระบบ เพื่อตรวจสอบสิทธิ์ในอนาคตโดยอัตโนมัติในอุปกรณ์ทุกเครื่อง