Android oyunlarında oturum açma

Google Play Oyun Hizmetleri işlevlerine erişmek için oyununuzun, oturum açmış oyuncunun hesabını sağlaması gerekir. Bu dokümanlarda, oyununuzda sorunsuz bir oturum açma deneyimini nasıl uygulayabileceğiniz açıklanmaktadır.

Play Games Hizmetleri v2 SDK'sı, oyununuzda oturum açan kullanıcıların sayısını artıran ve geliştirme sürecini kolaylaştıran birçok iyileştirme sunar:

  • Kullanıcılar için iyileştirmeler:
    • Varsayılan hesabı seçtikten sonra kullanıcılar bir istemle etkileşimde bulunmalarına gerek kalmadan giriş yaparlar.
    • Kullanıcıların artık Play Games Hizmetleri'nde oturum açmak veya yeni bir hesap oluşturmak için Play Games uygulamasını indirmeleri gerekmez.
    • Kullanıcılar artık Play Oyun Hizmetleri hesaplarını tek bir sayfadan birden fazla oyun için yönetebilir.
  • Geliştiriciler için iyileştirmeler:
    • Oyun başladığında giriş otomatik olarak tetiklendiğinden ve hesap yönetimi OS ayarlarından işlendiğinden, artık oturum açma veya oturum kapatma akışını istemci kodunun işlemesi gerekmez.

Yeni müşteri entegrasyonu

Bu bölümde, Play Games Hizmetleri'nde Oturum Açma v2 ile yeni bir istemci entegrasyonunun nasıl yapılacağı gösterilmektedir.

Bağımlılığı ekleme

Play Game Services SDK bağımlılığını uygulamanızın kök düzeyindeki build.gradle dosyasına ekleyin. Gradle kullanıyorsanız bağımlılığı aşağıdaki şekilde ekleyebilir veya güncelleyebilirsiniz:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Proje kimliğini tanımlama

Play Games Hizmetleri SDK'sının proje kimliğini uygulamanıza eklemek için aşağıdaki adımları tamamlayın:

  1. Uygulamanızın AndroidManifest.xml dosyasına aşağıdaki <meta-data> öğesini ve özelliklerini <application> öğesine ekleyin:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Oyunlarınızın Oyun hizmetleri proje kimliğini değer olarak kullanarak @string/game_services_project_id Dize kaynak referansını tanımlayın. Oyun hizmetleri proje kimliğinizi Google Play Console'daki Yapılandırma sayfasındaki oyun adınızın altında bulabilirsiniz.

  2. res/values/strings.xml dosyanıza bir dize kaynağı referansı ekleyin ve değer olarak proje kimliğinizi ayarlayın. Proje kimliğinizi Google Play Console'daki Yapılandırma sayfasındaki oyun adınızın altında bulabilirsiniz. Örneğin:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game’s project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

SDK'yı başlatma

Application sınıfınızın onCreate(..) geri çağırmasında Play Games SDK'sını başlatın.

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Oturum açma sonucunu alma

Oyununuz başlatıldığında her zaman kullanıcının oturumunu açmaya çalışır. Kullanıcının kimliğini doğrulamak için kullanıcının başarıyla oturum açtığını doğrulamanız ve ardından Oynatıcı Kimliğini almanız gerekir.

Oturum açma girişimini doğrulamak için GamesSignInClient.isAuthenticated() numaralı telefonu arayın ve sonuçları almak için addOnCompleteListener kodunu kullanın. Örneğin:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Disable your integration with Play Games Services or show a
    // login button to ask  players to sign-in. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

Kullanıcı, oyun başlatıldığında oturum açmamayı seçerse isteğe bağlı olarak Play Games simgesiyle bir düğme göstermeye devam edebilir ve kullanıcı düğmeye bastığında GamesSignInClient.signIn() işlevini çağırarak kullanıcının oturumunu tekrar açmayı deneyebilirsiniz.

Kullanıcının oturum açtığını doğruladıktan sonra, kullanıcıyı tanımlamak için Oynatıcı Kimliği'ni alabilirsiniz. Örneğin:

PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
    // Get PlayerID with mTask.getResult().getPlayerId()
  }
);
konusunu ziyaret edin.

Play Games Hizmetleri ile Oturum Açma v2'ye geçin

Bu bölümde istemci kodunuzu Play Games Hizmetleri v1'den v2'ye nasıl taşıyacağınız açıklanmaktadır.

Yeni SDK, oturum açma başarısını artıracak dört önemli değişiklik içeriyor. Bu değişikliklere dikkat etmeniz gerekir:

  1. Oturum açma, oyununuz başlatıldığında otomatik olarak tetiklenir. Oturum açmak için GoogleSignIn SDK'sının GoogleSignInClient kodunu kullanmak yerine, otomatik oturum açma denemesinin sonucunu getirmek için GamesSignInClient.isAuthenticated() kullanabilirsiniz.
  2. İstemci Fabrika sınıfları için artık bir GoogleSignInAccount nesnesinin geçirilmesi gerekmeyecek. Ek OAuth kapsamları istenemez (GAMES_LITE otomatik olarak istenir).
  3. Kimlik doğrulama jetonları artık Play Games Hizmetleri SDK'sında GamesSignInClient.requestServerSideAccess() kullanılarak sağlanıyor.
  4. Oturumu kapatma yöntemi kaldırıldı. Artık Play Games Hizmetleri'nde oturum açmak veya oturumu kapatmak için bir oyun içi düğme gerekmeyecek.

Ayrıca, oyun başladığında otomatik oturum açma nedeniyle oyununuza ek girişler de yapılacak. Bu nedenle, oyununuzun giriş isteği kotasını aşmadığından emin olmak için kota yönetiminizi gözden geçirmeniz gerekir.

Yeni SDK Maven deposunu hedefleyin

Gradle derleme sistemini kullanıyorsanız bu işlemi, modülünüzün build.gradle dosyasında bağımlılığınızı com.google.android.gms:play-services-games-v2:+ yapısıyla değiştirerek yapabilirsiniz. Örneğin:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

SDK'yı başlatma

Application sınıfınızın onCreate(..) geri çağırmasında Play Games SDK'sını başlatın. Örneğin:

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Oturum açma ve oturum kapatma çağrılarını kaldırma

Ekstra kapsam belirtmezseniz kullanım alanınızı taşımak kolay olacaktır.

  1. GoogleSignIn API'yi kullanarak oturum açma çağrılarını kaldırın. Oturum açma her zaman oyun lansmanında yapılır. Bunun yerine, GamesSignInClient.isAuthenticated() kullanarak otomatik oturum açma denemesinin sonucunu dinleyin.

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. Hesap yönetimi artık OS ve Play Games uygulaması ayarlarında bulunduğundan tüm oturumu kapatma çağrılarını kaldırın.

  3. Oyuncunun oturumu başarıyla açıksa Play Games oturum açma düğmesini oyununuzdan kaldırın. Kullanıcı, oyun başladığında oturum açmamayı seçerse isteğe bağlı olarak Play Games simgesiyle bir düğme göstermeye devam edebilir ve giriş işlemini GamesSignInClient.signIn() ile tetikleyebilirsiniz.

  4. Kullanıcının oturum açtığını doğruladıktan sonra, kullanıcıyı tanımlamak için oyuncu kimliğini alabilirsiniz.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
    konusunu ziyaret edin.
  5. Artık kullanılmıyorsa GoogleSignIn API'ye olan bağımlılığınızı kaldırın.

İstemci sınıf adlarını güncelleme

İstemci oluştururken (ör. LeaderboardsClient veya AchievementsClient) Games.getFooClient() yerine PlayGames.getFooClient() kullanın.

Sunucu tarafı erişim iste

Sunucu tarafı erişim isteğinde bulunurken GoogleSignInAccount.getServerAuthCode() yerine GamesSignInClient.requestServerSideAccess() kullanın.

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Ekstra kapsamları kaldırma

Play Games Hizmetleri v2 ile ek kapsam isteğinde bulunamazsınız. Yine de ek kapsam istemeniz gerekiyorsa Play Games Hizmetleri'yle birlikte Google ile Oturum Açma SDK'sını kullanmanızı öneririz.

GoogleApiClient'ten taşıma

Mevcut daha eski entegrasyonlar için oyununuz, Play Games Hizmetleri SDK'sının GoogleApiClient API varyasyonuna bağlı olabilir. Bu hizmet 2017'nin sonlarında kullanımdan kaldırıldı ve yerini "bağlantısız" istemciler aldı. Taşıma işlemi için GoogleApiClient sınıfını "bağlantısız" bir eşdeğeriyle değiştirebilirsiniz. Ardından, oyununuzu v1'den v2'ye taşırken yukarıdaki yönergeleri de uygulamanız gerekir. Aşağıda yaygın sınıfların haritasını görebilirsiniz:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes