Android oyunlarında arkadaşlar

Bu kılavuzda, Android Studio projelerinde Arkadaşlar API'lerinin nasıl kullanılacağı açıklanmaktadır.

Arkadaşları yükleme

Geçerli kullanıcının arkadaşı olan oyuncuların listesini alıp (oyunda) görüntüleyebilirsiniz. Kullanıcı olarak, hangi oyunların arkadaş listesine erişebileceğini kontrol edebilirsiniz. Arkadaş listesini aldığınızda izin gerektiren durumu ele almanız gerekir. Bu işlemlerin tümü, erişim isteğinde bulunmayı ve ardından arkadaş listesini kullanmayı kolay bir görev haline getirmek için API'de kapsüllenmiştir. Arkadaş listesini yüklemek için aşağıdaki adımları uygulayın:

  1. PlayersClient.loadFriends() yöntemini çağırın. Bu yöntem, Task nesnesi döndüren eşzamansız bir çağrıdır.
  2. Arama başarılı olursa (kullanıcı, arkadaş listesine erişim izni vermişse) Google Play Games Hizmetleri, kullanıcının arkadaşlarını temsil eden ek açıklamalı bir PlayerBuffer döndürür.
  3. Oyuncunun arkadaş listesine erişim izni vermesi gerekiyorsa çağrı, FriendsResolutionRequiredException ile başarısız olur. Henüz herhangi bir iletişim kutusu gösterilmedi.

    1. Bu istisna, oynatıcıdan izin isteyen bir iletişim kutusunu tetikleyen bir Intent içerir. İzin iletişim kutusu açmak için bu Intent işlevini hemen başlatabilirsiniz. Bu Intent yalnızca bir kez kullanılabilir.
    2. Intent etkinliğinin sonucu Activity.RESULT_OK ise izin verilmiştir. Arkadaş listesini döndürmek için loadFriends() işlevini tekrar çağırın. Sonuç Activity.RESULT_CANCELLED ise kullanıcı izin vermemiştir ve loadFriends() döndürülmeye devam eder FriendsResolutionRequiredException.

Aşağıdaki kodda arkadaş listesinin nasıl yükleneceği gösterilmektedir:

// Attempt loading friends.
// Register a success listener to handle the successfully loaded friends list.
// Register a failure listener to handle asking for permission to access the list.
PlayGames.getPlayersClient(this)
    .loadFriends(PAGE_SIZE, /* forceReload= */ false)
    .addOnSuccessListener(
        new OnSuccessListener<AnnotatedData<PlayerBuffer>>() {
            @Override
            public void onSuccess(AnnotatedData<PlayerBuffer>  data) {
          PlayerBuffer playerBuffer = data.get();
          // ...
        })

    .addOnFailureListener(
        exception -> {
      if (exception instanceof FriendsResolutionRequiredException) {
        PendingIntent pendingIntent =
            ((FriendsResolutionRequiredException) task.getException())
            .getResolution();
        parentActivity.startIntentSenderForResult(
            pendingIntent.getIntentSender(),
            /* requestCode */ SHOW_SHARING_FRIENDS_CONSENT,
            /* fillInIntent */ null,
            /* flagsMask */ 0,
            /* flagsValues */ 0,
            /* extraFlags */ 0,
            /* options */ null);
     }
   });
 return;
}

Aşağıdaki kodda, izin isteğinden elde edilen sonucun nasıl işleneceği gösterilmektedir:

/** Handle the activity result from the request for consent. */
@Override
public void onActivityResult(int requestCode, int result, Intent data) {
  if (requestCode == SHOW_SHARING_FRIENDS_CONSENT) {
    if (result == Activity.RESULT_OK) {
      // We got consent from the user to access their friends. Retry loading the friends
      callLoadFriends();
    } else {
      // User did not grant consent.
    }
  }
}

Başka bir oyuncunun profilini görüntüleme

Oyununuzda başka bir oyuncunun Play Games profilini görüntüleyebilirsiniz. Bu görünüm, oyuncuların görüntülenen oyuncu için arkadaş daveti göndermesine ve kabul etmesine olanak tanır. Bu görünüm için arkadaş listesine erişim gerekmez. Ayrıca, oyununuzda Play Games Oyuncu Kimliklerinden ayrı bir oyuncu adı kavramı varsa bunları profil görünümüne iletebilirsiniz. Böylece, ek bağlam için arkadaş davetlerine dahil edilebilirler.

Başka bir oyuncunun profilini göstermek için şu adımları uygulayın:

  1. PlayersClient.getCompareProfileIntent() yöntemini çağırın. Bu yöntem, Task nesnesi döndüren eşzamansız bir çağrıdır.
  2. Çağrı başarılı olursa Google Play Oyun Hizmetleri, kullanıcının kendisini başka bir oyuncunun profiliyle karşılaştırabileceği bir ekranı gösterecek bir Amaç döndürür.
  3. Etkinlik başlatmak için önceki adımdaki Intent simgesini kullanın.
// Retrieve and launch an Intent to show a player profile within the game.
PlayGames.getPlayersClient(this)
    .getCompareProfileIntent(otherPlayerId)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});

Oyuncular için oyunun kendi adı varsa bu adlar API çağrısına eklenebilir. Bu sayede Play Games, oyununuzdan arkadaşlık daveti gönderen oyuncuların takma adını "<your-game-name> oyunundan <game-specific-name>" olarak ayarlayabilir. Play Games, "from <your-game-name>" ifadesini otomatik olarak ekler:

// Show a player profile within the game, with additional hints containing the
// game-specific names for both players.
// - otherPlayerId is the Play Games playerId of the player to view.
// - otherPlayerInGameName is the game-specific name of the player being viewed.
// - currentPlayerInGameName is the game-specific name of the player who is signed
//   in. Hence if the player sends an invitation to the profile they are viewing,
//   their game-specific name can be included.
PlayGames.PlayersClient(this)
    .getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});