Oculus(Meta Quest)
최소 SDK 버전: 2.3.1
이 문서에서는 게임에서 Oculus 계정을 사용해 플레이어의 인증을 설정하는 다음 시나리오에 대해 설명합니다.
- Oculus 로그인 설정
- 기존 사용자 로그인 또는 새 사용자 생성
- 사용자를 익명 로그인에서 커스텀 ID 제공업체를 통한 플랫폼 로그인으로 업데이트
게임에서 플레이어에게 Oculus 로그인 옵션을 제공하려면 Oculus Developer Dashboard에서 앱을 생성하고 App ID, App Secret, nonce, userId를 확인합니다.
패키지를 추가하려면 다음 섹션을 참고하십시오.
Oculus 로그인 설정
Unity Authentication의 ID 제공업체로 Oculus를 설정하려면 다음을 따르십시오.
- Unity 에디터 메뉴에서 Edit > **Project Settings…**로 이동한 후, 내비게이션 메뉴에서 Services > Authentication을 선택합니다.
- ID Providers를 Oculus로 설정한 후, Add를 클릭합니다.
- App ID 텍스트 필드에 앱 ID를 입력합니다.
- App Secret 텍스트 필드에 앱 비밀 정보를 입력합니다.
로그인된 Oculus 사용자를 가져오고 nonce를 생성하려면 아래 예시 코드를 참고하십시오.
참고: 참조된 패키지는 Unity가 개발하거나 보유, 운영하지 않습니다. Unity가 제공하지 않는 패키지의 사용법은 베스트 프랙티스를 참고하십시오.
- 헤드셋을 착용하고 Settings > System > Developer로 이동합니다.
- USB Connection Dialog 옵션을 활성화합니다.
- USB-C 케이블을 사용해 헤드셋을 컴퓨터에 연결합니다.
- 데이터 액세스 권한을 요청하는 창이 표시되면 Allow를 클릭합니다.
- 기기가 성공적으로 연결되었는지 확인하기 위해 Unity 프로젝트를 열고 File > Build Settings로 이동합니다. Platform 목록에서 Android를 선택하고 Switch Platform을 클릭합니다.
- Run Device 목록에서 Oculus 헤드셋을 선택합니다. 목록에 헤드셋이 없는 경우 Refresh를 클릭해 목록을 새로 고칩니다.
- 이 Oculus Integration 패키지를 설정하고 설치합니다. Oculus Developer Center에서도 패키지를 찾을 수 있습니다.
- 프로젝트에 임포트한 후, 에디터의 메뉴 바에서 Oculus > Platform > Edit Settings로 이동합니다. Oculus 앱 ID를 입력해야 합니다.
using UnityEngine;
using Oculus.Platform;
using Oculus.Platform.Models;
public class OculusAuth : MonoBehaviour
{
private string userId;
private void Start()
{
Core.AsyncInitialize().OnComplete(OnInitializationCallback);
}
private void OnInitializationCallback(Message<PlatformInitialize> msg)
{
if (msg.IsError)
{
Debug.LogErrorFormat("Oculus: Error during initialization. Error Message: {0}",
msg.GetError().Message);
}
else
{
Entitlements.IsUserEntitledToApplication().OnComplete(OnIsEntitledCallback);
}
}
private void OnIsEntitledCallback(Message msg)
{
if (msg.IsError)
{
Debug.LogErrorFormat("Oculus: Error verifying the user is entitled to the application. Error Message: {0}",
msg.GetError().Message);
}
else
{
GetLoggedInUser();
}
}
private void GetLoggedInUser()
{
Users.GetLoggedInUser().OnComplete(OnLoggedInUserCallback);
}
private void OnLoggedInUserCallback(Message<User> msg)
{
if (msg.IsError)
{
Debug.LogErrorFormat("Oculus: Error getting logged in user. Error Message: {0}",
msg.GetError().Message);
}
else
{
userId = msg.Data.ID.ToString(); // do not use msg.Data.OculusID;
GetUserProof();
}
}
private void GetUserProof()
{
Users.GetUserProof().OnComplete(OnUserProofCallback);
}
private void OnUserProofCallback(Message<UserProof> msg)
{
if (msg.IsError)
{
Debug.LogErrorFormat("Oculus: Error getting user proof. Error Message: {0}",
msg.GetError().Message);
}
else
{
string oculusNonce = msg.Data.Value;
// Authentication can be performed here
}
}
}
참고: Oculus 헤드셋을 개발자 모드로 설정해야 합니다. 개발자 모드로 설정하려면 개발에 사용하려는 개발자 계정으로 로그인해야 합니다. 여기에서 Oculus 개발자 계정을 생성할 수 있습니다.
기존 플레이어 로그인 또는 신규 플레이어 생성
SignInWithOculusAsync
메서드를 사용하여 다음 중 하나를 수행할 수 있습니다.
- Oculus 자격 증명을 사용해 새 Unity Authentication 플레이어 생성
- Oculus 자격 증명을 사용해 기존 플레이어 로그인
프로젝트에서 자격 증명과 연결된 Unity Authentication 플레이어가 존재하지 않는 경우, SignInWithOculusAsync
가 새 플레이어를 생성합니다. 프로젝트에서 자격 증명과 연결된 Unity Authentication 플레이어가 존재하는 경우, SignInWithOculusAsync
가 해당 플레이어 계정으로 로그인합니다.
이 기능은 캐시된 플레이어를 고려하지 않으며, SignInWithOculusAsync
가 캐시된 플레이어를 대체합니다.
async Task SignInWithOculusAsync(string nonce, string userId)
{
try
{
await AuthenticationService.Instance.SignInWithOculusAsync(nonce, userId);
Debug.Log(“SignIn is successful.”);
}
catch (AuthenticationException ex)
{
// Compare error code to AuthenticationErrorCodes
// Notify the player with the proper error message
Debug.LogException(ex);
}
catch (RequestFailedException ex)
{
// Compare error code to CommonErrorCodes
// Notify the player with the proper error message
Debug.LogException(ex);
}
}
플레이어를 익명 로그인에서 Oculus 계정 로그인으로 업데이트
익명 인증을 설정한 후, 플레이어가 Oculus 계정을 생성하고 Oculus 계정을 통해 로그인하도록 업그레이드하려는 경우, 게임이 플레이어에게 Oculus 로그인 창을 표시하고 Oculus에서 세션 티켓을 가져와야 합니다. 그런 다음 LinkWithOculusAsync
API를 호출해 플레이어를 Oculus 세션 티켓에 연결합니다.
SDK에 캐시된 플레이어가 존재하는 경우, 캐시된 플레이어를 Oculus 계정에 연결할 수 있습니다.
SignInAnonymouslyAsync
를 사용해 캐시된 플레이어의 계정에 로그인합니다.LinkWithOculusAsync
를 사용해 캐시된 플레이어의 계정을 Oculus 계정에 연결합니다.
캐시된 플레이어에 대한 자세한 내용은 캐시된 사용자 로그인 섹션을 참고하십시오.
async Task LinkWithOculusAsync(string nonce, string userId)
{
try
{
await AuthenticationService.Instance.LinkWithOculusAsync(nonce, userId);
Debug.Log(“Link is successful.”);
}
catch (AuthenticationException ex) when (ex.ErrorCode == AuthenticationErrorCodes.AccountAlreadyLinked)
{
// Prompt the player with an error message.
Debug.LogError(“This user is already linked with another account. Log in instead.”);
}
catch (Exception ex)
{
Debug.LogError(“Link failed.”);
Debug.LogException(ex);
}
}
Oculus 계정 연결 해제
플레이어가 Oculus 계정 연결을 해제할 수 있도록 UnlinkOculusAsync
API를 사용합니다. 연결이 해제되면 계정이 다른 ID에 연결되지 않은 경우 익명 계정으로 전환됩니다.
async Task UnlinkOculusAsync(string idToken)
{
try
{
await AuthenticationService.Instance.UnlinkOculusAsync(idToken);
Debug.Log("Unlink is successful.");
}
catch (AuthenticationException ex)
{
// Compare error code to AuthenticationErrorCodes
// Notify the player with the proper error message
Debug.LogException(ex);
}
catch (RequestFailedException ex)
{
// Compare error code to CommonErrorCodes
// Notify the player with the proper error message
Debug.LogException(ex);
}
}