기술 자료

지원

Vivox Unity SDK

Vivox Unity SDK

UAS와 함께 Vivox 액세스 토큰 사용

Follow this workflow to use Vivox Access Tokens together with Unity Authentication Services.
읽는 시간 1분최근 업데이트: 14시간 전

어떤 플레이어가 어떤 채널에 액세스할 수 있는지 완전히 제어하려면 자체 백엔드에서 VAT(Vivox 액세스 토큰)를 발급하도록 할 수 있습니다. 필수 조건:
  1. Unity Cloud 프로젝트 설정
    • 프로젝트 ID, 개발 환경 ID, 개발 환경 이름이 있어야 합니다.
  2. UAS 커스텀 ID 제공자 활성화
    • 이 설정에서 서비스 계정 인증정보를 손쉽게 사용할 수 있어야 합니다.
이 다이어그램은 이 설정의 전반적인 플로에 대해 설명합니다.

VAT 생성

  1. Vivox SDK는 커스텀 토큰 제공자 구현을 사용하여 필요할 때마다 백엔드에서 VAT를 요청합니다.
  2. GetTokenAsync
    메서드 내에서 VAT를 요청할 때 백엔드에 대한 요청에
    accessToken
    를 추가합니다.
  3. 백엔드에서 토큰을 확인하고 필요한 정보를 추출한 후 Vivox 액세스 토큰을 생성하여 클라이언트로 반환합니다.

클라이언트 측 설정

게임 클라이언트에서 Vivox SDK의
IVivoxTokenProvider
인터페이스를 구현하는 클래스를 생성하고 이를 VivoxService에 등록합니다.
VivoxService.Instance.SetTokenProvider
를 호출하여 IVivoxTokenProvider 구현을 등록하면 Vivox는 로그인과 같은 작업에 토큰이 필요할 때마다 구현의
IVivoxTokenProvider.GetTokenAsync
메서드를 호출합니다.
페이로드를 생성하는 데 필요한 정보는 오버라이드된
IVivoxTokenProvider.GetTokenAsync
메서드에 대한 입력으로 제공됩니다. 이 정보는 VAT를 작성할 때 사용됩니다.
여전히 서버 측 토큰 제공을 설정하고 오버라이드된
IVivoxTokenProvider.GetTokenAsync
메서드 내에서 토큰을 가져와야 합니다.

구독하기

다음과 같이
IVivoxTokenProvider
구현을 등록한 후 플레이어를 로그인해야 합니다.
VivoxService.Instance.SetTokenProvider(new CustomTokenProvider());

토큰 가져오기

일부가 비어 있더라도 오버라이드된 메서드에 제공된 모든 파라미터를 사용하여 페이로드를 생성하고 이를 보안 서버로 보내 Vivox 액세스 토큰을 생성합니다. 가장 좋은 방법은 모든 파라미터를 보내는 것입니다. 페이로드에 필요한 것만 반환됩니다. 페이로드를
GetTokenAsync
메서드에 대한 입력으로 사용합니다.
또한 서버가 UAS accessToken을 확인하고 이를 통해 Vivox 액세스 토큰을 생성할 수 있도록 요청의 페이로드에 UAS 액세스 토큰을 전송해야 합니다. 특정 토큰의 경우 다른 파라미터가 비어 있습니다. 예를 들어 로그인 토큰의 경우
targetUserUri
channelUri
가 비어 있습니다. 이는 예상된 동작입니다.
다음은 토큰 생성 예제입니다.
public class VoiceManager : MonoBehaviour{ async void Start() { // Must be done before any other Vivox action otherwise tokens will not be generated properly. VivoxService.Instance.SetTokenProvider(new VivoxTokenProvider()); await UnityServices.InitializeAsync(); await VivoxService.Instance.InitializeAsync(); }}class VivoxTokenProvider : IVivoxTokenProvider{ public Task<string> GetTokenAsync(string issuer = null, TimeSpan? expiration = null, string targetUserUri = null, string action = null, string channelUri = null, string fromUserUri = null, string realm = null) { if (!AuthenticationService.Instance.SessionTokenExists) { // Player not logged in! } var accessToken = AuthenticationService.Instance.AccessToken // Implement token fetching logic here. // The method parameters together with the accessToken from the AuthenticationService contain the necessary information for crafting the request payload. // This will be called whenever a token is needed for a Vivox action }}

서버 측 설정

백엔드 서비스에서는 클라이언트가
GetTokenAsync
함수 내에서 호출하여 필요할 때 VAT를 받을 수 있도록 API를 노출해야 합니다.
VAT 생성 방법에 대한 구현 세부 정보를 자세히 알아보려면 보안 서버에서 토큰 생성을 참고하시기 바랍니다. 토큰 페이로드에 대한 자세한 내용은 액세스 토큰 페이로드를 참고하시기 바랍니다. VAT를 생성할 때는 다음 사용자 SIP URI를 대상으로 사용해야 합니다.
sip:.issuer.unity_player_id.unity_environment_id.@domain.vivox.com
issuer
는 Unity 프로젝트의 Vivox 발급자를 나타냅니다.
unity_player_id
는 UAS 플레이어 ID를 나타냅니다.
unity_environment_id
는 Unity Cloud 개발 환경의 개발 환경 ID를 나타냅니다.
두 값 모두
GetTokenAsync
메서드 내에서 클라이언트에서 백엔드로 전송해야 하는 accessToken에서 추출할 수 있습니다.
그런 다음 토큰 ID 확인에 설명된 단계에 따라
accessToken
을 확인해야 합니다.
토큰의
sub
클레임에는 UAS 플레이어 ID가 포함되어 있습니다. 토큰의
aud
클레임에는 개발 환경 ID가 포함되어 있습니다.
aud
값은 대소문자를 구분하는 문자열의 배열이며, 각 문자열은 StringOrURI 값을 포함합니다.
{ "header": { "alg": "RS256", "kid": "<id>", "typ": "JWT" }, "payload": { "aud": [ "upid:{{unity_project_id}}", "envName:{{environment_name}}", "envId:{{unity_environment_id}}" // unity environment id ], "exp": 1617677595, // expires at "iat": 1617673872, // issued at "nbf": 1617673872, // not valid before "sub": "{{unity_player_id}}", // UAS player ID "project_id": "{{unity_project_id}}" // unity project id }}
이를 통해 VAT를 생성하고 클라이언트로 반환할 수 있습니다.