흔히들 혼돈스러워하는 것이 언제 인증 인터페이스(Auth Interface)를 사용해야 하고 언제 연결 인터페이스(Connect Interface)를 사용해야 하느냐는 것인데, 이는 둘 다 비슷한 패턴을 따르는 로그인 함수를 제공하기 때문입니다. 하지만, 둘 다 매우 구체적인 목적으로 사용됩니다.
인증 인터페이스
인증 인터페이스는 에픽 계정에 대한 인증을 처리하므로 에픽 계정 서비스를 설정해야 합니다.
인증 인터페이스를 통한 인증은 EOS에서 친구 및 현재상태, 전자 상거래 기능에 대한 액세스를 제공합니다.
인증 인터페이스는 에픽 계정마다 고유한 에픽 계정 ID를 사용합니다.
연결 인터페이스
연결 인터페이스는 에픽 게임 서비스에 대한 인증을 처리합니다. ID 제공자에 구애받지 않으므로 에픽게임즈, Steam, Xbox Live 등, 여러 ID 제공자와 함께 사용할 수 있습니다.
연결 인터페이스는 에픽 계정에 의존하지 않는 대신 조직의 특정 제품마다 고유한 제품 사용자 ID(PUID)를 사용합니다.
이 두 개의 인터페이스를 가장 쉽게 구분하자면, 인증 인터페이스는 에픽 계정 및 관련 소셜 그래프 API를 처리하고, 연결 인터페이스는 게임을 위해 생성되며 외부 ID와 연결되어야 하는 고유한 사용자 ID를 처리합니다. 연결 인터페이스에서 사용하는 ID는 소셜 그래프가 아니므로 여러 ID에 연결된 크로스플레이와 크로스프로그레션에 사용될 수 있으며, 인증 인터페이스를 전혀 사용하지 않고도 사용할 수 있습니다.
마지막으로, 사용자가 (아직) 존재하지 않는 경우에 이러한 인터페이스 중 하나를 사용해야 할 수 있는 시나리오도 있습니다. 예를 들어, 서버에서 웹 API를 통해 인증 인터페이스와 연결 인터페이스를 모두 사용하여 제품 소유권을 검증하거나 음성 채팅방을 생성하고 관리할 수 있습니다. 또 다른 시나리오로는, 플레이어가 EOS 사용 전에 계정에 로그인하도록 강제하지 않으려는 경우가 있습니다. 즉, 연결 인터페이스의 디바이스 ID API를 사용하여 플레이어가 사용할 수 있는 영구 가계정을 생성하여 바로 게임을 플레이할 수 있게 하는 경우입니다. 이 디바이스 ID 시나리오는 추후 연재글에서 자세히 살펴보겠습니다.
인증 인터페이스를 사용하여 사용자를 인증하고 사용자의 현재상태 정보를 가져오거나 설정하고 사용자의 친구를 표시하려면, 먼저 개발자 포털에서 애플리케이션을 구성하여 EAS를 설정해야 합니다. 애플리케이션 환경설정은 세 부분으로 나뉩니다. 바로 브랜드 세팅(Brand Settings)과 권한(Permissions), 연동된 클라이언트(Linked Clients)입니다. 브랜드 세팅은 에픽게임즈 스토어에 제품을 퍼블리싱하는 데에만 필요하므로, 지금은 권한과 연동된 클라이언트만 완료하면 됩니다.
var userInfoInterface = App.Settings.PlatformInterface.GetUserInfoInterface(); if (userInfoInterface == null)
{
Debug.WriteLine("Failed to get user info interface"); return;
}
var queryUserInfoOptions = new QueryUserInfoOptions()
{
LocalUserId = loginCallbackInfo.LocalUserId,
TargetUserId = loginCallbackInfo.LocalUserId
};
ViewModelLocator.Main.StatusBarText = "Getting user info...";
함수 전체에서 ViewModelLocator.Main.StatusBarText를 사용하여 UI에 상태 표시줄 텍스트를 설정합니다. 그러면 텍스트가 비어 있지 않을 때 진행률 표시줄이 자동으로 표시됩니다.
PlatformInterface.GetAuthInterface()를 사용하여 함수 전체에서 사용할 수 있는 인증 인터페이스의 인스턴스를 가져옵니다.
EOS의 모든 인터페이스 함수는 'options' 클래스를 인스턴스화해야 하며, 이는 종종 콜백 메서드 이벤트 핸들러와 함께 서비스 호출에 전달됩니다. 예를 들어, ApplicationSettings.cs의 크리덴셜과 범위를 사용하여 LoginOptions()를 인스턴스화하고 authInterface.Login()에 전달합니다.
람다 콜백 메서드를 authInterface.Login()에 전달하여 로그인 응답을 처리하며, 이는 타이머가 업데이트될 때 MainWindow.xaml.cs에서 App.Settings.PlatformInterface?.Tick() 호출을 통해 트리거됩니다.
콜백에서 ResultCode를 확인하고 이 코드가 Result.Success이면 로그인 호출이 성공한 것입니다. 그렇지 않은 경우에는, 디버그 출력에 실패 메시지와 해당 ResultCode를 작성합니다.
로그인이 성공하면, MainViewModel 인스턴스에 loginCallbackInfo.LocalUserId를 저장하므로, 이를 애플리케이션의 다른 서비스 호출에서 사용할 수 있습니다.
마지막으로, PlatformInterface.GetUserInfoInterface()를 사용하여 UserInfo Interface의 인스턴스를 가져옵니다. 이 인스턴스는 userInfoInterface.QueryUserInfo()를 통해 DisplayName 같은 추가 사용자 정보를 가져오는 데 사용할 수 있습니다.
ViewModelLocator.RaiseAuthCanExecuteChanged();가 해석되지 않았는데요. 이는 다음에 다루겠습니다.
프로젝트 루트에 'Commands'라는 폴더를 생성하고 'AuthLoginCommand.cs'라는 클래스를 추가합니다. 이는 MainWindow.xaml에서 로그인 버튼으로 트리거되는 명령입니다.
public classAuthLoginCommand : CommandBase
{ public override bool CanExecute(object parameter)
{ return string.IsNullOrWhiteSpace(ViewModelLocator.Main.AccountId);
}
public override voidExecute(object parameter)
{
AuthService.AuthLogin();
}
}
MainViewModel.cs'를 열고 다음 멤버를 추가합니다.
public AuthLoginCommand AuthLogin { get; set; }
또한, 다음 라인을 추가하여 'MainViewModel()' 생성자에서 명령을 인스턴스화합니다.
AuthLogin = newAuthLoginCommand();
이제 사용자가 로그인하지 않은 경우에만 로그인 버튼이 활성화되도록 'ViewModelLocator.cs'를 열고 'RaiseAuthCanExecuteChanged()' 함수를 구현합니다.
public static voidRaiseAuthCanExecuteChanged()
{
Main.AuthLogin.RaiseCanExecuteChanged();
}
이제 애플리케이션을 실행하고 로그인 버튼을 클릭하면 에픽 계정을 통해 인증하는 브라우저 창이 트리거됩니다. 저희 애플리케이션은 개발 단계에 있으므로, 개발자 포털에서 해당 조직에 속한 에픽 계정으로만 로그인할 수 있습니다. 로그인하면, 브랜드 리뷰(Brand Review)를 거치지 않았기 때문에 검증되지 않은 애플리케이션(Unverified Application)이라는 공지가 표시됩니다. 계속하는 경우, 제품이 액세스를 요청하는 범위(이 경우, 기본 프로필 정보)를 보여주는 사용자 동의 대화창이 표시됩니다. 허용(Allow)을 클릭하면 브라우저가 닫히고, DisplayName을 검색하여 앱 UI에서 AccountId와 함께 표시하는 콜백 메서드가 트리거됩니다.
아래에서 이 연재글에 쓰인 코드를 확인할 수 있습니다. Visual Studio 2019에서 EOS를 위한 C# 솔루션 설정하기 문서에 있는 C# 솔루션 설정하기 섹션의 5단계와 10단계에 따라 SDK를 솔루션에 추가하고, SDK 크리덴셜을 포함하도록 ApplicationSettings.cs를 편집해야 합니다.