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

接続エラー時の利用規約同意処理方法

Last updated on February 4, 2026

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

定期メンテナンスや予期しない接続問題などのネットワーク障害中に、プレイヤーが同意した利用規約がリーガルサービスで適切に更新されない可能性があります。この問題が正しく処理されない場合、プレイヤーは自分の同意ステータスが更新されていないことに気づかず、混乱やアクセス問題の可能性につながります。

これを防ぐために、プレイヤーの利用規約ステータスが正常に更新されるまでリクエストを再試行するエラー処理を実装することが重要です。一般的なアプローチは、ゲームレベルでタイマーベースの再試行システムを使用することです。以下は、最大5回の再試行と10秒の再試行遅延でこの再試行システムを実装する例です。

...
int MaxRetryAttempts{5};
int NRetryAttempt{0};
int RetryDelay{10};
FTimerHandle RetryTimerHandle;
FDelegateHandle AccelByteAcceptAgreementPoliciesHandle;
int32 LocalUserNum = 0;
...

void AcceptLegal()
{
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto AgreementInterface = ABSubsystem->GetAgreementInterface();
auto ABAgreementInterface = StaticCastSharedPtr<FOnlineAgreementAccelBytePtr>(AgreementInterface);
TArray<FABAcceptAgreementPoliciesRequest> DocumentToAccept;
FABAcceptAgreementPoliciesRequest PoliciesRequest;
PoliciesRequest.BasePolicyId = TEXT("<PolicyVersionId>");
PoliciesRequest.LocaleCode = TEXT("en");
DocumentToAccept.Add(PoliciesRequest);

AccelByteAcceptAgreementPoliciesHandle = AgreementInterface->AddAccelByteOnAcceptAgreementPoliciesCompletedDelegate_Handle(LocalUserNum
, FAccelByteOnAcceptAgreementPoliciesCompletedDelegate::CreateLambda([this](int32 AcceptAgreementLocalUserNum, bool bWasSuccessful, const FOnlineErrorAccelByte& ResultState)
{
if (bWasSuccessful)
{
// Do something when the accept the agreement is successful.

NRetryAttempt = 0;
}
else
{
// Implement a solution to handle failed request.
if(NRetryAttempt < MaxRetryAttempts)
{
GetWorld()->GetTimerManager().SetTimer(RetryTimerHandle, [this]()
{
UpdatePlayerMMR();
}, RetryDelay, false);
NRetryAttempt++;
}
else
{
// Show an error message pop up!
}
}

AgreementInterface->ClearAccelByteOnAcceptAgreementPoliciesCompletedDelegate_Handle(LocalUserNum, AccelByteAcceptAgreementPoliciesHandle);
})
);
AgreementInterface->AcceptAgreementPolicies(LocalUserNum, DocumentToAccept);
...
}

リクエストがこちらにリストされているエラーコードのいずれかに遭遇した場合、システムがリクエストの再試行を開始するときにエラーデリゲートはトリガーされません。エラーデリゲートは、再試行プロセスが終了した後にのみトリガーされます—再試行制限に達した(タイムアウト)場合、または最終的な応答コードがリストされたエラーコードのいずれでもない場合です。