Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

المصادقة باستخدام تسجيل الدخول بحساب جوجل على نظام أندرويد

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

قبل ان تبدأ

  1. أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل.
  2. في ملف build.gradle مستوى المشروع ، تأكد من تضمين مستودع Google Maven في كل من buildscript الخاص بك buildscript allprojects .
  3. أضف التبعيات الخاصة بمكتبة Firebase Authentication Android وخدمات Google Play إلى ملف Gradle (على مستوى التطبيق) للوحدة النمطية (عادةً app/build.gradle ):

    implementation 'com.google.firebase:firebase-auth:19.4.0'
    implementation 'com.google.android.gms:play-services-auth:18.1.0'
    
  4. إذا لم تكن قد حددت بصمة SHA-1 لتطبيقك ، فقم بذلك من صفحة الإعدادات في وحدة تحكم Firebase. راجع مصادقة عميلك للحصول على تفاصيل حول كيفية الحصول على بصمة SHA-1 لتطبيقك.

  5. تمكين تسجيل الدخول بحساب Google في وحدة تحكم Firebase:
    1. في وحدة تحكم Firebase ، افتح قسم المصادقة .
    2. في علامة التبويب طريقة تسجيل الدخول ، قم بتمكين طريقة تسجيل الدخول إلى Google وانقر فوق حفظ .

مصادقة مع Firebase

  1. ادمج تسجيل الدخول بحساب Google في تطبيقك باتباع الخطوات الموجودة في صفحة دمج تسجيل الدخول بحساب Google في تطبيق Android . عند تكوين كائن GoogleSignInOptions ، اتصل بـ requestIdToken :

    جافا

    // Configure Google Sign In
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

    Kotlin + KTX

    // Configure Google Sign In
    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build()
    يجب عليك تمرير معرف عميل الخادم الخاص بك إلى طريقة requestIdToken . للعثور على معرّف عميل OAuth 2.0:
    1. افتح صفحة بيانات الاعتماد في وحدة تحكم GCP.
    2. معرّف عميل نوع تطبيق الويب هو معرّف عميل OAuth 2.0 لخادمك الخلفي.
    بعد دمج تسجيل الدخول بحساب Google ، يكون لنشاط تسجيل الدخول رمز مشابه لما يلي:

    جافا

    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                // Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = task.getResult(ApiException.class);
                Log.d(TAG, "firebaseAuthWithGoogle:" + account.getId());
                firebaseAuthWithGoogle(account.getIdToken());
            } catch (ApiException e) {
                // Google Sign In failed, update UI appropriately
                Log.w(TAG, "Google sign in failed", e);
                // ...
            }
        }
    }

    Kotlin + KTX

    private fun signIn() {
        val signInIntent = googleSignInClient.signInIntent
        startActivityForResult(signInIntent, RC_SIGN_IN)
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
    
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                // Google Sign In was successful, authenticate with Firebase
                val account = task.getResult(ApiException::class.java)!!
                Log.d(TAG, "firebaseAuthWithGoogle:" + account.id)
                firebaseAuthWithGoogle(account.idToken!!)
            } catch (e: ApiException) {
                // Google Sign In failed, update UI appropriately
                Log.w(TAG, "Google sign in failed", e)
                // ...
            }
        }
    }
  2. في أسلوب onCreate الخاص بنشاط تسجيل الدخول ، احصل على المثيل المشترك لكائن FirebaseAuth :

    جافا

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin + KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth
  3. عند تهيئة نشاطك ، تحقق لمعرفة ما إذا كان المستخدم قد قام بتسجيل الدخول حاليًا:

    جافا

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    Kotlin + KTX

    override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  4. بعد نجاح المستخدم في تسجيل الدخول ، احصل على رمز معرف من كائن GoogleSignInAccount ، GoogleSignInAccount اعتماد GoogleSignInAccount ، وقم بالمصادقة مع Firebase باستخدام بيانات اعتماد Firebase:

    جافا

    private void firebaseAuthWithGoogle(String idToken) {
        AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w(TAG, "signInWithCredential:failure", task.getException());
                            Snackbar.make(mBinding.mainLayout, "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
                            updateUI(null);
                        }
    
                        // ...
                    }
                });
    }

    Kotlin + KTX

    private fun firebaseAuthWithGoogle(idToken: String) {
        val credential = GoogleAuthProvider.getCredential(idToken, null)
        auth.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success")
                        val user = auth.currentUser
                        updateUI(user)
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.exception)
                        // ...
                        Snackbar.make(view, "Authentication Failed.", Snackbar.LENGTH_SHORT).show()
                        updateUI(null)
                    }
    
                    // ...
                }
    }
    إذا نجحت استدعاء signInWithCredential فيمكنك استخدام طريقة getCurrentUser للحصول على بيانات حساب المستخدم.

الخطوات التالية

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

  • في تطبيقاتك ، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من كائن FirebaseUser . انظر إدارة المستخدمين .

  • في قاعدة بيانات Firebase Realtime وقواعد أمان التخزين السحابي ، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.

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

لتسجيل خروج مستخدم ، قم signOut :

جافا

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()