רמזי כניסה למשתמש

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

אם האובייקט 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.