בקשות לאחזור פרטי כניסה של משתמש עלולות להיכשל אם המשתמש עדיין לא שמר או כאשר המשתמש עדיין לא נרשם לאפליקציה. באלה משתמשים ב-Credential API כדי לאחזר רמזים של כניסה, כגון השם וכתובת האימייל של המשתמש. משתמשים ברמזים האלה כדי למלא מראש את פרטי הכניסה לאפליקציה וטופסי הרשמה, כדי לזרז את תהליך ההצטרפות של האפליקציה.
ב-Android 6.0 (Marshmallow) ואילך, האפליקציה לא צריכה לבקש גישה הרשאות מכשיר או זמן ריצה כדי לאחזר רמזים של כניסה עם Credentials 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
מכיל מזהה
ב-Assistant. אם כן, אפשר להיכנס לחשבון המשתמש באמצעות האסימון המזהה,
בלי שהמשתמש יצטרך להקליד סיסמה.
אם האובייקט Credential
לא מכיל אסימון מזהה (או שלא רוצים להשתמש בו)
את האסימון המזהה), למלא מראש את שדות הכניסה ברמזים שהוספתם
בכוונה טובה.
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.