フレンドサービスを Client SDK に統合する
注釈:本資料はAI技術を用いて翻訳されています。
はじめに
フレンドサービスは、プレイヤー同士を接続し、チャット、プレゼンスステータスの確認、パーティーへの招待などのゲーム内のソーシャルアクティビティを実行できるようにするために使用できます。フレンドを管理するには、WebSocketを使用してリアルタイム更新を保証するロビーインターフェイスを使用します。
このサービスとの統合により、フレンドリクエストの管理、プレイヤーのフレンドリストの取得、サードパーティプラットフォームからのプレイヤーのフレンドの自動同期が可能になり、新しいフレンドリクエストを送信する必要がなくなります。ゲームクライアントは、他のプレイヤーがインタラクションをリクエストしているタイミングを知るために、ロビーサービスでフレンド通知をリッスンするように登録する必要があります。
Unreal Engineの場合、スニペットで使用されるAccelByteOnlineSubsystemPtrを取得する手順は、このガイドに従ってください。
フレンドインタラクションの実装
プレイヤーを検索する
プレイヤーの表示名またはユーザー名をクエリとして使用して、プレイヤーのアカウント情報を検索できます。Unityの場合はSearchType、Unrealの場合はEAccelByteSearchTypeの列挙型をDisplayNameまたはUsernameに設定することで、検索のタイプを設定できます。
- Unreal Engine
- Unity
FString Query = FString("UsersDisplayName");
EAccelByteSearchType By = EAccelByteSearchType::DISPLAYNAME;
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto UserApi = ApiClient->GetUserApi().Pin();
UserApi->SearchUsers(Query, By, THandler < FPagedPublicUsersInfo > ::CreateLambda([](const FPagedPublicUsersInfo & Result) {
// Do something if SearchUsers succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if SearchUsers fails
UE_LOG(LogTemp, Log, TEXT("Error SearchUsers, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));
string query = "UsersDisplayName";
SearchType by = SearchType.DISPLAYNAME;
AccelByteSDK.GetClientRegistry().GetApi().GetUser().SearchUsers(query, by, result => {
if (result.IsError) {
// Do something if SearchUsers fails
Debug.Log($"Error SearchUsers, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if SearchUsers succeeds
}
});
フレンドリストを取得する
次の関数を使用してフレンドリストを取得します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetLoadFriendListResponseDelegate(AccelByte::Api::Lobby::FLoadFriendListResponse::CreateLambda([](const FAccelByteModelsLoadFriendListResponse & Result) {
// Do something if LoadFriendListResponseDelegate succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if LoadFriendListResponseDelegate fails
UE_LOG(LogTemp, Log, TEXT("Error LoadFriendListResponseDelegate, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));
LobbyApi->LoadFriendsList();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().LoadFriendsList(result => {
if (result.IsError) {
// Do something if LoadFriendsList fails
Debug.Log($"Error LoadFriendsList, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if LoadFriendsList succeeds
}
})
ユーザーIDを使用してフレンドリクエストを送信する
フレンドを作成する最初のステップは、他のプレイヤーにフレンドリクエストを送信することです。このコードを使用して、ユーザーIDを使用してフレンドリクエストを送信します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetRequestFriendsResponseDelegate(AccelByte::Api::Lobby::FRequestFriendsResponse::CreateLambda([](const FAccelByteModelsRequestFriendsResponse & Result) {
// Do something if RequestFriendsResponseDelegate succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode,
const FString & ErrorMessage) {
// Do something if RequestFriendsResponseDelegate fails
UE_LOG(LogTemp, Log, TEXT("Error RequestFriendsResponseDelegate, Error Code: %d Error Message: %s"), ErrorCode, * ErrorMessage);
}));
FString UserId = FString("SomeUserId");
LobbyApi->RequestFriend(UserId);
string userId = "SomeTargetFriendUserId";
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().RequestFriend(userId, result => {
if (result.IsError) {
// Do something if RequestFriend fails
Debug.Log($"Error RequestFriend, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if RequestFriend succeeds
}
});
受信フレンドリクエストのリストを取得する
この関数を使用して、受信フレンドリクエストに関するすべての情報を取得します。この関数は、各リクエストを承認または拒否するために使用できるユーザーIDを取得します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetListIncomingFriendsResponseDelegate(AccelByte::Api::Lobby::FListIncomingFriendsResponse::CreateLambda([](const FAccelByteModelsListIncomingFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if ListIncomingFriendsResponseDelegate succeeds
} else {
// Do something if ListIncomingFriendsResponseDelegate fails
}
}));
LobbyApi->ListIncomingFriends();
LobbyApi->LoadFriendsList();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().ListIncomingFriends(result => {
if (result.IsError) {
// Do something if ListIncomingFriends fails
Debug.Log($"Error ListIncomingFriends, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if ListIncomingFriends succeeds
}
});
受信フレンドリクエストを承認する
フレンドリクエストが送信された後、リクエストを受信したプレイヤーは、それを承認または拒否できます。フレンドリクエストを承認するには、この関数を使用します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetAcceptFriendsResponseDelegate(AccelByte::Api::Lobby::FAcceptFriendsResponse::CreateLambda([](const FAccelByteModelsAcceptFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if AcceptFriendsResponseDelegate succeeds
} else {
// Do something if AcceptFriendsResponseDelegate fails
}
}));
FString UserId = FString("SomeUserId");
LobbyApi->AcceptFriend(UserId);
string userId = "SomeTargetedAcceptedFriendUserId";
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().AcceptFriend(userId, result => {
if (result.IsError) {
// Do something if AcceptFriend fails
Debug.Log($"Error AcceptFriend, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if AcceptFriend succeeds
}
});
受信フレンドリクエストを拒否する
ユーザーIDで受信フレンドリクエストを拒否できます。ユーザーIDを取得するには、受信フレンドリクエストのリストを取得し、ユーザーIDをコピーして、次の関数で使用するために安全な場所に保存する必要があります。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetRejectFriendsResponseDelegate(AccelByte::Api::Lobby::FRejectFriendsResponse::CreateLambda([](const FAccelByteModelsRejectFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if RejectFriendsResponseDelegate succeeds
} else {
// Do something if RejectFriendsResponseDelegate fails
}
}));
FString UserId = FString("SomeTargetRejectFriendUserId");
LobbyApi->RejectFriend(UserId);
string userId = "SomeTargetRejectedFriendUserId";
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().RejectFriend(userId, result => {
if (result.IsError) {
// Do something if RejectFriend fails
Debug.Log($"Error RejectFriend, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if RejectFriend succeeds
}
});
プレイヤーのフレンド解除
他のプレイヤーとのフレンド関係を解除するには、この関数を使用します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetUnfriendResponseDelegate(AccelByte::Api::Lobby::FUnfriendResponse::CreateLambda([](const FAccelByteModelsUnfriendResponse & Result) {
if (Result.Code == "0") {
// Do something if UnfriendResponseDelegate succeeds
} else {
// Do something if UnfriendResponseDelegate fails
}
}));
FString UserId = FString("SomeTargetFriendUserId");
LobbyApi->Unfriend(UserId);
string userId = "SomeTargetFriendUserId";
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Unfriend(userId, result => {
if (result.IsError) {
// Do something if Unfriend fails
Debug.Log($"Error Unfriend, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if Unfriend succeeds
}
});
送信フレンドリクエストのリストを取得する
送信フレンドリクエストのリストを取得するには、この関数を使用します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetListOutgoingFriendsResponseDelegate(AccelByte::Api::Lobby::FListOutgoingFriendsResponse::CreateLambda([](const FAccelByteModelsListOutgoingFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if ListOutgoingFriendsResponseDelegate fails
} else {
// Do something if ListOutgoingFriendsResponseDelegate succeeds
}
}));
LobbyApi->ListOutgoingFriends();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().ListOutgoingFriends(result => {
if (result.IsError) {
// Do something if ListOutgoingFriends fails
Debug.Log($"Error ListOutgoingFriends, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if ListOutgoingFriends succeeds
}
});
送信フレンドリクエストをキャンセルする
ユーザーIDを使用して送信フレンドリクエストをキャンセルできます。ユーザーIDを取得するには、送信フレンドリクエストのリストを取得し、ユーザーIDをコピーして、次の関数のために安全な場所に保存する必要があります。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetCancelFriendsResponseDelegate(AccelByte::Api::Lobby::FCancelFriendsResponse::CreateLambda([](const FAccelByteModelsCancelFriendsResponse & Result) {
if (Result.Code == "0") {
// Do something if CancelFriendsResponseDelegate succeeds
} else {
// Do something if CancelFriendsResponseDelegate fails
}
}));
FString UserId = FString("SomeTargetCancelFriendUserId");
LobbyApi->CancelFriendRequest(UserId);
string userId = "SomeTargetOutgoingFriendUserId";
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().CancelFriendRequest(userId, result => {
if (result.IsError) {
// Do something if CancelFriendRequest fails
Debug.Log($"Error CancelFriendRequest, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if CancelFriendRequest succeeds
}
});
フレンド通知をリッスンする
プレイヤーが実行するさまざまなフレンドインタラクションに基づいて、保留中のアクションを通知するためにロビーサービスから通知を受け取ります。これらの通知のそれぞれをリッスンするためにデリゲートを登録する必要があります。
- 他のプレイヤーからフレンドリクエストを受信した
- プレイヤーがあなたのフレンドリクエストを承認した
- プレイヤーがあなたのフレンドリクエストを拒否した
- プレイヤーがあなたに送信した保留中のフレンドリクエストをキャンセルした
- フレンドがあなたとのフレンド関係を解除した
受信フレンド通知
受信フレンドリクエストを受信したときの通知をリッスンするように登録します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetOnIncomingRequestFriendsNotifDelegate(AccelByte::Api::Lobby::FRequestFriendsNotif::CreateLambda([](const FAccelByteModelsRequestFriendsNotif & Result) {
// Do something if OnIncomingRequestFriendsNotifDelegate succeeds
}));
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().OnIncomingFriendRequest += result => {
if (result.IsError) {
// Do something if OnIncomingFriendRequest fails
Debug.Log($"Error OnIncomingFriendRequest, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if OnIncomingFriendRequest succeeds
}
};
承認されたフレンドリクエスト通知
フレンドがあなたのフレンドリクエストを承認したときの通知をリッスンするように登録します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetOnFriendRequestAcceptedNotifDelegate(AccelByte::Api::Lobby::FAcceptFriendsNotif::CreateLambda([](const FAccelByteModelsAcceptFriendsNotif & Result) {
// Do something if OnFriendRequestAcceptedNotifDelegate succeeds
}));
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().FriendRequestAccepted += result => {
if (result.IsError) {
// Do something if FriendRequestAccepted fails
Debug.Log($"Error FriendRequestAccepted, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if FriendRequestAccepted succeeds
}
};
拒否されたフレンドリクエスト通知
プレイヤーがあなたのフレンドリクエストを拒否したときの通知をリッスンするように登録します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetOnRejectFriendsNotifDelegate(AccelByte::Api::Lobby::FRejectFriendsNotif::CreateLambda([](const FAccelByteModelsRejectFriendsNotif & Result) {
// Do something if OnRejectFriendsNotifDelegate succeeds
}));
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().FriendRequestRejected += result => {
if (result.IsError) {
// Do something if FriendRequestRejected fails
Debug.Log($"Error FriendRequestRejected, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if FriendRequestRejected succeeds
}
};
キャンセルされた送信フレンドリクエスト通知
他のプレイヤーがフレンドリクエストをキャンセルしたときの通知をリッスンするように登録します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SetOnCancelFriendsNotifDelegate(AccelByte::Api::Lobby::FCancelFriendsNotif::CreateLambda([](const FAccelByteModelsCancelFriendsNotif & Result) {
// Do something if OnCancelFriendsNotifDelegate succeeds
}));
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().FriendRequestCanceled += result => {
if (result.IsError) {
// Do something if FriendRequestCanceled fails
Debug.Log($"Error FriendRequestCanceled, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if FriendRequestCanceled succeeds
}
};
フレンド解除通知
プレイヤーが他のプレイヤーとのフレンド関係を解除したときの通知をリッスンするように登録します。
- Unreal Engine
- Unity
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->SetOnUnfriendNotifDelegate(AccelByte::Api::Lobby::FUnfriendNotif::CreateLambda([](const FAccelByteModelsUnfriendNotif & Result) {
// Do something if OnUnfriendNotifDelegate succeeds
}));
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().Connect();
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().OnUnfriend += result => {
if (result.IsError) {
// Do something if OnUnfriend fails
Debug.Log($"Error OnUnfriend, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
} else {
// Do something if OnUnfriend succeeds
}
};