年齢を確認すること
年齢ゲートが必要な場合、次のワークフローのステップを判断するために/age-gate/check API呼び出しを行う必要があります。プレイヤーの年齢がパブリッシャーポータルで設定されたゲームの最低年齢を下回る場合、返されるstatusフィールドはPROHIBITEDとなります。この時点で、プレイヤーはゲームの継続をブロックされるべきです。現在の場所で検証可能な親の同意が必要な年齢をプレイヤーが入力した場合、statusフィールドにはCHALLENGEという値が入り、新しい同意チャレンジのIDがchallengeIDフィールドで返されます。ゲームはその後、プレイヤーに親の同意を求めるよう促さなければなりません。最後に、statusの値がPASSであれば、プレイヤーはゲームを続行できます。
Creating a Session with Unreal C++
void UKidWorkflow::StartKidSessionWithDOB(const FString& Location, const FString& DOB)
{
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
JsonObject->SetStringField(TEXT("dateOfBirth"), DOB);
JsonObject->SetStringField(TEXT("jurisdiction"), Location);
FString ContentJsonString;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&ContentJsonString);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
HttpRequestHelper::PostRequestWithAuth(BaseUrl + TEXT("/age-gate/check"), ContentJsonString,
AuthToken, [this](FHttpResponsePtr Response, bool bWasSuccessful)
{
if (bWasSuccessful)
{
TSharedPtr<FJsonObject> JsonResponse;
TSharedRef<TJsonReader<>> Reader =
TJsonReaderFactory<>::Create(Response->GetContentAsString());
if (FJsonSerializer::Deserialize(Reader, JsonResponse))
{
FString Status = JsonResponse->GetStringField(TEXT("status"));
if (Status == TEXT("CHALLENGE"))
{
TSharedPtr<FJsonObject> Challenge =
JsonResponse->GetObjectField(TEXT("challenge"));
FString ChallengeId =
Challenge->GetStringField(TEXT("challengeId"));
FString OneTimePassword =
Challenge->GetStringField(TEXT("oneTimePassword"));
FString QRCodeUrl =
Challenge->GetStringField(TEXT("url"));
SaveChallengeId(ChallengeId);
ShowConsentChallenge(ChallengeId, ConsentTimeoutSeconds, OneTimePassword,
QRCodeUrl, [this](bool bConsentGranted, const FString &SessionId)
{
if (bConsentGranted)
{
GetSessionPermissions(SessionId, TEXT(""));
ClearChallengeId();
}
else
{
HandleNoConsent();
}
});
}
else if (Status == TEXT("PASS"))
{
SessionInfo = JsonResponse->GetObjectField(TEXT("session"));
SaveSessionInfo();
}
else if (Status == TEXT("PROHIBITED"))
{
HandleProhibitedStatus();
}
}
}
});
}