Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

المصادقة باستخدام GitHub على Android

يمكنك السماح للمستخدمين بالمصادقة مع Firebase باستخدام حساباتهم على GitHub من خلال دمج تسجيل دخول OAuth العام المستند إلى الويب في تطبيقك باستخدام Firebase SDK لتنفيذ تدفق تسجيل الدخول من البداية إلى النهاية.

قبل ان تبدأ

لتسجيل دخول المستخدمين باستخدام حسابات GitHub ، يجب أولاً تمكين GitHub كموفر تسجيل الدخول لمشروع Firebase الخاص بك:

  1. إذا كنت لم تقم بذلك بالفعل، إضافة Firebase إلى مشروع Android .

  2. في وحدة التحكم Firebase ، فتح الباب أصيل.
  3. على علامة التبويب تسجيل الدخول الأسلوب، تمكين مزود جيثب.
  4. إضافة معرف العميل والعميل السري من وحدة التحكم المطور الذي موفر لتكوين الموفر:
    1. تسجيل تطبيقك كتطبيق المطور على جيثب والحصول معرف العميل أوث 2.0 التطبيق والعميل السري.
    2. تأكد الخاص بك Firebase أوث إعادة توجيه URI (على سبيل المثال my-app-12345.firebaseapp.com/__/auth/handler ) تم تعيين ك URL رد التفويض في صفحة إعدادات التطبيق الخاص بك على هاتفك التكوين جيثب التطبيق .
  5. انقر فوق حفظ.
  6. باستخدام Firebase الروبوت بوم ، أن يعلن تبعية المكتبة Firebase مصادقة الروبوت في الوحدة النمطية الخاصة بك (على مستوى التطبيق) ملف Gradle (عادة app/build.gradle ).

    جافا

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // 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 الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

    ملاحظة أنه إذا كنت تستخدم مكتبات Firebase متعددة في التطبيق الخاص بك، ونحن نوصي بشدة باستخدام بوم لإدارة إصدارات المكتبة، والذي يضمن أن جميع إصدارات متوافقة.

    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.4.2')
    
        // 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 الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

    ملاحظة أنه إذا كنت تستخدم مكتبات Firebase متعددة في التطبيق الخاص بك، ونحن نوصي بشدة باستخدام بوم لإدارة إصدارات المكتبة، والذي يضمن أن جميع إصدارات متوافقة.

    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.

تعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK

إذا كنت تقوم بإنشاء تطبيق Android ، فإن أسهل طريقة لمصادقة المستخدمين باستخدام Firebase باستخدام حسابات GitHub الخاصة بهم هي التعامل مع تدفق تسجيل الدخول بالكامل باستخدام Firebase Android SDK.

للتعامل مع تدفق تسجيل الدخول باستخدام Firebase Android SDK ، اتبع الخطوات التالية:

  1. بناء مثيل OAuthProvider باستخدام بناء مع معرف مزود github.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
    
  2. اختياري: حدد معلمات إضافية أوث المخصصة التي تريد إرسالها مع طلب أوث.

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

    للمعلمات يدعم جيثب، راجع وثائق جيثب أوث . ملاحظة أنه لا يمكنك تمرير المعلمات المطلوبة Firebase مع setCustomParameters() . هذه المعلمات CLIENT_ID، RESPONSE_TYPE، redirect_uri، والدولة، ونطاق response_mode.

  3. اختياري: حدد أوث إضافية نطاقات 2.0 وراء الشخصية الأساسية والتي ترغب في طلب من مزود المصادقة. إذا كان التطبيق الخاص بك يتطلب الوصول إلى بيانات المستخدم الخاصة من جيثب واجهات برمجة التطبيقات، ستحتاج إلى طلب أذونات الوصول جيثب واجهات برمجة التطبيقات API تحت ضوابط في وحدة تحكم مطور جيثب. يجب أن تكون نطاقات OAuth المطلوبة مطابقة تامة للنطاقات المكونة مسبقًا في أذونات واجهة برمجة التطبيقات للتطبيق.

    // 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 أخرى، وهذا سوف السيطرة على واجهة المستخدم الخاص بك عن طريق ظهرت على تبويب كروم مخصص . ونتيجة لذلك، لا مرجع آخر الخاصة بك في 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.
              }
            });
    

    على الانتهاء بنجاح، والحصول أوث رمز المرتبطة مزود يمكن استرجاعها من OAuthCredential الكائن عاد.

    باستخدام رمز وصول أوث، يمكنك استدعاء API جيثب .

    على سبيل المثال، للحصول على المعلومات الشخصية الأساسية، يمكنك استدعاء API REST، ويمر وصول رمزية في Authorization الرأس:

  5. وبينما تركز الأمثلة المذكورة أعلاه على تدفقات تسجيل الدخول ل، لديك أيضا القدرة على ربط مزود جيثب إلى مستخدم موجود باستخدام 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 متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

يمكنك السماح للمستخدمين تسجيل الدخول إلى التطبيق الخاص بك باستخدام موفري المصادقة متعددة عن طريق ربط المصادقة أوراق اعتماد مقدم إلى حساب مستخدم موجود.

تسجيل الخروج مستخدم، استدعاء signOut :

جافا

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()