// ENABLE_PLAYFABSERVER_API symbol denotes this is an admin-level game server and not a game client.
private static async Task PlayFabEconomyv2QuickStart()
{
#if ENABLE_PLAYFABSERVER_API
string systemGUID = Environment.GetEnvironmentVariable("SYSTEM_GUID", EnvironmentVariableTarget.Process);
PlayFabSettings.staticSettings.DeveloperSecretKey =
Environment.GetEnvironmentVariable("PLAYFAB_SECRET_KEY", EnvironmentVariableTarget.Process);
#endif
PlayFabSettings.staticSettings.TitleId =
Environment.GetEnvironmentVariable("PLAYFAB_TITLE_ID", EnvironmentVariableTarget.Process);
PlayFab.EconomyModels.EntityKey gameEntityKey = new()
{
Type = "title",
Id = PlayFabSettings.staticSettings.TitleId
};
PlayFabResult<GetEntityTokenResponse> gameTokenRequest = null;
try
{
gameTokenRequest = await PlayFabAuthenticationAPI.GetEntityTokenAsync(new GetEntityTokenRequest()
{
CustomTags = new Dictionary<string, string>
{
#if ENABLE_PLAYFABSERVER_API
{ "server", systemGUID }
#endif
}
});
if (gameTokenRequest.Error != null)
{
throw new Exception(gameTokenRequest.Error.GenerateErrorReport());
}
}
catch (Exception e)
{
Console.WriteLine(string.Format("PlayFab Auth Error: {0}", e));
return;
}
PlayFabAuthenticationContext gameAuthContext = new()
{
EntityToken = gameTokenRequest.Result.EntityToken,
};
}
팁
제목의 관리자로 호출할 때 일명 사용자 로그인의 SessionTicket 없이 전화를 건 사람(귀하, 서버 또는 자동 스크립트)을 기록하는 CustomTags 항목 로깅을 포함하는 것이 가장 좋습니다. 이렇게 하면 PlayFab 로그를 쿼리할 때 변경 내용을 추적하고 문제를 식별하기가 더 쉬워집니다.
2단계 - 카탈로그 설정 구성
카탈로그 설정에는 콘텐츠 유형에서 사용자 생성 콘텐츠에 이르기까지 다양한 구성이 포함됩니다. API를 통해 모두 업데이트 및 검색할 수 있으며 게임 관리자에서 많은 항목을 쉽게 시각화할 수 있습니다.
필수 메타데이터를 입력합니다. 필수 속성은 4개뿐입니다(크리에이터 유형, 타이틀, 시작일 및 콘텐츠 유형).
게시를 선택합니다.
팁
제작자 유형은 기본적으로 "타이틀"으로 설정됩니다. 하지만 플레이어가 게임용 항목을 만드는 경우가 있을 수 있습니다. 이 경우 "title_player_account"를 선택합니다.
JSON 편집 옵션이 있는 필드는 기본적으로 '중립'으로 설정되는 지역화 언어와 같은 메타데이터로 키가 지정됩니다.
모든 날짜는 UTC입니다.
{
"NEUTRAL": "My Game Item",
"en-US": "My Game Item"
}
private static async Task PlayFabEconomyv2QuickStart()
{
// Continued from above example...
CreateDraftItemRequest gameFireItem = new()
{
AuthenticationContext = gameAuthContext,
Item = new CatalogItem()
{
CreatorEntity = gameEntityKey,
Type = "catalogItem",
ContentType = "gameitem",
Title = new Dictionary<string, string>
{
{ "NEUTRAL", "My Amazing Fire Sword" },
{ "en-US", "My Lit Lit Sword" }
},
StartDate = DateTime.Now,
Tags = new List<string>
{
"weapon"
}
},
Publish = true,
CustomTags = new Dictionary<string, string>
{
{ "server", systemGUID }
}
};
PlayFabResult<CreateDraftItemResponse> gameDraftItemResponse = null;
try
{
gameDraftItemResponse = await PlayFabEconomyAPI.CreateDraftItemAsync(gameFireItem);
if (gameDraftItemResponse.Error != null)
{
throw new Exception(gameDraftItemResponse.Error.GenerateErrorReport());
}
}
catch (Exception e)
{
Console.WriteLine(string.Format("PlayFab CreateDraftItem Error: {0}", e));
return;
}
Console.WriteLine(string.Format("PlayFab CreateDraftItem Success: {0}",
JsonConvert.SerializeObject(gameDraftItemResponse.Result, Formatting.Indented)));
}
참고 항목
항목을 초안 상태로 전환할 필요는 없습니다. 초안은 일정 기간 동안 메타데이터를 반복할 것으로 예상되는 경우를 위한 것입니다. 매개 변수 "publish"를 지원하며 "true"로 설정하면 항목을 즉시 게시합니다. 이렇게 하면 패턴에 따라 일부 통화량을 절약할 수 있습니다.
항목이 초안에 있으면 PublishDraftItem 엔드포인트를 사용하여 '게시됨' 상태로 푸시할 수 있습니다(이 단계는 GameManager에서 보이지 않게 처리됨). 항목이 게시되면 검색이 가능하고 공개적으로 사용할 수 있습니다. 게시하려면 CreateDraftItem 응답에서 반환된 ItemId를 사용해야 합니다.
4단계 - 검색하기
Publish 호출이 성공하면 이전에 게시된 ItemId 및 SearchItems 엔드포인트를 사용하여 항목을 검색할 수 있습니다. Catalog/Search API는 API에 제공된 매개 변수 집합을 사용하여 게시된 카탈로그에 대한 검색을 실행하고 페이지가 매겨진 결과 집합을 반환합니다.
Publish을(를) true(으)로 설정하지 않으면 PublishDraftItem을 사용하여 게시된 상태로 푸시해야 합니다. 항목이 게시되면 검색이 가능하고 공개적으로 사용할 수 있습니다. 게시하려면 GetDraftItem 응답에서 반환된 "itemId"를 사용해야 합니다.