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

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

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

กำหนดค่าโปรเจ็กต์ 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();

กล่องโต้ตอบการบันทึกของ Smart Lock

จากนั้นโทรหา CredentialsClient.save() เพื่อบันทึกผู้ใช้ ข้อมูลเข้าสู่ระบบ หากการโทรหา CredentialsClient.save() ไม่ทันที สำเร็จ ข้อมูลรับรองอาจเป็นข้อมูลใหม่ ซึ่งในกรณีนี้ผู้ใช้ต้องยืนยัน คำขอบันทึก แก้ปัญหาResolvableApiExceptionด้วย startResolutionForResult() เพื่อแสดงข้อความแจ้งให้ผู้ใช้ยืนยัน

หากผู้ใช้เลือกที่จะไม่บันทึกข้อมูลเข้าสู่ระบบ ผู้ใช้ก็จะไม่ได้รับข้อความแจ้งอีก บันทึกข้อมูลเข้าสู่ระบบของบัญชีใดก็ได้สำหรับแอป หากคุณโทรหา CredentialsClient.save() หลังจากที่ผู้ใช้เลือกไม่รับ ผลลัพธ์จะมี รหัสสถานะ CANCELED ผู้ใช้สามารถเลือกใช้ในภายหลังได้จาก แอปการตั้งค่าในส่วน 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 สำหรับรหัสผ่าน)