管理会话
k-ID的Session包含当前玩家和位置的权限和年龄状态的集合。每个玩家都需要一个活动的Session。游戏应咨询活动的Session以确定游戏中的功能是启用还是禁用。
k-ID的Session不会自动过期。它设计为可以缓存到与玩家关联的本地存储或云存储中。对于儿童和青少年,会话可以更改,或者是父母使用家庭门户添加或删除权限,或者是玩家过生日并“升级”到建立会话的司法管辖区的新年龄类别。由于Session设计为缓存,因此每次游戏启动时都应使用/session/get API刷新,以获取所做的任何更改。
用会话ID在Unreal C++中获取会话
void UKidWorkflow::GetSessionPermissions(const FString& SessionId, const FString& ETag)
{
   FString Url = FString::Printf(TEXT("%s/session/get?sessionId=%s&etag=%s"), *BaseUrl,
             *SessionId, *ETag);
   HttpRequestHelper::GetRequestWithAuth(Url, AuthToken, 
          [this](FHttpResponsePtr Response, bool bWasSuccessful)
   {
       if (bWasSuccessful && Response.IsValid())
       {
           if (Response->GetResponseCode() == 304)
           {
               UE_LOG(LogTemp, Log, TEXT("Session information is up-to-date."));
               return;
           }
           TSharedRef<TJsonReader<>> Reader = 
                      TJsonReaderFactory<>::Create(Response->GetContentAsString());
           if (FJsonSerializer::Deserialize(Reader, SessionInfo))
           {
                // Save the member variable SessionInfo to local or cloud storage...
               SaveSessionInfo();
           }
       }  
       else
       {
           UE_LOG(LogTemp, Error, TEXT("/session/get failed"));
       }
   });
}
example session
{
  "session": {
    "ageStatus": "LEGAL_ADULT",
    "dateOfBirth": "2005-04-15",
    "etag": "6d9d24fccd428f845b355122799948dd0a52fc5d",
    "jurisdiction": "US-CA",
    "kuid": "123456",
    "permissions": [
      {
        "enabled": true,
        "managedBy": "PLAYER",
        "name": "ai-generated-avatars"
      },
      {
        "enabled": true,
        "managedBy": "PLAYER",
        "name": "text-chat-private"
      }
    ],
    "sessionId": "608616da-4fd2-4742-82bf-ec1d4ffd8187",
    "status": "ACTIVE"
  },
  "status": "PASS"
}