Catch up on everthing we announced at this year's Firebase Summit. Learn more

אמת באמצעות GitHub באנדרואיד

אתה יכול לאפשר למשתמשים שלך לאמת עם Firebase באמצעות חשבונות GitHub שלהם על ידי שילוב התחברות כללית מבוססת OAuth לאפליקציה שלך באמצעות ה- SDK של Firebase כדי לבצע את זרימת הכניסה מקצה לקצה.

לפני שאתה מתחיל

כדי להיכנס למשתמשים באמצעות חשבונות GitHub, תחילה עליך להפעיל את GitHub כספק כניסה לפרויקט Firebase שלך:

  1. אם לא עשית זאת עדיין, להוסיף Firebase לפרויקט Android שלך .

  2. בשנות ה קונסולת Firebase , פתח את הקטע המחבר.
  3. 'הכניסה דרך כרטיסיית שיטה, לאפשר ספק GitHub.
  4. מוסיפים את זיהוי הלקוח וגם לקוח הסוד מזה קונסולת המפתחים של ספק לתצורת ספק:
    1. רשמו את האפליקציה שלכם כיישום מפתח על GitHub ולקבל מזהה לקוח OAuth 2.0 של האפליקציה לקוח הסוד.
    2. ודא שלך Firebase OAuth הפניה URI (למשל my-app-12345.firebaseapp.com/__/auth/handler ) מוגדר ככתובת אתר התקשרות להרשאה שלך בדף ההגדרות של האפליקציה שלך על שלך config של GitHub האפליקציה .
  5. לחץ על שמור.
  6. באמצעות BOM אנדרואיד Firebase , להכריז על התלות של הספרייה אנדרואיד אימות Firebase במודול שלך (ברמת האפליקציה) קובץ Gradle (בדרך כלל app/build.gradle ).

    ג'אווה

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    באמצעות Firebase אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד Firebase.

    (אלטרנטיבי) הצהר תלות הספרייה Firebase ללא שימוש BOM

    אם תבחר לא להשתמש ב- Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

    שים לב שאם אתה משתמש בספריות Firebase מרובים באפליקציה, אנו ממליצים בחום להשתמש בתמונה BOM לנהל גרסאות הספרייה, אשר מבטיח כי כל הגרסאות תואמות.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.0.1'
    }
    

    קוטלין+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    באמצעות Firebase אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד Firebase.

    (אלטרנטיבי) הצהר תלות הספרייה Firebase ללא שימוש BOM

    אם תבחר לא להשתמש ב- Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

    שים לב שאם אתה משתמש בספריות Firebase מרובים באפליקציה, אנו ממליצים בחום להשתמש בתמונה BOM לנהל גרסאות הספרייה, אשר מבטיח כי כל הגרסאות תואמות.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
    }
    

  7. אם טרם ציין טביעת אצבע SHA-1 של האפליקציה שלך, לעשות זאת מתוך דף ההגדרות של קונסולת Firebase. עיין אימות הלקוח שלך לקבלת פרטים על איך להגיע טביעת אצבע SHA-1 של האפליקציה שלך.

לטפל בזרימת הכניסה באמצעות SDK Firebase

אם אתה בונה אפליקציית Android, הדרך הקלה ביותר לאמת את המשתמשים שלך עם Firebase באמצעות חשבונות GitHub שלהם היא לטפל בכל זרימת הכניסה באמצעות Firebase Android SDK.

כדי לטפל בזרימת הכניסה באמצעות Firebase Android SDK, בצע את השלבים הבאים:

  1. בניית מופע של OAuthProvider באמצעות הבונה שלה עם מזהה ספק github.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
    
  2. אופציונאלי: ציין פרמטרי OAuth מנהג נוספים שאתה רוצה לשלוח עם בקשת OAuth.

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com");
    

    עבור הפרמטרים GitHub תומך, לראות את התיעוד OAuth GitHub . שים לב, אתה לא יכול להעביר פרמטרים-נדרש Firebase עם setCustomParameters() . פרמטרים אלה הם client_id, response_type, redirect_uri, המדינה, היקף response_mode.

  3. אופציונלי: ציין OAuth נוסף 2.0 היקפים מעבר לפרופיל בסיסי שברצונך בקשה מספקת אימות. אם היישום שלך דורש גישה לנתוני המשתמשים פרטיים GitHub APIs, תצטרך הרשאות בקשה גישה GitHub APIs תחת הרשאות API במסוף המפתחים GitHub. היקפי OAuth המבוקשים חייבים להיות בהתאמה מדויקת לאלה שהוגדרו מראש בהרשאות ה- API של האפליקציה.

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    List<String> scopes =
        new ArrayList<String>() {
          {
            add("user:email");
          }
        };
    provider.setScopes(scopes);
    
  4. אימות באמצעות Firebase באמצעות אובייקט ספק OAuth. לידיעתך, בשונה פעולות FirebaseAuth אחרות, זה ייקח שליטה על ממשק המשתמש שלכם על ידי לצוץ Tab Chrome מותאם אישית . כתוצאה מכך, אינם מפנים את הפעילות שלך OnSuccessListener ו OnFailureListener שאתם מייחסים כפי שהם מיד לנתק כאשר המבצע מתחיל את ממשק המשתמש.

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

    כדי לבדוק אם יש תוצאה תלוי ועומד, קורא getPendingAuthResult :

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    כדי להפעיל את השלט בזרימה, קורא startActivityForSignInWithProvider :

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    על סיומו המוצלח, גישת OAuth אסימון הקשורים הספק יכולה להיגזר OAuthCredential האובייקט חזר.

    באמצעות קוד גישה מסוג OAuth, אתה יכול להתקשר API GitHub .

    לדוגמה, כדי לקבל את פרטי הפרופיל הבסיסיים, אתה יכול לקרוא לממשק API REST, להעביר את קוד הגישה את Authorization הכותרת:

  5. בעוד בדוגמות לעיל להתמקד כניסת תזרים, יש לך גם את היכולת לקשר ספקית GitHub כדי משתמש קיים באמצעות startActivityForLinkWithProvider . לדוגמה, אתה יכול לקשר מספר ספקים לאותו משתמש ומאפשר להם להיכנס עם כל אחד מהם.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // GitHub credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. אותו הדפוס יכול לשמש עם startActivityForReauthenticateWithProvider אשר ניתן להשתמש בם כדי לאחזר אישורים טריים עבור פעולות רגישות הדורשות לאחרונה התחברות.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

הצעדים הבאים

לאחר שמשתמש נכנס לראשונה, חשבון משתמש חדש נוצר ומקושר לאישורים - כלומר שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות - המשתמש נכנס איתו. חשבון חדש זה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט שלך, ללא קשר לאופן בו המשתמש נכנס.

  • באפליקציות שלך, אתה יכול לקבל את המידע הבסיסי של הפרופיל האישי של המשתמש מן FirebaseUser האובייקט. ראו ניהול משתמשים .

  • בבסיס הנתונים בזמן אמת Firebase שלך לאחסון בענן אבטחה חוקי , אתה יכול לקבל את שנכנסים למערכת זיהוי המשתמש הייחודי של המשתמש מן auth משתנה, ולהשתמש בו כדי לקבוע אילו נתונים גישה יכול משתמש.

תוכל לאפשר למשתמשים להיכנס לאפליקציה שלך דרך ספקי אימות מרובים על ידי מקשר auth אישורי ספק לחשבון משתמש קיים.

כדי לצאת מהחשבון משתמש, קוראים signOut :

ג'אווה

FirebaseAuth.getInstance().signOut();

קוטלין+KTX

Firebase.auth.signOut()