Hãy làm theo các bước trong hướng dẫn này để triển khai API Bạn bè trong mã trò chơi Java.
Tải bạn bè
Bạn có thể truy xuất và hiển thị (trong trò chơi) danh sách bạn bè của người chơi hiện tại. Khi là người chơi, bạn có thể kiểm soát trò chơi nào có quyền truy cập vào danh sách bạn bè. Khi truy xuất danh sách bạn bè, bạn phải xử lý các trường hợp yêu cầu quyền truy cập. Tất cả đều được gói trong API hỗ trợ yêu cầu quyền truy cập, theo đó sử dụng danh sách bạn bè để thực hiện một tác vụ đơn giản. Để tải danh sách bạn bè, vui lòng làm theo các bước sau:
- Gọi phương thức
PlayersClient.loadFriends()
, ở đây là lệnh gọi không đồng bộ trả về một đối tượngTask
. - Nếu cuộc gọi thành công (nghĩa là người dùng đã cấp quyền truy cập vào danh sách bạn bè), Dịch vụ trò chơi của Google Play sẽ trả về
PlayerBuffer
chú thích đại diện cho bạn bè của người chơi. Nếu người chơi cần cấp quyền truy cập vào danh sách bạn bè, thì lệnh gọi qua
FriendsResolutionRequiredException
sẽ không thực hiện được. Chưa có hộp thoại nào hiển thị.- Trường hợp ngoại lệ này chứa một
Intent
để kích hoạt hộp thoại yêu cầu người chơi đồng ý. Bạn có thể chạyIntent
ngay để mở hộp thoại đồng ý. Bạn chỉ có thể sử dụngIntent
một lần duy nhất. Nếu kết quả hoạt động của
Intent
làActivity.RESULT_OK
, nghĩa là bạn đã đồng ý. Gọi lạiloadFriends()
để trả về danh sách bạn bè. Nếu kết quả làActivity.RESULT_CANCELLED
, nghĩa là người dùng không đồng ý vàloadFriends()
sẽ tiếp tục trả vềFriendsResolutionRequiredException
.
- Trường hợp ngoại lệ này chứa một
Đoạn mã sau đây cho biết cách triển khai việc tải danh sách bạn bè:
// 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;
}
Đoạn mã sau đây cho biết cách xử lý kết quả trong nội dung yêu cầu đồng ý:
/** 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.
}
}
}
Xem hồ sơ của người chơi khác
Bạn có thể hiển thị chế độ xem hồ sơ Play Games của một người chơi khác từ trò chơi của mình. Chế độ xem này cho phép người chơi gửi và chấp nhận lời mời kết bạn đối với người chơi đang được xem. Chế độ xem này không yêu cầu quyền truy cập vào danh sách bạn bè. Ngoài ra, nếu trò chơi của bạn có tên người chơi tách biệt với Tên nhận dạng người chơi trên Play Games, bạn có thể truyền những tên này vào chế độ xem hồ sơ để chúng có thể được đưa vào bất kỳ lời mời kết bạn nào nhằm cung cấp thêm ngữ cảnh.
Để hiển thị hồ sơ của một người chơi khác, vui lòng làm theo các bước sau:
- Gọi phương thức
PlayersClient.getCompareProfileIntent()
, ở đây là lệnh gọi không đồng bộ trả về một đối tượngTask
. - Nếu cuộc gọi thành công, Dịch vụ trò chơi của Google Play sẽ trả về một Ý định hiển thị màn hình nơi người dùng có thể tự so sánh với một hồ sơ của người chơi khác.
- Sử dụng
Intent
từ bước trước để bắt đầu một hoạt động.
// 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);
// ...
}});
Nếu trò chơi có tên riêng dành cho người chơi, những người chơi này có thể được thêm vào lệnh gọi API. Điều này cho phép Play Games đặt biệt hiệu của những người chơi đã gửi lời mời kết bạn từ trong trò chơi của bạn thành "<game-specific-name> từ <your-game-name>" (Play Games tự động thêm "from <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);
// ...
}});