میتوانید از سرویسهای «بازیهای Google Play» برای ورود به سیستم بازیکنان در بازی Android
ساختهشده در Firebase استفاده کنید. برای استفاده از ورود به سیستم «سرویسهای بازیهای Google Play» با Firebase،
ابتدا بازیکن را با «سرویسهای بازیهای 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، باید کیت توسعه نرمافزار خدمات Google Play را به برنامهتان اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.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:22.0.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:25.0.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:22.0.0") }
راهاندازی پروژه Firebase
در کنسول Firebase، به امنیت > اصالتسنجی بروید.
در برگه تنظیمات، اثر انگشت SHA-1 بازیتان را تنظیم کنید.
میتوانید مقدار درهمسازی SHA گواهینامه امضایتان را با فرمان gradle
signingReportدریافت کنید:./gradlew signingReport
«بازیهای Google Play» را بهعنوان ارائهدهنده ورود به سیستم فعال کنید:
شناسه کارخواه و رمز کارخواه سرور وب پروژهتان را پیدا کنید. شناسه کارخواه سرور وب پروژه Firebase شما را به سرورهای احراز هویت Google Play معرفی میکند.
برای پیدا کردن این مقادیر:
- پروژه Firebase خود را در صفحه Google APIs console گواهینامهها باز کنید.
- در بخش شناسههای کارخواه 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» در بازی
ابتدا، ورود به سیستم «بازیهای 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 کنسول ارائه کردید.
اصالتسنجی با 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); }
اگر بازیکن به سیستم وارد نشده است، تجربه خارج شدن از سیستم بازیتان را به بازیکن ارائه دهید، ازجمله گزینه ورود به سیستم.
پساز اینکه بازیکنی بهصورت تعاملی یا بیصدا با «بازیهای 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»، از میاناهای برنامهسازی کاربردی ارائهشده توسط کیت توسعه نرمافزار «بازیهای Google Play» استفاده کنید.
برای خروج کاربر از سیستم، FirebaseAuth.signOut() را فراخوانی کنید:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();