คําขอเรียกข้อมูลรับรองของผู้ใช้อาจล้มเหลวเมื่อผู้ใช้ยังไม่ได้บันทึกข้อมูลเข้าสู่ระบบหรือเมื่อผู้ใช้ยังไม่ได้ลงชื่อสมัครใช้แอปของคุณ ในสถานการณ์เหล่านี้ ให้ใช้ Credentials API เพื่อเรียกดูข้อมูลการลงชื่อเข้าใช้ เช่น ชื่อและอีเมลของผู้ใช้ ใช้คําแนะนําเหล่านี้เพื่อกรอก แบบฟอร์มการลงชื่อเข้าใช้และลงชื่อสมัครใช้ ล่วงหน้าของแอป เพื่อช่วยเร่งกระบวนการเริ่มต้นใช้งานของแอป
ใน Android 6.0 (Marshmallow) ขึ้นไป แอปของคุณไม่จําเป็นต้องขอสิทธิ์ในการใช้อุปกรณ์หรือรันไทม์เพื่อดึงคําแนะนําการลงชื่อเข้าใช้ด้วย API ข้อมูลเข้าสู่ระบบ
ก่อนเริ่มต้น
กําหนดค่าโปรเจ็กต์ Android Studio
เรียกข้อมูลคําแนะนําในการลงชื่อเข้าใช้
หากต้องการเรียกข้อมูลคําแนะนําการลงชื่อเข้าใช้ ให้กําหนดค่ากล่องโต้ตอบตัวเลือกคําแนะนําก่อนโดยสร้างออบเจ็กต์ HintRequest
จากนั้นส่งออบเจ็กต์ HintRequest
ไปยัง CredentialsClient.getHintPickerIntent()
เพื่อรับความตั้งใจที่จะแจ้งให้ผู้ใช้เลือกอีเมล และสุดท้าย ให้เริ่มความตั้งใจด้วย 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);
}
ระบบจะแจ้งผู้ใช้ให้เลือกอีเมลที่จะใช้
จากนั้น ในเมธอด onActivityResult()
ของกิจกรรม ให้ดึงคําแนะนําจากพัสดุภัณฑ์ Credential.EXTRA_KEY
ตรวจสอบว่าผู้ใช้อยู่ในฐานข้อมูลผู้ใช้ของคุณหรือไม่ แล้วเริ่มต้นกิจกรรมที่เหมาะสมด้วยคําแนะนําด้านข้อมูลรับรอง
@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(); } } ... }
กรอกแบบฟอร์มลงชื่อเข้าใช้ล่วงหน้า
หากผู้ใช้อยู่ในฐานข้อมูลผู้ใช้และคุณได้เริ่มกิจกรรมการลงชื่อเข้าใช้แอป คุณจะเลือกได้ว่าจะให้ออบเจ็กต์ Credential
มีโทเค็นรหัสหรือไม่ (ไม่บังคับ) หากเป็นเช่นนั้น คุณจะลงชื่อเข้าใช้ให้ผู้ใช้ด้วยโทเค็นรหัสได้ โดยไม่ต้องให้ผู้ใช้พิมพ์รหัสผ่าน
หากออบเจ็กต์ Credential
ไม่มีโทเค็นรหัส (หรือคุณไม่ต้องการใช้โทเค็นรหัส) ให้กรอกข้อมูลในช่องลงชื่อเข้าใช้ล่วงหน้าด้วยคําแนะนําที่เพิ่มลงใน 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());
...
}
...
}
กรอกแบบฟอร์มลงชื่อสมัครใช้ล่วงหน้า
หากผู้ใช้ไม่ได้อยู่ในฐานข้อมูลผู้ใช้และคุณได้เริ่มกิจกรรมการลงชื่อสมัครใช้ของแอป ให้ใส่คําแนะนําการลงชื่อเข้าใช้ที่คุณเพิ่มลงในความตั้งใจลงในช่อง ล่วงหน้า
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.
...
}
...
}
นอกจากนี้ คุณยังตรวจสอบได้ว่าออบเจ็กต์ Credential
มีโทเค็นรหัสที่มีอีเมลที่ยืนยันแล้วหรือไม่ หากเป็นเช่นนั้น คุณข้ามขั้นตอนการยืนยันอีเมลของแอปได้ เนื่องจากอีเมลดังกล่าวได้รับการยืนยันแล้วโดย Google