ログイン接続エラーの処理方法
Last updated on February 4, 2026
注釈:本資料はAI技術を用いて翻訳されています。
接続問題によりログインリクエストが失敗した場合、スムーズなプレイヤー体験を確保するためにエラーを適切に処理することが重要です。この問題を効果的に処理する様々な方法を以下に示します:
- HTTP APIエラーに基づいて明確で情報豊富なメッセージを表示し、プレイヤーがログイン試行が失敗した理由を理解できるようにする。
- ゲームの再起動を強制するのではなく、プレイヤーが手動でログインを再試行するオプションを提供する。
- ゲームレベルの自動再試行ロジックを実装することで、手動介入が必要になる前に数回再接続を試行し、体験を向上させることができる。
ログインリクエストエラーが適切に処理されない場合、ゲームはプレイヤー体験に悪影響を与える複数の問題に遭遇する可能性があります。以下にいくつかの例を示します:
- 無限ログインプロセス:プレイヤーが終わりのないログイン試行に陥る可能性があります。プレイヤーはログインできず、ログイン画面が繰り返し表示されます。
- 不十分なユーザーフィードバック:適切なエラー処理がないと、ログインが失敗した際にゲームがフィードバックを表示しないか、不明確なメッセージを表示する可能性があります。プレイヤーはログインステップが失敗した正確な理由を知ることができません。
このコード例は、ログイン中にHTTP APIリクエストエラーをキャッチして識別する方法を示しています。エラーコードやメッセージに応じて、異なる方法でエラーを処理することができます。
- Unreal Engine OSS
- Unreal Engine SDK
- Unity
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto IdentityInterface = ABSubsystem->GetIdentityInterface();
int32 LocalUserNum = 0;
// Auto-detect the login methods based on the configuration
FOnlineAccountCredentialsAccelByte Credentials{};
// Login
IdentityInterface->AddOnLoginCompleteDelegate_Handle(LocalUserNum,
FOnLoginCompleteDelegate::CreateLambda([](int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& LoginError)
{
if (bWasSuccessful)
{
// Do something when the login is successful.
}
else
{
// Implement a solution to handle failed request.
}
}));
IdentityInterface->Login(LocalUserNum, Credentials);
...
現在、ログインリクエストが失敗した場合、AGS OSSは失敗がHTTP APIタイムアウトによるものか他の問題によるものかの詳細を提供しません。
...
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
ApiClient->User.LoginWithOtherPlatformV4(EAccelBytePlatformType::Steam,
"<steam-token>",
AccelByte::THandler<FAccelByteModelsLoginQueueTicketInfo>::CreateLambda([](const FAccelByteModelsLoginQueueTicketInfo& TicketInfo)
{
// Do something when the login is successful.
}), AccelByte::FOAuthErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage, const FErrorOAuthInfo& ErrorObject)
{
UE_LOG(LogTemp, Warning, TEXT("Error login. Code: %d, Message: %s"), ErrorCode, *ErrorMessage);
if(ErrorCode == static_cast<int32>(ErrorCodes::NetworkError))
{
// Implement a solution to handle HTTP retry timeout.
}
})
);
...
...
AccelByteSDK.GetClientRegistry().GetApi().GetUser().LoginWithOtherPlatformV4(new LoginPlatformType(PlatformType.Steam), "platformToken", result =>
{
if (!result.IsError)
{
// Do something when the login is successful.
}
else
{
// Implement a solution to handle failed request.
Debug.LogWarning($"Unable to login. Code: {result.Error.Code}, Message: {result.Error.Message}");
if(result.Error.Code.Equals(ErrorCode.NetworkError))
{
// Implement a solution to handle HTTP retry timeout.
}
}
});
...
ログインキュー
ネットワーク障害は、定期メンテナンス中だけでなく、ゲームローンチや予想以上のプレイヤーが参加するゲーム内イベントなどの高トラフィックイベント中にも発生する可能性があります。この場合、繰り返しログインを試行するとサーバーに過負荷をかけ、問題を悪化させ、より多くのプレイヤーがゲームにアクセスできなくなる可能性があります。
これを防ぐために、ログインキューシステムを実装することが良い慣行です。ログインキューは、プレイヤーが一度にすべて接続するのではなく、制御された方法で接続できるようにすることで、受信リクエストを管理するのに役立ちます。これにより、サーバーの安定性が向上し、失敗したログイン試行が減少し、ゲームに入ろうとするプレイヤーにとってよりスムーズな体験が確保されます。