يمكنك استخدام "خدمات ألعاب 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 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:34.0.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:21.4.0") }باستخدام Firebase Android BoM، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase Android.
(بديل) أضِف تبعيات مكتبة Firebase بدون استخدام BoM
إذا اخترت عدم استخدام Firebase BoM، عليك تحديد إصدار كل مكتبة من مكتبات Firebase في سطر التبعية الخاص بها.
يُرجى العِلم أنّه في حال استخدام مكتبات Firebase BoMمتعدّدة في تطبيقك، ننصحك بشدة باستخدام 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:24.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.4.0") }
إعداد مشروعك على Firebase
اضبط الملف المرجعي SHA-1 للعبتك من صفحة الإعدادات في وحدة تحكّم Firebase.
يمكنك الحصول على قيمة التجزئة SHA لشهادة التوقيع باستخدام الأمر gradle
signingReport
:./gradlew signingReport
تفعيل "ألعاب Google Play" كموفّر لتسجيل الدخول:
ابحث عن معرّف العميل وسر العميل لخادم الويب الخاص بمشروعك. يحدّد معرّف العميل الخاص بخادم الويب مشروعك على Firebase لخوادم المصادقة في Google Play.
للعثور على هذه القيم، اتّبِع الخطوات التالية:
- افتح مشروعك على Firebase في صفحة بيانات الاعتماد في وحدة تحكّم Google APIs.
- في قسم معرّفات عميل OAuth 2.0، افتح صفحة تفاصيل عميل الويب (الذي أنشأته خدمة Google تلقائيًا). تعرض هذه الصفحة معرّف العميل والرمز السري لخادم الويب.
بعد ذلك، في وحدة تحكّم Firebase، افتح قسم المصادقة.
في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر خدمة تسجيل الدخول ألعاب Play. عليك تحديد معرّف العميل والرمز السري للعميل الخاصين بخادم الويب في مشروعك، واللذين حصلت عليهما من "وحدة تحكّم واجهات برمجة التطبيقات".
ضبط Play Games services باستخدام معلومات تطبيقك على Firebase
في Google Play Console، افتح تطبيق Google Play أو أنشئ تطبيقًا.
في قسم النمو، انقر على Play Games services > الإعداد والإدارة > الإعدادات.
انقر على نعم، لعبتي تستخدم Google APIs، واختَر مشروعك على Firebase من القائمة، ثم انقر على استخدام.
في صفحة إعدادات Play Games services، انقر على إضافة بيانات اعتماد.
- اختَر نوع خادم اللعبة.
- في الحقل عميل OAuth، اختَر معرّف عميل الويب الخاص بمشروعك. تأكَّد من أنّ معرّف العميل هذا هو نفسه الذي حدّدته عند تفعيل ميزة Play Games تسجيل الدخول.
- احفظ التغييرات.
في صفحة إعدادات Play Games services، انقر على إضافة بيانات اعتماد مرة أخرى.
- اختَر نوع Android.
- في الحقل عميل OAuth، اختَر معرّف عميل Android الخاص بمشروعك. (إذا لم يظهر لك معرّف عميل Android، تأكَّد من ضبط بصمة SHA-1 للعبتك في وحدة تحكّم Firebase).
- احفظ التغييرات.
في صفحة المختبِرون، أضِف عناوين البريد الإلكتروني لأي مستخدمين يحتاجون إلى تسجيل الدخول إلى لعبتك قبل طرحها على Play Store.
دمج ميزة "تسجيل الدخول إلى ألعاب Play" في لعبتك
أولاً، عليك دمج ميزة تسجيل الدخول في "ألعاب Play" مع تطبيقك. يمكنك الاطّلاع على مقالة تسجيل الدخول إلى ألعاب Android للحصول على تعليمات كاملة.
في عملية الدمج، عند إنشاء العنصر GoogleSignInOptions
، استخدِم إعدادات DEFAULT_GAMES_SIGN_IN
واستدعِ requestServerAuthCode
:
Kotlin
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 console.
المصادقة باستخدام Firebase
بعد إضافة ميزة تسجيل الدخول إلى "ألعاب Play" في تطبيقك، عليك إعداد Firebase لاستخدام بيانات اعتماد حساب Google التي تحصل عليها عندما يسجّل أحد اللاعبين الدخول بنجاح باستخدام "ألعاب Play".
- أولاً، في طريقة
onCreate
تسجيل الدخول، احصل على نسخة مشتركة من عنصرFirebaseAuth
:
Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- عند بدء النشاط، تحقَّق مما إذا كان اللاعب قد سجّل الدخول باستخدام Firebase:
Kotlin
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
// 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، ويمكن استخدامه لتحديد هوية مستخدم في كل تطبيق ضمن مشروعك.
في لعبتك، يمكنك الحصول على معرّف UID الخاص بالمستخدم على Firebase من الكائن FirebaseUser
:
Kotlin
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 Realtime Database وCloud Storage، يمكنك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغيّر auth
، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.
للحصول على معلومات عن لاعب في "ألعاب Play" أو للوصول إلى خدمات "ألعاب Play"، استخدِم واجهات برمجة التطبيقات التي توفّرها حزمة تطوير البرامج (SDK) الخاصة بألعاب Google Play.
لتسجيل خروج مستخدم، اتّبِع الخطوات التالية:FirebaseAuth.signOut()
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();