Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

المصادقة باستخدام خدمات ألعاب Google Play على Android

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يمكنك استخدام خدمات ألعاب Google Play لتسجيل دخول اللاعبين إلى لعبة Android مبنية على Firebase. لاستخدام خدمات ألعاب Google Play ، قم بتسجيل الدخول باستخدام Firebase ، قم أولاً بتسجيل دخول اللاعب باستخدام ألعاب Google Play ، واطلب رمز مصادقة OAuth 2.0 عند القيام بذلك. بعد ذلك ، قم بتمرير رمز المصادقة إلى PlayGamesAuthProvider لإنشاء بيانات اعتماد Firebase ، والتي يمكنك استخدامها للمصادقة مع Firebase.

قبل ان تبدأ

قم بإعداد مشروع Android الخاص بك

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

  2. في ملف Gradle (على مستوى التطبيق) للوحدة النمطية (عادةً ما يكون <project>/<app-module>/build.gradle ) ، أضف التبعية لمكتبة Firebase Authentication Android. نوصي باستخدام Firebase Android BoM للتحكم في إصدارات المكتبة.

    أيضًا ، كجزء من إعداد مصادقة Firebase ، تحتاج إلى إضافة SDK لخدمات Google Play إلى تطبيقك.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add 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'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.0'
    }

    باستخدام Firebase Android BoM ، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase Android.

    (بديل) أضف تبعيات مكتبة Firebase بدون استخدام BoM

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

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

    dependencies {
        // Add 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.1.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.0'
    }

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add 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'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.0'
    }

    باستخدام Firebase Android BoM ، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase Android.

    (بديل) أضف تبعيات مكتبة Firebase بدون استخدام BoM

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

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

    dependencies {
        // Add 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.1.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.0'
    }

قم بإعداد مشروع Firebase الخاص بك

  1. عيّن بصمة إصبع SHA-1 للعبتك من صفحة الإعدادات في وحدة تحكم Firebase.

    يمكنك الحصول على تجزئة SHA لشهادة التوقيع الخاصة بك باستخدام أمر signingReport :

    ./gradlew signingReport

  2. تمكين ألعاب Google Play كموفر لتسجيل الدخول:

    1. ابحث عن معرّف عميل خادم الويب الخاص بمشروعك وسر العميل. يحدد معرّف عميل خادم الويب مشروع Firebase لخوادم مصادقة Google Play.

      للعثور على هذه القيم:

      1. افتح مشروع Firebase في صفحة بيانات اعتماد وحدة تحكم Google APIs .
      2. في قسم معرّفات عميل OAuth 2.0 ، افتح صفحة تفاصيل عميل الويب (الذي تم إنشاؤه تلقائيًا بواسطة خدمة Google) . تسرد هذه الصفحة معرف عميل خادم الويب وسره.
    2. بعد ذلك ، في وحدة تحكم Firebase ، افتح قسم المصادقة .

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

هيئ خدمات ألعاب Play باستخدام معلومات تطبيق Firebase

  1. في Google Play Console ، افتح تطبيق Google Play أو أنشئ واحدًا.

  2. في قسم " النمو " ، انقر على خدمات ألعاب Play> الإعداد والإدارة> التهيئة .

  3. انقر فوق نعم ، لعبتي تستخدم Google APIs بالفعل ، وحدد مشروع Firebase الخاص بك من القائمة ، ثم انقر فوق استخدام .

  4. في صفحة تكوين خدمات ألعاب Play ، انقر على إضافة بيانات الاعتماد .

    1. حدد نوع خادم اللعبة .
    2. في حقل عميل OAuth ، حدد معرّف عميل الويب لمشروعك. تأكد من أن هذا هو نفس معرّف العميل الذي حددته عند تمكين تسجيل الدخول إلى ألعاب Play.
    3. احفظ التغييرات.
  5. لا يزال في صفحة تكوين خدمات ألعاب Play ، انقر فوق إضافة بيانات الاعتماد مرة أخرى.

    1. حدد نوع Android .
    2. في حقل عميل OAuth ، حدد معرّف عميل Android الخاص بمشروعك. (إذا كنت لا ترى معرّف عميل Android ، فتأكد من تعيين بصمة SHA-1 للعبة في وحدة تحكم Firebase.)
    3. احفظ التغييرات.
  6. في صفحة المختبرين ، أضف عناوين البريد الإلكتروني لأي مستخدم يحتاج إلى أن يكون قادرًا على تسجيل الدخول إلى لعبتك قبل إصدارها في متجر Play.

ادمج تسجيل الدخول إلى "ألعاب Play" في لعبتك

أولاً ، ادمج تسجيل الدخول إلى "ألعاب Play" في تطبيقك. راجع تسجيل الدخول إلى ألعاب Android للحصول على إرشادات كاملة.

في التكامل الخاص بك ، عند إنشاء كائن GoogleSignInOptions ، استخدم تهيئة DEFAULT_GAMES_SIGN_IN واستدعاء requestServerAuthCode :

Java

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Kotlin+KTX

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build()

يجب عليك تمرير معرف عميل خادم الويب إلى طريقة requestServerAuthCode . هذا هو المعرف الذي قدمته عند تمكين تسجيل الدخول إلى "ألعاب Play" في وحدة تحكم Firebase.

المصادقة باستخدام Firebase

بعد إضافة تسجيل الدخول إلى "ألعاب Play" إلى تطبيقك ، يلزمك إعداد Firebase لاستخدام بيانات اعتماد حساب Google التي تحصل عليها عندما يسجّل اللاعب الدخول بنجاح باستخدام "ألعاب Play".

  1. أولاً ، في أسلوب onCreate الخاص بنشاط تسجيل الدخول ، احصل على المثيل المشترك لكائن FirebaseAuth :

Java

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

Kotlin+KTX

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

Java

@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)
}
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
  1. بعد أن يقوم اللاعب بتسجيل الدخول باستخدام Play Games إما بصمت أو بشكل تفاعلي ، احصل على رمز المصادقة من كائن GoogleSignInAccount ، واستبدله ببيانات اعتماد Firebase ، وقم بالمصادقة مع Firebase باستخدام بيانات اعتماد Firebase:

Java

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId());

    final FirebaseAuth auth = FirebaseAuth.getInstance();
    AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode());
    auth.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 = auth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }

                    // ...
                }
            });
}

Kotlin+KTX

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!)

    val auth = Firebase.auth
    val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!)
    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)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }

                // ...
            }
}

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

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

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

في لعبتك ، يمكنك الحصول على معرف المستخدم Firebase UID من كائن FirebaseUser :

Java

FirebaseUser user = mAuth.getCurrentUser();
String playerName = user.getDisplayName();

// The user's Id, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server, if you
// have one; use FirebaseUser.getIdToken() instead.
String uid = user.getUid();

Kotlin+KTX

val user = auth.currentUser
user?.let {
    val playerName = user.displayName

    // The user's Id, unique to the Firebase project.
    // Do NOT use this value to authenticate with your backend server, if you
    // have one; use FirebaseUser.getIdToken() instead.
    val uid = user.uid
}

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

للحصول على معلومات لاعب Play Games الخاص بالمستخدم أو للوصول إلى خدمات ألعاب Play ، استخدم واجهات برمجة التطبيقات التي توفرها Google Play Games SDK .

لتسجيل خروج مستخدم ، اتصل بـ FirebaseAuth.signOut() :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()