Mengintegrasikan Friends API (Java)

Gunakan langkah-langkah dalam panduan ini untuk menerapkan Friends API dalam kode game Java Anda.

Memuat teman

Anda dapat mengambil dan menampilkan (dalam game) daftar pemain yang berteman dengan pengguna saat ini. Sebagai pengguna, Anda dapat mengontrol game yang memiliki akses ke daftar teman. Saat mengambil daftar teman, Anda harus menangani kasus yang memerlukan izin. Semua ini dienkapsulasi dalam API untuk membuat permintaan akses, lalu menggunakan daftar teman sebagai tugas yang mudah. Untuk memuat daftar teman, ikuti langkah-langkah berikut:

  1. Panggil metode PlayersClient.loadFriends(), yang merupakan panggilan asinkron yang menampilkan objek Task.
  2. Jika panggilan berhasil (pengguna sudah memberikan akses ke daftar teman), Layanan game Google Play akan menampilkan PlayerBuffer yang dianotasi dan mewakili teman pengguna.
  3. Jika pemain perlu memberikan akses ke daftar teman, panggilan akan gagal dengan FriendsResolutionRequiredException. Belum ada dialog yang ditampilkan.

    1. Pengecualian ini berisi Intent yang memicu dialog untuk meminta izin pemain. Anda dapat segera meluncurkan Intent ini untuk membuka dialog izin. Anda hanya dapat menggunakan Intent ini satu kali.
    2. Jika hasil aktivitas Intent adalah Activity.RESULT_OK, izin akan diberikan. Panggil loadFriends() lagi untuk menampilkan daftar teman. Jika hasilnya adalah Activity.RESULT_CANCELLED, pengguna tidak mengizinkan dan loadFriends() akan terus menampilkan FriendsResolutionRequiredException.

Kode berikut menunjukkan cara menerapkan pemuatan daftar teman:

// 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.
Games.getPlayersClient(this, GoogleSignIn.getLastSignedInAccount(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;
}

Kode berikut menunjukkan cara menangani hasil dari permintaan izin:

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

Melihat profil pemain lain

Anda dapat menampilkan tampilan profil Play Game pemain lain dari dalam game Anda. Dengan tampilan ini, pemain dapat mengirim dan menerima undangan teman untuk pemain yang sedang dilihat. Tampilan ini tidak memerlukan akses ke daftar teman. Selain itu, jika game Anda memiliki konsep sendiri tentang nama pemain yang terpisah dari ID Pemain Game Play Game, Anda dapat meneruskannya ke tampilan profil sehingga mereka dapat disertakan di undangan teman apa pun untuk konteks tambahan.

Untuk menampilkan profil pemain lain, ikuti langkah-langkah berikut:

  1. Panggil metode PlayersClient.getCompareProfileIntent(), yang merupakan panggilan asinkron yang menampilkan objek Task.
  2. Jika panggilan berhasil, Layanan game Google Play akan menampilkan Intent yang akan menampilkan layar tempat pengguna dapat membandingkan diri dengan profil pemain lain.
  3. Gunakan Intent dari langkah sebelumnya untuk memulai aktivitas.
// Retrieve and launch an Intent to show a player profile within the game.
Games.getPlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .getCompareProfileIntent(otherPlayerId)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});

Jika game memiliki namanya sendiri untuk pemain, ini dapat ditambahkan ke panggilan API. Hal ini memungkinkan Play Game menetapkan nama panggilan pemain yang mengirim undangan teman dari dalam game Anda ke "<game-specific-name> dari <your-game-name>" (Play Game otomatis menambahkan "dari <your-game-name>"):

// 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.
Games.PlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});