メインコンテンツまでスキップ

プレゼンスをクライアントSDKに統合する

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

概要

AccelByte Gaming Services (AGS) プレゼンスは、プレイヤーのプレゼンスステータスを設定および取得するために使用でき、他のプレイヤーが現在ゲーム内で何をしているかをユーザーベースに通知できます。これらのステータスを管理するには、AGS ロビー インターフェイスを使用してプレゼンス機能を呼び出し、WebSocketを通じて送信してステータスがリアルタイムで更新されるようにします。

各ゲームは独自であり、プレイヤーのオンラインステータス以上の情報を提供する必要がある場合があるため、AGSは設定および取得できる2つのパラメータを提供します:

  • 可用性: 次のいずれかの状態に設定できます:オフライン利用可能取り込み中退席中非表示。プレイヤーがAGSロビーから切断すると、これは自動的にオフラインに更新されます。

  • アクティビティ: これはカスタマイズ可能で、ゲームプレイ中ロビー内マッチ中メンバー募集中のパーティーなど、プレイヤーの現在の状態に関する独自または特定の詳細をゲームが提供できるようにします。

この記事では、プレゼンスをゲームに統合する方法について説明します。

前提条件

この記事の手順を完了するには、AGS ロビー をゲームに統合している必要があります。

注記

Unreal Engineの場合、スニペットで使用される AccelByteOnlineSubsystemPtr を取得する手順は、このガイドに従って確認できます。

プレイヤーステータス取得フロー

AGSプレゼンスをゲームクライアントに統合する前に、プレイヤーステータスを設定および取得するための一般的なフローを理解してください:

  1. ゲーム開始時に、AGSロビーに接続し、プレイヤーのステータスを利用可能に設定します。
  2. プレイヤーのフレンドのステータスを取得して表示できるようにします。
  3. フレンドステータスの変更を監視するように登録し、更新できるようにします。
  4. プレイヤーがゲームプレイアクティビティを変更する際は、それに応じてステータスを設定してください。

プレイヤーステータスの設定

ゲームクライアントからプレイヤーのプレゼンスを設定するには、更新関数を呼び出し、プレイヤーに設定したい可用性とアクティビティの状態の両方をパラメータとして提供します。

Availability Availability = Availability::Available;
FString Activity = FString("My New Activity");

auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();
LobbyApi->Connect();
LobbyApi->SendSetPresenceStatus(Availability, Activity);

フレンドステータスの変更を監視する

フレンドのステータスに関するリアルタイム更新を受信するには、通知を監視するように登録する必要があります。フレンドのステータスが変更されると、フレンドがオンラインになったことをプレイヤーに知らせるなど、ゲームクライアントを通じてプレイヤーに変更を通知できます。

auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();

LobbyApi->Connect();
LobbyApi->SetUserPresenceNotifDelegate(AccelByte::Api::Lobby::FFriendStatusNotif::CreateLambda([](const FAccelByteModelsUsersPresenceNotice& Result)
{
// Do something if UserPresenceNotifDelegate has succeeded
}));

フレンドリストのステータスを取得する

プレイヤーにフレンドリストを表示する際にプレゼンスステータスを提供するには、この関数を呼び出してプレイヤーのすべてのフレンドのステータスを取得できます:

auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();

LobbyApi->Connect();
LobbyApi->SetGetOnlineFriendsPresenceResponseDelegate(AccelByte::Api::Lobby::FGetAllFriendsStatusResponse::CreateLambda([](const FAccelByteModelsGetOnlineUsersResponse& Result)
{
if (Result.Code == "0")
{
// Do something if GetOnlineFriendsPresenceResponseDelegate has succeeded
}
else
{
// Do something if GetOnlineFriendsPresenceResponseDelegate has an error
}
}));

LobbyApi->SendGetOnlineFriendPresenceRequest();

プレイヤーステータスを一括取得する

フレンドではないプレイヤー間のプレゼンスステータスを提供する必要がある場合は、ユーザーIDのリストを渡して以下の関数を使用できます。これは、フレンドではないプレイヤーがグループやレイドチームで一緒にいて、互いに調整する必要がある場合などに便利です。この関数は、呼び出し時に countOnly パラメータを true に設定することで、特定のステータスのプレイヤー数を提供するためにも使用できます。

TArray<FString> UserIds = {FString("12345abcd"), FString("abcd12345")};
bool CountOnly = true;

auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();

LobbyApi->Connect();
LobbyApi->BulkGetUserPresence(UserIds, THandler<FAccelByteModelsBulkUserStatusNotif>::CreateLambda([](const FAccelByteModelsBulkUserStatusNotif& Result)
{
// Do something if BulkGetUserPresence has succeeded
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if BulkGetUserPresence has an error
UE_LOG(LogTemp, Log, TEXT("Error BulkGetUserPresence, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}), CountOnly);

以下は、v2 バージョンを使用した一括ユーザープレゼンスの例です。これは、リクエストボディ内にユーザーIDを追加するためにpostエンドポイントを利用します。この方法は、バッチあたり最大100ユーザーのクエリをサポートします。

注記

この機能はAGSバージョン3.76でのみ利用可能です。

TArray<FString> UserIds = {FString("12345abcd"), FString("abcd12345")};
bool CountOnly = true;

auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto LobbyApi = ApiClient->GetLobbyApi().Pin();

LobbyApi->Connect();
LobbyApi->BulkGetUserPresenceV2(UserIds, THandler<FAccelByteModelsBulkUserStatusNotif>::CreateLambda([](const FAccelByteModelsBulkUserStatusNotif& Result)
{
// Do something if BulkGetUserPresence succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if BulkGetUserPresence fails
UE_LOG(LogTemp, Log, TEXT("Error BulkGetUserPresence, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}), CountOnly);