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

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

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

כדי להיכנס למשתמשים באמצעות חשבונות 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:28.3.0')
    
        // 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'
    }
    

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.3.0')
    
        // 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();

Kotlin + KTX

Firebase.auth.signOut()