يمكنك استخدام خدمات ألعاب 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. ننصح باستخدام بنود سياسة Android في Firebase للتحكّم في نُسَخ المكتبة.وكجزء من إعداد مصادقة Firebase أيضًا، يلزمك إضافة حزمة SDK لخدمات Google Play إلى تطبيقك.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.2")) // 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 في Firebase، سيستخدم تطبيقك دائمًا الإصدارات المتوافقة من مكتبات 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
Gradle:./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 من القائمة، ثم انقر على استخدام.
في صفحة ضبط "خدمات ألعاب 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();