- 네트워크 설명자 지식
- 유효한 PlayFab
title_player_account엔터티 토큰 보유 - 초대 식별자 지식
- 지정된 초대에 토큰에 대한 PlayFab entity ID가 있거나, 지정된 초대가 열린 초대인 경우
초대
초대(PartyInvitation)는 네트워크 내의 객체로 사용자에게 네트워크에 대한 액세스를 부여합니다. 초대는 네트워크의 수명 동안 생성되고 철회될 수 있습니다. 초대에는 생성자, 고유한 식별자, 철회 가능성 설정, 그리고 엔터티 ID로 지정된 선택적 사용자 집합이 있습니다. 네트워크는 활성 초대를 원하는 만큼 가질 수 있으며, 하나도 없을 수도 있습니다. 네트워크는 항상 초기 초대와 함께 생성됩니다.
초대 수명
초대는 생성된 시점부터 철회될 때까지 활성 상태입니다.생성
초대를 만드는 방법에는 두 가지가 있습니다. 첫 번째 방법은PartyManager::CreateNewNetwork()를 호출하는 것입니다. 네트워크에 참가하려면 초대가 필요하므로 네트워크가 생성될 때 초대가 존재해야 합니다. 이 초대는 초기 초대로 알려져 있으며 아래에 설명된 몇 가지 특별한 속성이 있습니다. 두 번째 방법은 PartyNetwork::CreateInvitation()을 호출하는 것입니다.
초대의 생성자는 PartyNetwork::CreateInvitation() 호출 시 지정된 사용자입니다. 초기 초대에는 생성자가 없습니다.
초대가 생성되면(또는 활성 초기 초대가 있는 네트워크에 참가할 때) PartyInvitationCreatedStateChange가 생성됩니다.
초기 초대는 네트워크 생성자가 참가하는 것을 암시적으로 허용하지 않습니다. 열린 초대를 사용하지 않는 한 사용자 목록에 생성자의 엔터티 ID를 포함해야 합니다.
열거
활성 초대 열거는PartyNetwork::GetInvitations()를 사용하여 수행됩니다. 로컬 디바이스에서 만든 초대와 여전히 활성 상태인 초기 초대만 열거될 수 있습니다.
철회
초대는PartyNetwork::RevokeInvitation()을 호출하여 철회됩니다. 초대는 생성자만 철회할 수 있으며, 초기 초대는 예외로 어떤 사용자든 철회할 수 있습니다. 또한 초대는 이를 생성한 사용자가 네트워크에서 제거될 때 자동으로 철회됩니다.
초대가 철회되면 초대를 볼 수 있었던 모든 디바이스에서 PartyInvitationRevokedStateChange가 생성됩니다.
초기 초대가 철회되면 다시 만들 수 없습니다. 그 식별자는 새 초대에 재사용될 수 있지만, 그 새 초대는 초기 초대의 특별한 속성을 갖지 않습니다.
초대를 철회해도 이미 네트워크에 참가한 디바이스와 사용자에게는 영향이 없습니다. 사용자나 디바이스를 네트워크에서 제거하려면
PartyNetwork::KickUser() 또는 PartyNetwork::KickDevice()를 사용하세요. 이 메서드는 아직 구현되지 않았습니다.초대 구성
초대의 구성은PartyInvitationConfiguration 구조체를 사용하여 생성 시 지정됩니다.
식별자
각 초대에는 네트워크 내에서 고유하게 식별하는 식별자가 있습니다. 초대를 만들 때 식별자를 지정하지 않으면 Party가 하나를 할당합니다.PartyManager::CreateNewNetwork() 호출의 경우 할당된 식별자는 out 매개 변수로 반환되며 네트워크 생성이 완료될 때 PartyCreateNewNetworkCompletedStateChange에도 보고됩니다. PartyManager::CreateInvitation() 호출의 경우 할당된 식별자는 invitation out 매개 변수 또는 초대 생성이 완료될 때 PartyCreateInvitationCompletedStateChange의 invitation 필드에서 검색할 수 있습니다.
초대 식별자는 고유해야 하지만, 초대가 철회된 후에는 그 식별자를 새 초대 생성 시 재사용할 수 있습니다.
초기 초대와 기타 초대
초대 유형은 하나뿐이지만PartyManager::CreateNewNetwork() 호출로 생성된 초기 초대는 나중에 PartyNetwork::CreateInvitation()을 통해 생성된 초대와 조금 다릅니다. 차이점은 아래 표에 요약되어 있습니다.
(초기 초대가 아닌) 초대는 개인 정보 보호상의 이유로 다른 디바이스에서 숨겨집니다. 이것이 왜 중요한지에 대한 예는 친구 목록 사용 패턴을 참조하세요.
사용자 및 열린 초대
초대에는title_player_account 엔터티 ID로 지정된 0명 이상의 사용자가 포함됩니다. 초대에 사용자가 포함되어 있으면 그 초대는 해당 사용자에게만 네트워크 참가 액세스를 부여합니다. 그러나 초대에 사용자가 포함되지 않은 경우, 이는 열린 초대입니다. 열린 초대의 식별자로 어떤 사용자든 네트워크에 참가할 수 있습니다.
게임 콘솔과 같은 다중 사용자 디바이스에서는 올바른 사용자와 함께 올바른 초대를 사용해야 합니다. 각 초대에 지정된 사용자에 따라, 디바이스의 서로 다른 사용자가 PartyNetwork::AuthenticateLocalUser()를 통해 사용자를 네트워크에 인증할 때 서로 다른 초대를 사용해야 할 수 있습니다.
변경 불가능성
초대가 생성되면 그 구성은 변경할 수 없습니다. 그러나 초대가 철회된 후에는 동일한 식별자이지만 다른 구성으로 또 다른 초대를 만들 수 있습니다. 동적 단일 초대 사용 패턴을 참조하세요.사용 패턴
PlayFab Party 초대는 단순하지만 유연합니다. 네트워크에 대한 다양한 액세스 모델을 달성하기 위해 이를 사용하는 효과적인 방법이 많이 있습니다.열린 네트워크
열린 네트워크는 이해하고 구현하기 가장 간단합니다. 네트워크 설명자와 초대 식별자를 가진 누구나 참가할 수 있게 합니다.PartyManager::CreateNewNetwork() 호출 시 initialInvitationConfiguration 매개 변수에 null을 전달하여 열린 네트워크를 만듭니다. 열린 초대의 식별자는 out 매개 변수로 반환됩니다. 네트워크 생성이 완료되면 네트워크 설명자와 초대 식별자를 공유하여 사용자가 참가할 수 있게 합니다.
원하는 경우 나중에 초기 초대를 철회하여 언제든지 네트워크를 닫을 수 있습니다.
정적 사용자 목록
Backfill이 없는 매치메이킹으로 만든 게임과 같이 모든 플레이어를 사전에 아는 게임의 경우, 정적 사용자 목록은 쉽고 효과적인 패턴입니다. 이는 게임 시작 전에 식별된 사용자만 네트워크에 참가할 수 있게 합니다.PartyInvitationConfiguration 구조체를 만들고 알려진 사용자를 entityIds 필드에 추가합니다. 이 구조체를 PartyManager::CreateNewNetwork()에 전달합니다. 네트워크 생성이 완료되면 네트워크 설명자와 초대 식별자를 공유하여 사용자가 참가할 수 있게 합니다.
일대일 초대
기존 사용자가 다른 사용자를 개별적으로 초대하는 게임에서는 일대일 초대 패턴이 효과적이고 간단합니다.PartyInvitationConfiguration 구조체를 만들고 생성자만 entityIds 필드에 추가합니다. 이 구조체를 PartyManager::CreateNewNetwork()에 전달합니다. 생성자가 네트워크에 연결되면 원하는 경우 초기 초대를 철회할 수 있습니다. 또는 네트워크의 생성자가 열린 네트워크를 만들고 연결하는 즉시 초기 초대를 철회할 수 있습니다.
네트워크에 참가해야 하는 각 사용자에 대해 또 다른 PartyInvitationConfiguration 구조체를 만듭니다. 이러한 구조체를 PartyNetwork::CreateInvitation()에 전달하여 초대를 만듭니다. 각 사용자에게 네트워크 설명자와 그들의 특정 초대에 대한 초대 식별자를 함께 공유합니다. 사용자가 참가함에 따라 그들은 이 패턴을 반복하여 더 많은 사용자를 초대할 수 있습니다.
사용자가 참가하면 원하는 경우 그들의 특정 초대를 철회할 수 있습니다.
친구 목록
일대일 초대를 만들지 않고도 각 사용자의 친구가 쉽게 참가할 수 있도록 하려는 게임의 경우, 사용자의 전체 친구 목록을 포함하는 초대를 만들 수 있습니다. 네트워크에 연결한 후 각 사용자는PartyInvitationConfiguration 구조체를 만들고 각 소셜 플랫폼 친구를 entityIds 필드에 추가합니다. 이 구조체를 PartyNetwork::CreateInvitation()에 전달하고, 네트워크 설명자와 초대 식별자를 친구들과 공유합니다. 사용자의 친구 목록이 변경되면 초대를 철회하고 새 친구 목록으로 새 초대를 만들어야 합니다.
동적 단일 초대
많은 게임에는 특정 네트워크에 누가 참가해야 하는지를 제어하는 lobby 또는 기타 외부 서비스가 있습니다. 외부 서비스와 네트워크를 동기화하려면 동적 단일 초대 패턴을 사용할 수 있습니다. 이 패턴은 잘 알려진 식별자를 가진 단일 초대를 사용합니다. 이 패턴에는 두 가지 변형이 있습니다. 외부 서비스가 네트워크의 초대를 관리할 단일 사용자를 선택하거나, 모든 사용자에게 초대를 관리하려고 시도하도록 요청할 수 있습니다. 두 경우 모두 네트워크에 있어야 하는 사용자 집합이 변경될 때마다 외부 서비스가 사용자에게 알리고, 사용자는 현재 초대를 철회하고 동일한 잘 알려진 식별자를 사용하되 새로운 전체 사용자 집합을 포함하는 새 초대를 만들려고 시도합니다.단일 사용자 관리
한 사용자가 현재 초대를 철회하고 새 초대를 만드는 책임을 지면 예측 가능한 초대 소유권으로 이어집니다. 그러나 외부 서비스는 다음을 수행해야 합니다.- 초대를 관리할 사용자를 선택합니다.
- 이전 사용자가 네트워크를 떠날 때 새 사용자를 선택합니다.
모든 사용자 관리
모든 사용자가 초대를 관리하려고 시도하면 예측할 수 없는 초대 소유권으로 이어지지만, 외부 서비스가 단일 사용자를 선택할 필요가 없어집니다. 대신 각 디바이스의 사용자는 다음을 수행합니다.- 현재 초대를 철회하려고 시도합니다. 초기 초대의 경우 모든 사용자가 이를 시도하지만 하나만 성공합니다. 다른 초대의 경우 초대가 다른 사용자에게 보이지 않으므로 마지막 초대를 만든 사용자만 철회를 시도할 수 있습니다.
- 새 초대를 만들려고 시도합니다. 초대는 고유한 식별자를 가져야 하므로 사용자 중 한 명만 성공합니다. 그 사용자는 다른 디바이스에 초대가 보이지 않으므로, 자신이 새 초대 소유자임을 다른 사용자에게 알려야 합니다.
- 현재 초대의 생성자가 생성 디바이스를 떠나면 모든 사용자가 다시 새 초대를 만들려고 시도해야 합니다.
초대를 철회하고 동일한 식별자로 새 초대를 만들 때, 초대 식별자가 무효인 짧은 시간 창이 있습니다. 이 접근 방식을 사용하는 경우 합리적인 대기 기간 후
PartyNetwork::AuthenticateLocalUser() 호출이 실패하면 재시도해야 합니다.롤링 열린 초대
특정 네트워크에 누가 참가해야 하는지를 lobby 또는 기타 외부 서비스가 제어하는 게임의 경우, 동적 단일 초대 패턴의 대안은 롤링 열린 초대 패턴입니다. 이 패턴에는 항상 단일 열린 초대가 있습니다. 이전에 참가가 허용된 사용자가 외부 서비스의 사용자 목록에서 제거될 때마다 초대가 철회되고 새 식별자로 다시 만들어집니다. 초대 식별자는 암호처럼 작동하며 유사하게 보호되어야 합니다. 패턴은 다음 단계로 구현할 수 있습니다.- 외부 서비스가 네트워크를 만들 디바이스를 선택하고 사용할 초대 식별자를 지정합니다.
- 외부 서비스가 네트워크에 참가해야 하는 다른 모든 사용자에게 초대 식별자를 보냅니다.
- 새 사용자가 네트워크에 참가해야 할 때 외부 서비스는 그 사용자와 현재 초대 식별자를 공유합니다.
- 현재 초대를 가진 사용자가 더 이상 참가가 허용되지 않아야 할 때 외부 서비스는 다음을 수행하여 “암호를 변경”해야 합니다.
- 새 초대 식별자를 선택합니다.
- 사용자 중 한 명 또는 모두에게 현재 초대를 철회하고 선택된 초대 식별자로 새 초대를 만들도록 요청합니다. 단일 사용자 관리와 모든 사용자 관리에 대한 논의는 동적 단일 초대를 참조하세요.
- 이제 네트워크에 참가가 허용되어야 하는 모든 사용자와 새 초대 식별자를 공유합니다.
