يمكنك استخدام "خدمات ألعاب Google Play" لتسجيل دخول اللاعبين إلى إحدى ألعاب Android
المستندة إلى Firebase. لاستخدام خدمة "تسجيل الدخول باستخدام حساب Firebase" في "خدمات ألعاب Google Play"، عليك أولاً تسجيل دخول اللاعب باستخدام "خدمات ألعاب 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.9.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.5.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:24.0.1")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.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" في لعبتك
أولاً، ادمج ميزة تسجيل الدخول إلى "ألعاب Google 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();