المصادقة باستخدام "خدمات ألعاب 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.kts أو <project>/<app-module>/build.gradle)، أضف التبعية لمكتبة Firebase Authentication لنظام التشغيل Android. ننصح باستخدام Firebase Android BoM للتحكم في إصدارات المكتبة.

    وكجزء من عملية إعداد Firebase Authentication، عليك أيضًا إضافة السمة حزمة تطوير البرامج (SDK) لخدمات Google Play على تطبيقك

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.5.1"))
    
        // 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:21.2.0")
    }

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

    (بديل) إضافة اعتماديات مكتبة 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:23.1.0")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0")
    }
    هل تبحث عن وحدة مكتبة خاصة بلغة Kotlin؟ ستبدأ بعد تشرين الأول (أكتوبر) 2023 (Firebase BoM 32.5.0)، بإمكان مطوّري البرامج بلغة Kotlin وJava. تعتمد على وحدة المكتبة الرئيسية (لمزيد من التفاصيل، راجع الأسئلة الشائعة حول هذه المبادرة).

إعداد مشروع Firebase

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

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

    ./gradlew signingReport

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

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

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

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

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

إعداد Play Games services باستخدام معلومات تطبيقك على Firebase

  1. في جلسة المعمل، وحدة تحكُّم Google Play يُرْجَى فَتْحْ تَطْبِيقْ Google Play أَوْ إِنْشَاءْ تَطْبِيقْ.

  2. في قسم النمو، انقر على Play Games services > الإعداد الإدارة > الإعدادات.

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

  4. في صفحة إعداد "Play Games services"، انقر على إضافة بيانات اعتماد

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

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

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

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

في عملية الدمج، عند إنشاء عنصر GoogleSignInOptions، استخدِم إعداد DEFAULT_GAMES_SIGN_IN والاتصال بـ requestServerAuthCode:

Kotlin+KTX

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

Java

GoogleSignInOptions gso = new 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:

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
  1. عند إعداد نشاطك، يُرجى التأكّد ممّا إذا كان قد تمّ توقيع المشغّل مسبقًا. مع Firebase:

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)
}

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);
}
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" إما بشكل صامت أو تفاعلي، الحصول على رمز التفويض من عنصر GoogleSignInAccount، أو استبداله بيانات اعتماد Firebase والمصادقة مع Firebase باستخدام Firebase بيانات الاعتماد:

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)
            }

            // ...
        }
}

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);
                    }

                    // ...
                }
            });
}

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

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

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

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

Kotlin+KTX

val user = auth.currentUser
user?.let {
    val playerName = it.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 = it.uid
}

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();

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

للحصول على معلومات عن اللاعب على "ألعاب Play" أو الوصول إلى "خدمات ألعاب Play"، يجب اتّباع الخطوات التالية: استخدام واجهات برمجة التطبيقات التي توفّرها حزمة تطوير البرامج (SDK) الخاصة بـ "ألعاب Google Play"

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();