يمكنك استخدام خدمات ألعاب Google Play لتسجيل دخول اللاعبين إلى لعبة Android مبنية على Firebase. لاستخدام خدمات ألعاب Google Play ، قم بتسجيل الدخول باستخدام Firebase ، قم أولاً بتسجيل دخول اللاعب باستخدام ألعاب Google Play ، واطلب رمز مصادقة OAuth 2.0 عند القيام بذلك. بعد ذلك ، قم بتمرير رمز المصادقة إلى PlayGamesAuthProvider
لإنشاء بيانات اعتماد Firebase ، والتي يمكنك استخدامها للمصادقة مع Firebase.
قبل ان تبدأ
قم بإعداد مشروع Android الخاص بك
أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل.
في ملف Gradle (على مستوى التطبيق) للوحدة النمطية (عادةً ما يكون
<project>/<app-module>/build.gradle
) ، أضف تبعية مكتبة Firebase Authentication Android. نوصي باستخدام Firebase Android BoM للتحكم في إصدارات المكتبة.أيضًا ، كجزء من إعداد مصادقة Firebase ، تحتاج إلى إضافة SDK لخدمات Google Play إلى تطبيقك.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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-ktx'
// Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1' }باستخدام 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-ktx:21.1.0'
// Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1' }Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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:20.4.1' }باستخدام 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:21.1.0'
// Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.4.1' }
قم بإعداد مشروع 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 الخاص بك من القائمة ، ثم انقر فوق استخدام .
في صفحة تكوين خدمات ألعاب 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 Games إما بصمت أو بشكل تفاعلي ، احصل على رمز المصادقة من كائن
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 UID من كائن FirebaseUser
:
Kotlin+KTX
val user = auth.currentUser user?.let { val playerName = user.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 = user.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 وقواعد أمان التخزين السحابي ، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth
، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.
للحصول على معلومات لاعب Play Games الخاص بالمستخدم أو للوصول إلى خدمات ألعاب Play ، استخدم واجهات برمجة التطبيقات التي توفرها Google Play Games SDK .
لتسجيل خروج مستخدم ، اتصل بـ FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();