میتوانید از خدمات بازیهای Google Play برای ورود بازیکنان به یک بازی Android ساختهشده در Firebase استفاده کنید. برای استفاده از ورود به سیستم سرویسهای بازیهای Google Play با Firebase، ابتدا بازیکن را با بازیهای Google Play وارد کنید و در صورت انجام این کار، کد تأیید OAuth 2.0 را درخواست کنید. سپس، کد احراز هویت را به PlayGamesAuthProvider
ارسال کنید تا یک اعتبار Firebase ایجاد کند، که می توانید از آن برای احراز هویت با Firebase استفاده کنید.
قبل از شروع
پروژه اندروید خود را راه اندازی کنید
اگر قبلاً این کار را نکردهاید، Firebase را به پروژه Android خود اضافه کنید .
در فایل Gradle ماژول (سطح برنامه) خود (معمولا
<project>/<app-module>/build.gradle.kts
یا<project>/<app-module>/build.gradle
)، وابستگی را برای Firebase Authentication اضافه کنید. کتابخانه برای اندروید توصیه میکنیم از Firebase Android BoM برای کنترل نسخهسازی کتابخانه استفاده کنید.همچنین، به عنوان بخشی از راهاندازی Firebase Authentication ، باید SDK خدمات Google Play را به برنامه خود اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.5.1")) // 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.2.0") }با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخههای سازگار کتابخانههای Firebase Android استفاده میکند.
به دنبال یک ماژول کتابخانه خاص کاتلین هستید؟ از اکتبر 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:23.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }
پروژه Firebase خود را راه اندازی کنید
اثر انگشت SHA-1 بازی خود را از صفحه تنظیمات کنسول Firebase تنظیم کنید.
می توانید هش SHA گواهی امضای خود را با دستور gradle
signingReport
دریافت کنید:./gradlew signingReport
فعال کردن بازیهای Google Play به عنوان ارائهدهنده ورود به سیستم:
شناسه سرویس گیرنده وب سرور و رمز سرویس گیرنده پروژه خود را پیدا کنید. شناسه سرویس گیرنده وب سرور، پروژه Firebase شما را در سرورهای تأیید اعتبار Google Play شناسایی می کند.
برای پیدا کردن این مقادیر:
- پروژه Firebase خود را در صفحه اطلاعات کاربری کنسول Google APIs باز کنید.
- در بخش شناسههای مشتری OAuth 2.0 ، صفحه جزئیات کلاینت وب (ایجاد خودکار توسط Google Service) را باز کنید. این صفحه شناسه سرویس گیرنده وب سرور و راز شما را فهرست می کند.
سپس، در کنسول Firebase ، بخش Authentication را باز کنید.
در برگه روش ورود به سیستم ، ارائهدهنده ورود به بازیهای Play را فعال کنید. شما باید شناسه سرویس گیرنده وب سرور پروژه خود و رمز سرویس گیرنده را که از کنسول API دریافت کرده اید، مشخص کنید.
Play Games services با اطلاعات برنامه Firebase خود پیکربندی کنید
در کنسول Google Play ، برنامه Google Play خود را باز کنید یا یکی ایجاد کنید.
در بخش رشد ، روی Play Games services > راهاندازی و مدیریت > پیکربندی کلیک کنید.
روی بله، بازی من قبلاً از Google API استفاده میکند ، پروژه Firebase خود را از لیست انتخاب کنید و سپس روی استفاده کلیک کنید.
در صفحه پیکربندی Play Games services ، روی افزودن اعتبارنامه کلیک کنید.
- نوع سرور بازی را انتخاب کنید.
- در قسمت سرویس گیرنده OAuth ، شناسه مشتری وب پروژه خود را انتخاب کنید. مطمئن شوید که این همان شناسه مشتری است که هنگام فعال کردن ورود به Play Games مشخص کردهاید.
- تغییرات خود را ذخیره کنید
هنوز در صفحه پیکربندی Play Games services ، دوباره روی افزودن اعتبارنامه کلیک کنید.
- نوع اندروید را انتخاب کنید.
- در قسمت سرویس گیرنده OAuth ، شناسه مشتری Android پروژه خود را انتخاب کنید. (اگر ID کلاینت اندروید خود را نمی بینید، مطمئن شوید که اثر انگشت SHA-1 بازی خود را در کنسول Firebase تنظیم کرده اید.)
- تغییرات خود را ذخیره کنید
در صفحه آزمایشکنندگان ، آدرسهای ایمیل کاربرانی را که نیاز دارند قبل از انتشار بازی شما در Play Store بتوانند به سیستم وارد شوند، اضافه کنید.
ورود به سیستم بازیهای Play را در بازی خود ادغام کنید
ابتدا، ورود به سیستم Play Games را در برنامه خود ادغام کنید. برای دستورالعملهای کامل به ورود به بازیهای Android مراجعه کنید.
در ادغام خود، هنگامی که شیء GoogleSignInOptions
را میسازید، از پیکربندی DEFAULT_GAMES_SIGN_IN
استفاده کنید و requestServerAuthCode
را فراخوانی کنید:
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build()
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
را دریافت کنید:
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- هنگام تنظیم اولیه Activity خود، بررسی کنید که آیا بازیکن قبلاً با Firebase وارد شده است یا خیر:
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
@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 احراز هویت کنید:
// 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) } // ... } }
// 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
دریافت کنید:
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 }
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»، از APIهای ارائهشده توسط Google Play Games SDK استفاده کنید.
برای خروج از سیستم کاربر، FirebaseAuth.signOut()
را فراخوانی کنید:
Firebase.auth.signOut()
FirebaseAuth.getInstance().signOut();