يمكنك استخدام خدمات ألعاب Google Play لتسجيل دخول اللاعبين إلى لعبة Android مبنية على Firebase. لاستخدام خدمات ألعاب Google Play، قم بتسجيل الدخول باستخدام Firebase، قم أولاً بتسجيل دخول اللاعب باستخدام Google Play Games، واطلب رمز مصادقة OAuth 2.0 عند القيام بذلك. بعد ذلك، قم بتمرير رمز المصادقة إلى PlayGamesAuthProvider
لإنشاء بيانات اعتماد Firebase، والتي يمكنك استخدامها للمصادقة مع Firebase.
قبل ان تبدأ
قم بإعداد مشروع Android الخاص بك
إذا لم تكن قد قمت بذلك بالفعل، فأضف Firebase إلى مشروع Android الخاص بك .
في ملف Gradle الخاص بالوحدة النمطية (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.kts
أو<project>/<app-module>/build.gradle
)، أضف التبعية لمصادقة Firebase مكتبة لالروبوت. نوصي باستخدام Firebase Android BoM للتحكم في إصدار المكتبة.وأيضًا، كجزء من إعداد مصادقة Firebase، تحتاج إلى إضافة SDK لخدمات Google Play إلى تطبيقك.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.8.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.0.0") }باستخدام Firebase Android BoM ، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase Android.
هل تبحث عن وحدة مكتبة خاصة بـ Kotlin؟ بدءًا من أكتوبر 2023 (Firebase BoM 32.5.0) ، يمكن لمطوري Kotlin وJava الاعتماد على وحدة المكتبة الرئيسية (لمزيد من التفاصيل، راجع الأسئلة الشائعة حول هذه المبادرة ).(بديل) أضف تبعيات مكتبة 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:22.3.1")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.0.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 الخاص بك من القائمة، ثم انقر فوق استخدام .
في صفحة تكوين خدمات ألعاب Play، انقر فوق إضافة بيانات الاعتماد .
- حدد نوع خادم اللعبة .
- في حقل عميل OAuth ، حدد معرف عميل الويب الخاص بمشروعك. تأكد من أن هذا هو نفس معرف العميل الذي حددته عند تمكين تسجيل الدخول إلى ألعاب Play.
- احفظ تغييراتك.
لا تزال في صفحة تكوين خدمات ألعاب Play، انقر فوق "إضافة بيانات الاعتماد" مرة أخرى.
- حدد نوع أندرويد .
- في حقل عميل 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 UID الخاص بالمستخدم من كائن 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 Realtime وقواعد أمان التخزين السحابي، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth
، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.
للحصول على معلومات مشغل ألعاب Play الخاصة بالمستخدم أو للوصول إلى خدمات ألعاب Play، استخدم واجهات برمجة التطبيقات التي توفرها Google Play Games SDK .
لتسجيل خروج مستخدم، اتصل بـ FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();