איך שולחים למשתמשים רמזים לכניסה לחשבון

בקשות לאחזור פרטי כניסה של משתמש עלולות להיכשל אם המשתמש עדיין לא שמר או כאשר המשתמש עדיין לא נרשם לאפליקציה. באלה משתמשים ב-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);
}

בוחר רמזים לכניסה ל-Smart Lock

המשתמשים יתבקשו לבחור כתובת אימייל שבה הם רוצים להשתמש.

לאחר מכן, בשיטה 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.