Android oyunlarında arkadaşlar

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

Arkadaşları yükle

Geçerli kullanıcıyla arkadaş olan oyuncuların listesini alabilir ve görüntüleyebilirsiniz (oyunda). Kullanıcı olarak, arkadaş listesine hangi oyunların erişeceğini kontrol edebilirsiniz. Arkadaş listesini alırken iznin gerekli olduğu durumları çözmelisiniz. Tüm bunlar, erişim isteğinde bulunma ve ardından arkadaş listesini kullanmayı basit bir görev haline getirmek için API'de bulunur. Arkadaş listesini yüklemek için şu adımları uygulayın:

  1. Task nesnesi döndüren eşzamansız bir çağrı olan PlayersClient.loadFriends() yöntemini çağırın.
  2. Arama başarılı olursa (kullanıcıya arkadaş listesine erişim izni zaten verilmiş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 iletişim kutusu gösterilmiyor.

    1. Bu istisna, oyuncudan izin isteme iletişimini tetikleyen bir Intent içerir. İzin iletişim kutusunu açmak için bu Intent uygulamasını hemen başlatabilirsiniz. Bu Intent öğesini yalnızca bir kez kullanabilirsiniz.
    2. Intent adlı çocuğun etkinliğinin sonucu Activity.RESULT_OK ise izin verildi. Arkadaş listesini döndürmek için loadFriends() adlı kişiyi tekrar arayın. Sonuç Activity.RESULT_CANCELLED olursa kullanıcı izin vermemiştir ve loadFriends(), FriendsResolutionRequiredException değerini döndürmeye devam eder.

Aşağıdaki kod, arkadaş listesinin nasıl yükleneceğini gösterir:

// 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 kod, izin isteği sonucunun nasıl işleneceğini gösterir:

/** 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

Oyununuzun içinden başka bir oyuncunun Play Games profilinin görünümünü görüntüleyebilirsiniz. Bu görünüm, oyuncuların görüntülenen oyuncu için arkadaşlık daveti göndermelerine ve kabul etmelerine olanak tanır. Bu görünümde arkadaş listesine erişim izni gerekli değil. Buna ek olarak, oyununuzun Play Games Oyuncu Kimliklerinden ayrı, kendi oyuncu adı konsepti varsa bunları profil görünümüne aktarabilirsiniz. Böylece, bu adlar daha fazla bilgi için herhangi bir arkadaş davetine dahil edilebilir.

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

  1. Task nesnesi döndüren eşzamansız bir çağrı olan PlayersClient.getCompareProfileIntent() yöntemini çağırın.
  2. Çağrı başarılı olursa Google Play Games Hizmetleri, kullanıcının kendisini başka bir oyuncunun profiliyle karşılaştırabileceği bir ekran görüntüleyen bir Intent döndürür.
  3. Aktivite başlatmak için önceki adımdaki Intent tuşunu 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);
          // ...
        }});

Oyunun oyuncular için kendi adı varsa bunlar API çağrısına eklenebilir. Bu, Play Games'in, oyununuzun içinden arkadaş davetiyesi gönderen oyuncuların takma adlarını "<oyununuzun-adı> adlı oyundan "<oyuna özel-adı>" olarak ayarlamasına olanak tanır. Play Games otomatik olarak "<oyun-adınız>" ifadesini 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);
          // ...
        }});