获取玩家的年龄
收集年龄的司法要求
要创建新的 Session
,第一步是确定当地法规是否要求游戏询问玩家的出生日期。调用 /age-gate/get-requirements
API 会返回 shouldDisplay
字段,指示是否需要显示年龄门,以及其他信息,例如当前司法管辖区允许的年龄门类型、游戏的最低年龄、当前位置的法定年龄以及数字同意年龄。
void UKidWorkflow::GetUserAge(const FString& Location, TFunction<void(bool, bool,
const FString&)> Callback)
{
// 使用 /age-gate/get-requirements 来确定以下内容:
// - 是否需要显示年龄门
// - 允许的年龄门类型
// - 数字同意年龄、法定年龄和最低年龄
// - 是否需要年龄保证
// - 如果需要,则显示年龄门
// - 调用 Callback(),传递年龄、是否显示了年龄门以及是否需要年龄保证
FString Url = BaseUrl + TEXT("/age-gate/get-requirements?jurisdiction=") + Location;
HttpRequestHelper::GetRequestWithAuth(Url, AuthToken,
[this, Location, Callback](FHttpResponsePtr Response, bool bWasSuccessful)
{
if (bWasSuccessful && Response.IsValid())
{
TSharedPtr<FJsonObject> JsonResponse;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(Response->GetContentAsString());
if (FJsonSerializer::Deserialize(Reader, JsonResponse))
{
bool bShouldDisplay = JsonResponse->GetBoolField(TEXT("shouldDisplay"));
bool bAgeAssuranceRequired = JsonResponse->GetBoolField(TEXT("ageAssuranceRequired"));
// 提取与司法管辖区相关的额外信息。
// 可用于进一步定制年龄门。
int32 DigitalConsentAge = JsonResponse->GetIntegerField(TEXT("digitalConsentAge"));
int32 CivilAge = JsonResponse->GetIntegerField(TEXT("civilAge"));
int32 MinimumAge = JsonResponse->GetIntegerField(TEXT("minimumAge"));
// 提取方法数组
const TArray<TSharedPtr<FJsonValue>>& ApprovedAgeCollectionMethods =
JsonResponse->GetArrayField(TEXT("approvedAgeCollectionMethods"));
TSet<FString> Methods;
for (const TSharedPtr<FJsonValue>& Value : ApprovedAgeCollectionMethods)
{
Methods.Add(Value->AsString());
}
if (bShouldDisplay)
{
ShowAgeGate(Methods, [this, DigitalConsentAge, Callback,
bAgeAssuranceRequired](const FString& DOB)
{
// 仅验证高于数字同意年龄的玩家
int32 Age = CalculateAgeFromDOB(DOB);
Callback(true, bAgeAssuranceRequired && Age >= DigitalConsentAge, DOB);
});
}
else
{
Callback(false /* ageGateShown */, false /* ageAssuranceRequired */, TEXT(""));
}
}
}
});
}
如果 /age-gate/get-requirements
返回 shouldDisplay
= false
,则无需显示年龄门,玩家的出生日期未定义。在这种情况下,游戏仍会通过调用 /session/get-default-permissions
为该司法管辖区检索默认权限,这意味着在该司法管辖区内,权限不会因年龄而异。根据司法管辖区的要求,某些游戏功能可能对所有年龄段受限,因此游戏仍需参考 Session
权限来检查功能是否可用。
显示年龄门
如果需要显示年龄门(shouldDisplay
= true
),则应显示年龄门 UI,用户必须输入出生日期以继续。
某些司法管辖区对年龄门的设计有具体要求,例如是否可以使用滑块或必须明确请求出生日期。允许的年龄收集方法在 /approvedAgeCollectionMethods
字段中指定。
处理年龄保证
如果玩家输入的年龄被认为是成年人或青少年,某些司法管辖区可能要求进行年龄保证。在这些司法管辖区中,/age-gate/get-requirements
API 返回的 ageAssuranceRequired
字段将为 true
。在这种情况下,当用户输入出生日期后,游戏应验证给定的年龄是否高于该位置的数字同意年龄。年龄估算可以通过面部扫描或文件验证完成。如果年龄估算失败,或者玩家提供的年龄低于估算年龄范围的最小值,则应将玩家视为该范围的最小年龄。根据游戏配置的最低年龄,玩家可能需要家长同意,或者完全被阻止访问游戏。