フレンドリスト接続エラーの処理方法
Last updated on February 4, 2026
注釈:本資料はAI技術を用いて翻訳されています。
フレンドリストを取得する際の接続タイムアウトなどのエラーを処理することは、スムーズなプレイヤー体験を維持するために重要です。プレイヤーがフレンドリストを表示しようとしてゲームが接続の問題に遭遇した場合、適切なエラー処理により、プレイヤーがリストが更新されない理由を疑問に思うことがなくなります。この問題を処理するための効果的なアプローチをいくつか紹介します:
- フレンドリーなエラーメッセージを表示する。フレンドリストの取得中にエラーが発生した場合、HTTPレスポンスのエラー値とメッセージに基づいて明確でフレンドリーなエラーメッセージを表示できます。
- 手動再試行オプション。プレイヤーにフレンドリストの取得を手動で再試行するオプションを提供します。
- 60秒ごとなど、一定の間隔でフレンドリストをポーリングする。このメカニズムがAGSソーシャルサービスに負荷をかける可能性があることに注意してください!
- リストの更新後にフレンドリストをキャッシュする。
フレンドリスト取得リクエストエラーが適切に処理されない場合、ゲームはプレイヤー体験に悪影響を与えるいくつかの問題に遭遇する可能性があります。以下にいくつかの例を示します:
- 無限のフレンドリスト取得プロセス:プレイヤーが終わりのないフレンドリスト取得の試行に陥る可能性があります。プレイヤーはフレンドリストを取得することができず、ローディング画面が繰り返し表示されます。
- ゲームが空のフレンドリストを表示する。
- Unreal Engine OSS
- Unreal Engine SDK
- Unity
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto FriendsInterface = ABSubsystem->GetFriendsInterface();
int32 LocalUserNum = 0;
FriendsInterface->ReadFriendsList(
LocalUserNum,
TEXT(""),
FOnReadFriendsListComplete::CreateWeakLambda(this, [](int32 LocalUserNum, bool bWasSuccessful, const FString& ListName, const FString& Error)
{
if (bWasSuccessful)
{
// フレンドリストのクエリが成功したときに何かを実行します。
}
else
{
// 失敗したリクエストを処理するソリューションを実装します。
}
}
));
...
現在、フレンドリストの取得が失敗した場合、AGS OSSは失敗がHTTPタイムアウトによるものか、別の問題によるものかについての詳細を提供しません。 フレンドリストが更新されると、Unreal Engine AGS OSSにキャッシュされます。以下のコードは、AGS OSSのフレンドリストキャッシュを取得するためのものです:
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto FriendsInterface = ABSubsystem->GetFriendsInterface();
TArray<TSharedRef<FOnlineFriend>> NewCachedFriendList{};
FriendsInterface->GetFriendsList(LocalUserNum, TEXT(""), NewCachedFriendList);
...
...
TArray<FString> CachedFriendIds{};
...
...
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
ApiClient->Lobby.QueryFriendList(THandler<FAccelByteModelsQueryFriendListResponse>::CreateLambda([this](const FAccelByteModelsQueryFriendListResponse& Result)
{
// フレンドリストのクエリが成功したときに何かを実行します。
// フレンドリストをキャッシュします。
CachedFriendIds = Result.FriendIds;
}), FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Warning, TEXT("Error query friend list. Code: %d, Message: %s"), ErrorCode, *ErrorMessage);
if(ErrorCode == static_cast<int32>(ErrorCodes::NetworkError))
{
// HTTP再試行タイムアウトを処理するソリューションを実装します。
}
})
);
...
...
// フレンドリストのクエリが完了した後。
TArray<FString> FriendIds = CachedFriendIds;
...
...
ObservableList<string> cachedFriendIds;
...
...
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().LoadFriendsList(result =>
{
if (!result.IsError)
{
// フレンドリストの読み込みが成功したときに何かを実行します。
// フレンドリストをキャッシュします。
cachedFriendIds.Add(result.Value.friendsId);
}
else
{
// 失敗したリクエストを処理するソリューションを実装します。
Debug.LogWarning($"Unable to login. Code: {result.Error.Code}, Message: {result.Error.Message}");
if(result.Error.Code.Equals(ErrorCode.NetworkError))
{
// HTTP再試行タイムアウトを処理するソリューションを実装します。
}
}
});
...
...
// フレンドリストのクエリが完了した後。
string[] friendIds = cachedFriendIds;
...