Android'de Google Play Games Hizmetleri'ni Kullanarak Kimlik Doğrulama

Bir Android oyununda oyuncuların oturum açmasını sağlamak için Google Play Games hizmetlerini kullanabilirsiniz geliştirmenizi sağlar. Google Play Games Hizmetleri'nde Firebase ile oturum açma özelliğini kullanmak için önce oynatıcının Google Play Games'de oturum açmasını sağlayın ve bir OAuth 2.0 kimlik doğrulaması isteyin ekleyebilirsiniz. Ardından, yetkilendirme kodunu PlayGamesAuthProvider numaralı telefona iletin. Firebase ile kimlik doğrulamak için kullanabileceğiniz bir Firebase kimlik bilgisi oluşturun.

Başlamadan önce

Android projenizi oluşturun

  1. Henüz yapmadıysanız Firebase'i Android projenize ekleyin.

  2. Modül (uygulama düzeyinde) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle), Android için Firebase Authentication kitaplığına bağımlılığı ekleyin. Şunu kullanmanızı öneririz: Firebase Android BoM Kitaplık'ta sürüm oluşturmayı kontrol etmek için

    Ayrıca, Firebase Authentication'ı ayarlarken Google Play Hizmetleri SDK'sını uygulamanıza ekleyin.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.2"))
    
        // 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'u kullanarak, Uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanacaktır.

    (Alternatif) BoM'u kullanmadan Firebase kitaplığı bağımlılıklarını ekleyin

    Firebase BoM'yi kullanmamayı tercih ederseniz her Firebase kitaplığı sürümünü belirtmeniz gerekir değerini alır.

    Uygulamanızda birden çok Firebase kitaplığı kullanıyorsanız, kitaplık sürümlerini yönetmek için BoM kullanmanızı öneririz. Böylece, uyumlu olur.

    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.0.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")
    }
    .
    'nı inceleyin. Kotlin'e özel bir kitaplık modülü mü arıyorsunuz? Başlamak için kalan süre: Ekim 2023 (Firebase BoM 32.5.0), hem Kotlin hem de Java geliştiricileri (ayrıntılar için bkz. bu girişimle ilgili SSS).

Firebase projenizi oluşturun

  1. Oyununuzun SHA-1 parmak izini Ayarlar sayfası bölümüne gidin.

    Gradle ile imza sertifikanızın SHA karmasını alabilirsiniz signingReport komutu:

    ./gradlew signingReport

  2. Google Play Games'i oturum açma sağlayıcısı olarak etkinleştirme:

    1. Projenizin web sunucusu istemci kimliğini ve istemci gizli anahtarını bulun. Web sunucu istemci kimliği, Firebase projenizi Google Play'e tanımlar kimlik doğrulama sunucuları için geçerlidir.

      Bu değerleri bulmak için:

      1. Google API'leri konsolu kimlik bilgileri sayfasında Firebase projenizi açın.
      2. OAuth 2.0 istemci kimlikleri bölümünde Web istemcisi (otomatik Google Hizmeti tarafından oluşturulan) ayrıntılar sayfasına gidin. Bu sayfada, web sunucu istemci kimliği ve gizli anahtarı.
    2. Ardından, Firebase konsolunda Kimlik Doğrulama bölümünü açın.

    3. Oturum açma yöntemi sekmesinde Play Games'de oturum açmayı etkinleştirin sağlar. Projenizin web sunucusunu belirtmeniz gerekir Client-ID ve istemci sırrı bilgilerini girin.

Firebase uygulama bilgilerinizle Play Games hizmetlerini yapılandırma

  1. Google Play Console Google Play uygulamanızı açın veya bir tane oluşturun.

  2. Büyüme bölümünde, Play Games hizmetleri > Kurulum ve Yönetim > Yapılandırma.

  3. Evet, oyunumda zaten Google API'leri kullanılıyor'u tıklayın, Firebase'inizi seçin projeyi seçin ve Kullan'ı tıklayın.

  4. Play Games Hizmetleri yapılandırma sayfasında Kimlik Bilgisi Ekle.

    1. Oyun sunucusu türünü seçin.
    2. OAuth istemcisi alanında projenizin web istemcisi kimliğini seçin. Bunun, etkinleştirdiğiniz istemci kimliği ile aynı olduğundan emin olun. Play Games'de oturum açma.
    3. Yaptığınız değişiklikleri kaydedin.
  5. Yine de Play Games Hizmetleri yapılandırma sayfasında Tekrar Kimlik Bilgisi Ekleyin.

    1. Android türünü seçin.
    2. OAuth istemcisi alanında projenizin Android istemci kimliğini seçin. (Android istemci kimliğinizi görmüyorsanız oyununuzun SHA-1 parmak izi bulun.)
    3. Yaptığınız değişiklikleri kaydedin.
  6. Test kullanıcıları sayfasında, teste tabi tutulması gereken tüm kullanıcıların e-posta adreslerini Google Play Geliştirici Konsolu'nda yayınlamadan önce oyununuzda oturum Play Store'a dokunun.

Play Games oturum açma özelliğini oyununuza entegre etme

İlk olarak, Play Games oturum açma özelliğini uygulamanıza entegre edin. Görüntüleyin Android Games'de oturum açma makalesini okuyabilirsiniz.

Entegrasyonunuzda, GoogleSignInOptions nesnesini derlerken şunu kullanın: DEFAULT_GAMES_SIGN_IN yapılandırmasını ve requestServerAuthCode yöntemini çağırın:

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();

Web sunucusu istemci kimliğinizi requestServerAuthCode yöntemine iletmeniz gerekir. Bu, Firebase konsolu.

Firebase ile kimlik doğrulama

Uygulamanıza Play Games oturum açma özelliğini ekledikten sonra, Bir oyuncu başarıyla oturum açtığında elde ettiğiniz Google hesabı kimlik bilgileri oynayabilirsiniz.

  1. İlk olarak, oturum açma etkinliğinizin onCreate yönteminde, FirebaseAuth nesnesinin paylaşılan örneği:

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
  1. Etkinliğinizi başlatırken oynatıcının daha önce oturum açmış olup olmadığını kontrol edin Firebase için:

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.
  1. Bir oyuncu sessiz veya etkileşimli bir şekilde Play Games'de oturum açtıktan sonra GoogleSignInAccount nesnesinden yetkilendirme kodunu al ve Firebase kimlik bilgisi ve Firebase kullanarak Firebase ile kimlik doğrulama kimlik bilgisi:

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 çağrısı başarılı olursa kullanıcının hesap verilerini almak için getCurrentUser yöntemini kullanabilirsiniz.

Sonraki adımlar

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve kendi Play Games kimliklerine bağladıkları hesaptır. Bu yeni hesap, şu bilgilerin bir parçası olarak saklanır: ve Firebase'deki tüm uygulamalarda bir kullanıcıyı tanımlamak için kullanılabilir. belirler.

Oyununuzda, kullanıcının Firebase UID'sini FirebaseUser bölümünden alabilirsiniz. nesne:

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 Database ve Cloud Storage Güvenlik Kurallarınızda şunları alabilirsiniz: oturum açmış kullanıcının auth değişkenindeki benzersiz kullanıcı kimliğini kullanarak Kullanıcının hangi verilere erişebileceğini kontrol etmek

Kullanıcının Play Games oyuncu bilgilerini almak veya Play Games hizmetlerine erişmek için: Google Play Games SDK'sı tarafından sağlanan API'leri kullanmalıdır.

Bir kullanıcının oturumunu kapatmak için FirebaseAuth.signOut() numaralı telefonu arayın:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();