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