يمكنك استخدام خدمات "ألعاب Google Play" لتسجيل دخول اللاعبين إلى لعبة Android
مصمَّمة على Firebase. لاستخدام خدمات "ألعاب Google Play" عند تسجيل الدخول باستخدام Firebase،
عليك أولاً تسجيل دخول اللاعب من خلال تطبيق "ألعاب Google Play"، ثم طلب رمز مصادقة OAuth 2.0 عند إجراء ذلك. بعد ذلك، أدخِل رمز المصادقة إلى PlayGamesAuthProvider
إلى بيانات اعتماد Firebase التي يمكنك استخدامها للمصادقة باستخدام Firebase.
قبل البدء
إعداد مشروع Android
أضِف Firebase إلى مشروع Android الخاص بك، إذا لم يسبق لك إجراء ذلك.
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.kts
أو<project>/<app-module>/build.gradle
)، أضِف التبعية لمكتبة مصادقة Firebase لنظام التشغيل Android. ننصحك باستخدام برنامج Firebase Android BoM للتحكّم في إصدارات المكتبة.وأيضًا، كجزء من إعداد مصادقة Firebase، يجب أيضًا إضافة حزمة SDK لخدمات Google Play إلى تطبيقك.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.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") }باستخدام إطار عمل Android BoM، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Android في Firebase.
(بديل) أضِف تبعيات مكتبة Firebase بدون استخدام قائمة BoM.
إذا اختَرت عدم استخدام قائمة مشروعات Firebase، يجب تحديد كل إصدار من إصدارات مكتبة 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.0.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") }
إعداد مشروعك على Firebase
يمكنك ضبط الملف المرجعي لشهادة SHA-1 للعبتك من صفحة الإعدادات في وحدة تحكم Firebase.
يمكنك الحصول على تجزئة SHA لشهادة التوقيع باستخدام الأمر
signingReport
:./gradlew signingReport
تفعيل "ألعاب Google Play" كمقدّم تسجيل الدخول:
ابحث عن معرِّف العميل لخادم الويب وسر العميل لمشروعك. يحدّد معرِّف العميل لخادم الويب مشروعك في Firebase لخوادم المصادقة Google Play.
للعثور على هذه القيم:
- افتح مشروع Firebase في صفحة بيانات اعتماد وحدة تحكُّم Google APIs.
- في قسم معرِّفات عميل OAuth 2.0، افتح صفحة تفاصيل برنامج الويب (تم إنشاؤه تلقائيًا بواسطة خدمة Google). تسرد هذه الصفحة معرِّف العميل وسر خادم الويب.
بعد ذلك، في وحدة تحكُّم Firebase، افتح قسم المصادقة.
في علامة التبويب طريقة تسجيل الدخول، فعِّل خيار تسجيل الدخول إلى ألعاب Play. ستحتاج إلى تحديد معرّف العميل وسر العميل لخادم الويب لمشروعك، والذي حصلت عليه من وحدة تحكم واجهات برمجة التطبيقات.
إعداد خدمات "ألعاب Play" باستخدام معلومات تطبيقك على Firebase
في Google Play Console، افتح تطبيق Google Play أو أنشئ تطبيقًا.
في قسم النمو، انقر على خدمات ألعاب Play > الإعداد والإدارة > الضبط.
انقر على نعم، تستخدم لعبتي Google APIs حاليًا، واختَر مشروع Firebase من القائمة، ثم انقر على Use (استخدام).
في صفحة ضبط "خدمات ألعاب Play"، انقر على إضافة بيانات اعتماد.
- اختَر النوع خادم اللعبة.
- في الحقل عميل OAuth، اختَر معرِّف عميل الويب لمشروعك. تأكَّد من أنّ هذا هو معرّف العميل نفسه الذي حددته عند تفعيل ميزة "تسجيل الدخول إلى ألعاب Play".
- احفظ التغييرات.
في صفحة إعداد "خدمات ألعاب Play"، انقر على إضافة بيانات اعتماد مرة أخرى.
- اختَر النوع Android.
- في الحقل عميل OAuth، اختَر معرّف عميل Android لمشروعك. (إذا لم يظهر لك معرّف العميل لنظام التشغيل Android، تأكّد من ضبط بصمة إصبع SHA-1 اللعبة في وحدة تحكُّم Firebase).
- احفظ التغييرات.
في صفحة المختبِرون، أضِف عناوين البريد الإلكتروني لأي مستخدم يحتاج إلى التمكّن من تسجيل الدخول إلى لعبتك قبل إصدارها على "متجر Play".
دمج ميزة "تسجيل الدخول إلى "ألعاب 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".
- أولاً، في طريقة
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();
- عند تهيئة نشاطك، تأكّد ممّا إذا كان المشغّل مسجّلاً الدخول إلى 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.
- بعد أن يسجِّل اللاعب الدخول إلى "ألعاب 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، ويمكن استخدامه لتحديد مستخدم في كل تطبيق ضمن مشروعك.
في لعبتك، يمكنك الحصول على المعرّف الفريد للمستخدم في 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();