شما میتوانید از سرویسهای بازیهای گوگل پلی برای ورود بازیکنان به یک بازی اندروید ساخته شده در فایربیس استفاده کنید. برای استفاده از ورود به سیستم سرویسهای بازیهای گوگل پلی با فایربیس، ابتدا بازیکن را با گوگل پلی گیمز وارد سیستم کنید و هنگام انجام این کار، کد احراز هویت OAuth 2.0 را درخواست کنید. سپس، کد احراز هویت را به PlayGamesAuthProvider ارسال کنید تا یک اعتبارنامه فایربیس ایجاد شود که میتوانید از آن برای احراز هویت با فایربیس استفاده کنید.
قبل از اینکه شروع کنی
پروژه اندروید خود را تنظیم کنید
اگر هنوز Firebase را به پروژه اندروید خود اضافه نکردهاید، آن را اضافه کنید.
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle)، وابستگی مربوط به کتابخانه Firebase Authentication برای اندروید را اضافه کنید. توصیه میکنیم برای کنترل نسخهبندی کتابخانه Firebase Android BoM استفاده کنید.همچنین، به عنوان بخشی از راهاندازی Firebase Authentication ، باید SDK سرویسهای گوگل پلی را به برنامه خود اضافه کنید.
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 استفاده خواهد کرد.
(جایگزین) اضافه کردن وابستگیهای کتابخانه 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
فعال کردن بازیهای گوگل پلی به عنوان ارائهدهندهی ورود:
شناسه کلاینت وب سرور و رمز کلاینت پروژه خود را پیدا کنید. شناسه کلاینت وب سرور، پروژه Firebase شما را به سرورهای احراز هویت گوگل پلی معرفی میکند.
برای یافتن این مقادیر:
- پروژه Firebase خود را در صفحه اعتبارنامههای کنسول APIهای گوگل باز کنید.
- در بخش شناسههای کلاینت OAuth 2.0 ، صفحه جزئیات کلاینت وب (که به طور خودکار توسط سرویس گوگل ایجاد شده است) را باز کنید. این صفحه، شناسه و رمز کلاینت سرور وب شما را فهرست میکند.
سپس، در کنسول Firebase ، بخش Authentication (احراز هویت) را باز کنید.
در تب روش ورود ، ارائهدهنده ورود به سیستم Play Games را فعال کنید. شما باید شناسه کلاینت وب سرور و رمز کلاینت پروژه خود را که از کنسول APIها دریافت کردهاید، مشخص کنید.
Play Games services با اطلاعات برنامه Firebase خود پیکربندی کنید
در کنسول Google Play ، برنامه Google Play خود را باز کنید یا یکی ایجاد کنید.
در بخش «رشد» ، Play Games services > راهاندازی و مدیریت > پیکربندی کلیک کنید.
روی «بله، بازی من از قبل از APIهای گوگل استفاده میکند» کلیک کنید، پروژه Firebase خود را از لیست انتخاب کنید و سپس روی «استفاده» کلیک کنید.
در صفحه پیکربندی Play Games services ، روی «افزودن اعتبارنامه» کلیک کنید.
- نوع سرور بازی را انتخاب کنید.
- در فیلد کلاینت OAuth ، شناسه کلاینت وب پروژه خود را انتخاب کنید. مطمئن شوید که این همان شناسه کلاینتی است که هنگام فعال کردن ورود به سیستم Play Games مشخص کردهاید.
- تغییرات خود را ذخیره کنید.
همچنان در صفحه پیکربندی Play Games services هستید، دوباره روی Add Credential کلیک کنید.
- نوع اندروید را انتخاب کنید.
- در فیلد OAuth client ، شناسه کلاینت اندروید پروژه خود را انتخاب کنید. (اگر شناسه کلاینت اندروید خود را نمیبینید، مطمئن شوید که اثر انگشت SHA-1 بازی خود را در کنسول Firebase تنظیم کردهاید.)
- تغییرات خود را ذخیره کنید.
در صفحه آزمایشکنندگان ، آدرسهای ایمیل هر کاربری را که باید قبل از انتشار بازی در Play Store بتوانند به سیستم وارد شوند، اضافه کنید.
ورود به سیستم Play Games را در بازی خود ادغام کنید
ابتدا، ورود به سیستم Play Games را در برنامه خود ادغام کنید. برای دستورالعملهای کامل ، به ورود به سیستم Android Games مراجعه کنید.
در یکپارچهسازی خود، هنگام ساخت شیء 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 Games در کنسول Firebase ارائه کردهاید.
احراز هویت با فایربیس
بعد از اینکه ورود به سیستم Play Games را به برنامه خود اضافه کردید، باید Firebase را طوری تنظیم کنید که از اعتبارنامههای حساب گوگل که هنگام ورود موفقیتآمیز یک بازیکن به Play Games دریافت میکنید، استفاده کند.
- ابتدا، در متد
onCreateمربوط به فعالیت ورود به سیستم، نمونه مشترک شیءFirebaseAuthرا دریافت کنید:
Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- هنگام مقداردهی اولیه Activity، بررسی کنید که آیا بازیکن قبلاً با 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 Games وارد سیستم شد، کد احراز هویت را از شیء
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 شما ذخیره میشود و میتواند برای شناسایی کاربر در هر برنامه در پروژه شما استفاده شود.
در بازی خود، میتوانید شناسه کاربری 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، میتوانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر auth دریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد، استفاده کنید.
برای دریافت اطلاعات بازیکن Play Games کاربر یا دسترسی به سرویسهای Play Games، از APIهای ارائه شده توسط Google Play Games SDK استفاده کنید.
برای خروج کاربر، FirebaseAuth.signOut() را فراخوانی کنید:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();