接続エラー時のメインメニューでのAGSオンライン機能の処理
Last updated on February 4, 2026
注釈:本資料はAI技術を用いて翻訳されています。
プレイヤーがゲームのメインメニューからAGSオンライン機能にアクセスできない場合、明確で情報豊富なエラーメッセージを表示することが重要です。これにより、プレイヤーは接続問題によりオンライン機能が現在利用できないことを理解でき、なぜ機能しないのかについて混乱することがありません。
例えば、プレイヤーがストア、ユーザーエンタイトルメント、ユーザーウォレットなどの機能にアクセスしようとしてネットワーク障害に遭遇した場合、ゲームは「接続できません。インターネット接続を確認して再試行してください。」のような意味のあるメッセージで通知する必要があります。
以下は、メインメニューで影響を受ける可能性があるAGSオンライン機能の例です。それに加えて、接続問題を検出し、ゲーム内で適切に処理するためのサンプルコードスニペットも提供します。
ストア表示情報の取得
- Unreal Engine OSS
- Unreal Engine SDK
- Unity
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto StoreInterface = ABSubsystem->GetStoreV2Interface();
FOnlineStoreV2AccelBytePtr ABStoreInterface = StaticCastSharedPtr<FOnlineStoreV2AccelByte>(StoreInterface);
FString StoreId;
FString ViewId;
FString Region;
constexpr EAccelBytePlatformMapping PlatformMapping = EAccelBytePlatformMapping::NONE;
ABStoreInterface->QueryStorefront("<UserId>", StoreId, ViewId, Region, PlatformMapping,
FOnQueryStorefrontComplete::CreateWeakLambda(this, [](bool bWasSuccessful, const TArray<FString>& ViewIds, const TArray<FString>& SectionIds, const TArray<FUniqueOfferId>& OfferIds, const TArray<FString>& ItemMappingIds, const FString& Error)
{
if (bWasSuccessful)
{
// Do something when the query store display is successful.
}
else
{
// Implement a solution to handle failed request.
}
}
));
...
現在、ゲーム内ストアの取得が失敗した場合、AGS OSSは失敗がHTTPタイムアウトによるものか他の問題によるものかの詳細を提供しません。
...
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
ApiClient->StoreDisplay.GetAllViews("<PublishedStoreId>",
"<DefaultLanguage>",
THandler<TArray<FAccelByteModelsViewInfo>>::CreateLambda([](const TArray<FAccelByteModelsViewInfo>& Result)
{
// Do something when the query store display is successful.
}), FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Warning, TEXT("Error query store display. Code: %d, Message: %s"), ErrorCode, *ErrorMessage);
if(ErrorCode == static_cast<int32>(ErrorCodes::NetworkError))
{
// Implement a solution to handle HTTP retry timeout.
}
})
);
...
...
AccelByteSDK.GetClientRegistry().GetApi().GetStoreDisplayService();(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.
}
}
});
...
プレイヤーのエンタイトルメントのクエリ
- Unreal Engine OSS
- Unreal Engine SDK
- Unity
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto EntitlementsInterface = ABSubsystem->GetEntitlementsInterface();
FOnlineEntitlementsAccelBytePtr ABEntitlementsInterface = StaticCastSharedPtr<FOnlineEntitlementsAccelByte>(EntitlementsInterface);
ABEntitlementsInterface->OnQueryEntitlementsCompleteDelegates.AddWeakLambda(this, [this](bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Namespace, const FString& ErrorMessage)
{
if (bWasSuccessful)
{
// Do something when the query user entitlements is successful.
}
else
{
// Implement a solution to handle failed request.
}
});
EntitlementsInterface->QueryEntitlements(UserId, TEXT(""), FPagedQuery());
...
現在、ユーザーエンタイトルメントの取得が失敗した場合、AGS OSSは失敗がHTTPタイムアウトによるものか他の問題によるものかの詳細を提供しません。
...
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString EntitlementName = TEXT("<Entitlement>");
FString ItemId = TEXT("<ItemId>");
TArray<FString> Features = { TEXT("<feature1>") };
int Offset = 0;
int Limit = 20;
ApiClient->Entitlement.QueryUserEntitlements(EntitlementName, ItemId, Offset, Limit
, THandler<FAccelByteModelsEntitlementPagingSlicedResult>::CreateLambda([](const FAccelByteModelsEntitlementPagingSlicedResult& Result)
{
// Do something when the query user entitlements is successful.
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Warning, TEXT("Error query user entitlements. Code: %d, Message: %s"), ErrorCode, *ErrorMessage);
if(ErrorCode == static_cast<int32>(ErrorCodes::NetworkError))
{
// Implement a solution to handle HTTP retry timeout.
}
}), EAccelByteEntitlementClass::NONE, EAccelByteAppType::NONE
);
...
...
AccelByteSDK.GetClientRegistry().GetApi().GetEntitlement().QueryUserEntitlements("", "<ItemId>", 0, 20, result =>
{
if (!result.IsError)
{
// Do something when the query user entitlements 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.
}
}
});
...
プレイヤーのウォレットデータの取得
- Unreal Engine OSS
- Unreal Engine SDK
- Unity
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto WalletInterface = ABSubsystem->GetWalletInterface();
WalletInterface->OnGetWalletInfoCompletedDelegates..AddWeakLambda(this, [this](int32 LocalUserNum, bool bWasSuccessful, const FAccelByteModelsWalletInfo& Response, const FString& Error)
{
if (bWasSuccessful)
{
// Do something when the retrieving wallet data is successful.
}
else
{
// Implement a solution to handle failed request.
}
});
WalletInterface->GetWalletInfoByCurrencyCode(0, TEXT("<SampleCurrencyCode>"), true;
...
現在、ユーザーエンタイトルメントの取得が失敗した場合、AGS OSSは失敗がHTTPタイムアウトによるものか他の問題によるものかの詳細を提供しません。
...
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
ApiClient->Wallet.GetWalletInfoByCurrencyCodeV2(TEXT("<SampleCurrencyCode>")
, THandler<FAccelByteModelsWalletInfoResponse>::CreateLambda([](const FAccelByteModelsWalletInfoResponse& Result)
{
// Do something when the retrieving wallet data is successful.
}), FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Warning, TEXT("Error retrieving wallet data. Code: %d, Message: %s"), ErrorCode, *ErrorMessage);
if(ErrorCode == static_cast<int32>(ErrorCodes::NetworkError))
{
// Implement a solution to handle HTTP retry timeout.
}
})
);
...
...
AccelByteSDK.GetClientRegistry().GetApi().GetGetWalletser().GetWalletInfoByCurrencyCodeV2("<SampleCurrencyCode>", result =>
{
if (!result.IsError)
{
// Do something when the retrieving wallet data 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.
}
}
});
...