Friends API'lerini entegre edin (Java)

Java oyun kodunuza Friends API'lerini uygulamak için bu kılavuzdaki adımları kullanın.

Arkadaş yükle

Oyunda geçerli kullanıcıyla arkadaş olan oyuncuların listesini alıp görüntüleyebilirsiniz. Kullanıcı olarak hangi oyunların arkadaş listesine erişimi olduğunu kontrol etmek mümkündür. Arkadaş listesini alırken, iznin gerekli olduğu destek kaydını yönetmeniz gerekir. Tüm bu işlemler, API isteme dahil edilir. Daha sonra erişim isteğinde bulunulması ve ardından arkadaş listesi kullanımı basit bir görev haline gelir. Arkadaş listesini yüklemek için aşağıdaki 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 zaten arkadaş listesine erişim izni verildiyse) Google Play oyun hizmetleri, kullanıcının arkadaşlarını temsil eden ek açıklamalı bir PlayerBuffer uygulaması döndürür.
  3. Oynatıcının arkadaş listesine erişim izni vermesi durumunda, arama bir FriendsResolutionRequiredException ile başarısız olur. Henüz iletişim kutusu gösterilmiyor.

    1. Bu istisna, oyuncudan izin isteme iletişim kutusunu tetikleyen bir Intent içerir. İzin iletişim kutusunu açmak için hemen Intent uygulamasını başlatabilirsiniz. Bu Intent öğesini yalnızca bir kez kullanabilirsiniz.
    2. Intent 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 ise kullanıcı izin vermez ve loadFriends(), FriendsResolutionRequiredException etiketini döndürmeye devam eder.

Aşağıdaki kod, arkadaş listesinin yüklenmesinin nasıl uygulanacağını 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ğinden gelen sonucun nasıl ele alınacağını 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üleyin

Oyun 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 teklifleri göndermelerine ve kabul etmelerine olanak tanır. Bu görünümün arkadaş listesine erişimi gerekmez. Ayrıca, oyununuzun Play Games Oyuncu Kimliklerinden ayrı olarak kendi oyuncu adları konsepti varsa bunları ek bağlam için herhangi bir arkadaşlık davetiyesine dahil edebilmeleri için profil görünümüne aktarabilirsiniz.

Başka bir oyuncunun profilini görmek 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. Arama 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österen bir Amaç döndürür.
  3. Bir etkinlik başlatmak için önceki adımdan Intent 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 ayar, Play Games'in oyununuz içindeki arkadaş davetiyelerini "<oyununuzun-adı> adlı oyundan <oyuna özgü ad>" şeklinde gönderen oyuncuların takma adını belirlemesine olanak sağlar (Play Games otomatik olarak "<oyununuzun-adı>" ifadesinden sonra gelir):

// 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);
          // ...
        }});