Skip to main content

Integrate Friends service with the client SDK

Last updated on January 19, 2024

Overview

The Friends service can be used to connect players with each other so they can perform social activities in the game such as chatting, seeing presence statuses and inviting each other to join a party. To manage friends, you will use the Lobby interface which uses WebSocket to ensure real-time updates.

Integration with this service will allow you to manage friend requests, retrieve a player's list of friends, and synchronize a player's friends from third-party platforms automatically so that they don't have to send a new friend request. The game client will need to register to listen for friend notifications with the Lobby service in order to know when another player is requesting an interaction.

Implement friend interactions

Search for players

You can search for a player's account information using their Display Name or Username as the query. You can configure the type of search by setting the enum of SearchType for Unity and EAccelByteSearchType for Unreal to DisplayName or Username.

FString Query = FString("UsersDisplayName");
EAccelByteSearchType By = EAccelByteSearchType::DISPLAYNAME;

FRegistry::User.SearchUsers(Query, By, THandler < FPagedPublicUsersInfo > ::CreateLambda([](const FPagedPublicUsersInfo & Result) {
// Do something if SearchUsers has been successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if SearchUsers has an error
UE_LOG(LogTemp, Log, TEXT("Error SearchUsers, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));

Retrieve the Friends List

Use the following function to retrieve a friends list.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetLoadFriendListResponseDelegate(AccelByte::Api::Lobby::FLoadFriendListResponse::CreateLambda([](const FAccelByteModelsLoadFriendListResponse & Result) {
// Do something if LoadFriendListResponseDelegate has been successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if LoadFriendListResponseDelegate has an error
UE_LOG(LogTemp, Log, TEXT("Error LoadFriendListResponseDelegate, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));

FRegistry::Lobby.LoadFriendsList();

Send a Friend request using a user ID

The first step in making a friend is sending a friend request to another player. Use this code to send a friend request using a User ID.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetRequestFriendsResponseDelegate(AccelByte::Api::Lobby::FRequestFriendsResponse::CreateLambda([](const FAccelByteModelsRequestFriendsResponse & Result) {
// Do something if RequestFriendsResponseDelegate has been successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if RequestFriendsResponseDelegate has an error
UE_LOG(LogTemp, Log, TEXT("Error RequestFriendsResponseDelegate, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));

FString UserId = FString("SomeUserId");
FRegistry::Lobby.RequestFriend(UserId);

Retrieve the list of incoming Friend requests

Use this function to retrieve all the information about incoming friend requests. This function retrieves user ID which you can use to accept or reject each request.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetListIncomingFriendsResponseDelegate(AccelByte::Api::Lobby::FListIncomingFriendsResponse::CreateLambda([](const FAccelByteModelsListIncomingFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if ListIncomingFriendsResponseDelegate has been successful
} else {
// Do something if ListIncomingFriendsResponseDelegate has an error
}
}));

FRegistry::Lobby.ListIncomingFriends();

FRegistry::Lobby.LoadFriendsList();

Accept incoming friend requests

After a friend request has been sent, the player who received the request can either accept or reject it. Use the following function to accept a friend request.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetAcceptFriendsResponseDelegate(AccelByte::Api::Lobby::FAcceptFriendsResponse::CreateLambda([](const FAccelByteModelsAcceptFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if AcceptFriendsResponseDelegate has been successful
} else {
// Do something if AcceptFriendsResponseDelegate has an error
}
}));

FString UserId = FString("SomeUserId");
FRegistry::Lobby.AcceptFriend(UserId);

Reject incoming Friend requests

You can reject the incoming friend request by their User ID. To get the user ID, you need to retrieve a list of incoming friend requests, copy the User ID, and store it somewhere safe for use in the following function.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetRejectFriendsResponseDelegate(AccelByte::Api::Lobby::FRejectFriendsResponse::CreateLambda([](const FAccelByteModelsRejectFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if RejectFriendsResponseDelegate has been successful
} else {
// Do something if RejectFriendsResponseDelegate has an error
}
}));

FString UserId = FString("SomeTargetRejectFriendUserId");
FRegistry::Lobby.RejectFriend(UserId);

Unfriend players

Use the following function to unfriend another player.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetUnfriendResponseDelegate(AccelByte::Api::Lobby::FUnfriendResponse::CreateLambda([](const FAccelByteModelsUnfriendResponse & Result) {
if (Result.Code == "0") {
// Do something if UnfriendResponseDelegate has been successful
} else {
// Do something if UnfriendResponseDelegate has an error
}
}));

FString UserId = FString("SomeTargetFriendUserId");
FRegistry::Lobby.Unfriend(UserId);

Retrieve the list of outgoing friend requests

Use the following function to retrieve a list of outgoing friend requests.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetListOutgoingFriendsResponseDelegate(AccelByte::Api::Lobby::FListOutgoingFriendsResponse::CreateLambda([](const FAccelByteModelsListOutgoingFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if ListOutgoingFriendsResponseDelegate has an error
} else {
// Do something if ListOutgoingFriendsResponseDelegate has been successful
}
}));

FRegistry::Lobby.ListOutgoingFriends();

Cancel outgoing Friend requests

You can cancel outgoing friend requests using User ID. To get the user ID, you need to retrieve a list of outgoing friend requests, copy the User ID, and store it somewhere safe for the following function.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetCancelFriendsResponseDelegate(AccelByte::Api::Lobby::FCancelFriendsResponse::CreateLambda([](const FAccelByteModelsCancelFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if CancelFriendsResponseDelegate has been successful
} else {
// Do something if CancelFriendsResponseDelegate has an error
}
}));

FString UserId = FString("SomeTargetCancelFriendUserId");
FRegistry::Lobby.CancelFriendRequest(UserId);

Listening for Friend notifications

Based on the different friend interactions players take, they will receive notifications from the Lobby service to inform them of a pending action. You will need to register delegates to listen for each of these notifications:

  • You have received friend request from another player
  • A player has accepted your friend request
  • A player has rejected your friend request
  • A player has canceled their pending friend request they sent you
  • A friend has unfriended you

Incoming Friend notifications

Register to listen for a notification when you receive an incoming friend request.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetOnIncomingRequestFriendsNotifDelegate(AccelByte::Api::Lobby::FRequestFriendsNotif::CreateLambda([](const FAccelByteModelsRequestFriendsNotif & Result) {
// Do something if OnIncomingRequestFriendsNotifDelegate has been successful
}));

Accepted Friend request notification

Register to listen for a notification when your friend accepts your friend request.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetOnFriendRequestAcceptedNotifDelegate(AccelByte::Api::Lobby::FAcceptFriendsNotif::CreateLambda([](const FAccelByteModelsAcceptFriendsNotif & Result) {
// Do something if OnFriendRequestAcceptedNotifDelegate has been successful
}));

Rejected Friend request notification

Register to listen for a notification when a player rejects your friend request.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetOnRejectFriendsNotifDelegate(AccelByte::Api::Lobby::FRejectFriendsNotif::CreateLambda([](const FAccelByteModelsRejectFriendsNotif & Result) {
// Do something if OnRejectFriendsNotifDelegate has been successful
}));

Canceled outgoing Friend request notification

Register to listen for a notification when another player cancels their friend request.

FRegistry::Lobby.Connect();
FRegistry::Lobby.SetOnCancelFriendsNotifDelegate(AccelByte::Api::Lobby::FCancelFriendsNotif::CreateLambda([](const FAccelByteModelsCancelFriendsNotif & Result) {
// Do something if OnCancelFriendsNotifDelegate has been successful
}));

Unfriend notification

Register to listen for a notification when a player unfriends another player.

FRegistry::Lobby.SetOnUnfriendNotifDelegate(AccelByte::Api::Lobby::FUnfriendNotif::CreateLambda([](const FAccelByteModelsUnfriendNotif & Result) {
// Do something if OnUnfriendNotifDelegate has been successful
}));