Unity에서 Apple 로그인 붙이기 – 생각보다 간단했다
개요
iOS 출시를 앞두고 Apple 로그인을 구현해야 했다. 애플 정책상 다른 소셜 로그인이 있으면 Apple 로그인도 필수로 넣어야 한다는 건 알고 있었지만, 막상 시작하려니 막막했다. 다행히 오픈소스 라이브러리 하나로 생각보다 쉽게 해결할 수 있었다.
패키지 설치
일단 가장 먼저 할 일은 패키지 설치다. Unity Package Manager를 열고 좌측 상단의 + 버튼을 누른 다음, “Add package from git URL”을 선택한다.
그리고 다음 URL을 입력하면 끝이다.
https://github.com/lupidan/apple-signin-unity.git?path=Source#1.5.0이 라이브러리는 Apple Sign-In을 Unity에서 쉽게 쓸 수 있게 래핑해둔 거라서, 네이티브 코드 건드릴 필요 없이 C#만으로 처리할 수 있다.
AppleLoginManager 구현
다음은 매니저 클래스를 만들어야 한다. 싱글톤으로 만들어서 어디서든 접근할 수 있게 했다.
#if UNITY_IOS
using AppleAuth;
using AppleAuth.Native;
using AppleAuth.Enums;
using AppleAuth.Interfaces;
using AppleAuth.Extensions;
#endif
using Firebase.Extensions;
public class AppleLoginManager : PersistentSingleton<AppleLoginManager>
{
#if UNITY_IOS
public IAppleAuthManager appleAuthManager;
#endif
public void InitializeAppleAuthManager()
{
#if UNITY_IOS
if (AppleAuthManager.IsCurrentPlatformSupported)
{
var deserializer = new PayloadDeserializer();
appleAuthManager = new AppleAuthManager(deserializer);
}
#endif
}
#if UNITY_IOS
void Update()
{
appleAuthManager?.Update();
}
#endif
}
여기서 중요한 건 Update() 함수다. Apple Auth Manager는 매 프레임마다 업데이트를 돌려줘야 콜백이 제대로 동작한다. 이거 빼먹으면 로그인 버튼 눌러도 아무 반응 없어서 한참 헤맸던 기억이 있다.
초기화 타이밍
앱 시작할 때 로그인 화면 들어가기 직전에 한 번 초기화를 해줘야 한다.
AppleLoginManager.Instance.InitializeAppleAuthManager();나는 게임 인트로 씬에서 호출했는데, 타이밍은 프로젝트 구조에 맞게 조정하면 된다.
실제 로그인 처리
드디어 본격적인 로그인 로직이다. 버튼을 누르면 다음 함수를 호출하면 된다.
public void SignInWithApple()
{
if (AppleLoginManager.Instance.appleAuthManager == null)
AppleLoginManager.Instance.InitializeAppleAuthManager();
var loginArgs = new AppleAuthLoginArgs(LoginOptions.IncludeEmail | LoginOptions.IncludeFullName);
AppleLoginManager.Instance.appleAuthManager.LoginWithAppleId(loginArgs, OnAppleAuthSuccess, OnAppleAuthFailure);
}
private void OnAppleAuthSuccess(ICredential credential)
{
if (credential is IAppleIDCredential appleIDCredential)
{
string idToken = Encoding.UTF8.GetString(appleIDCredential.IdentityToken);
string authorizationCode = Encoding.UTF8.GetString(appleIDCredential.AuthorizationCode);
// TODO: success
}
}
private void OnAppleAuthFailure(IAppleError error)
{
Debug.LogError("Apple Sign-In failed: " + error.ToString());
}LoginOptions.IncludeEmail | LoginOptions.IncludeFullName은 사용자의 이메일과 이름 정보를 요청하는 옵션이다. 첫 로그인 때만 받아올 수 있으니 꼭 서버에 저장해두는 게 좋다.
성공하면 idToken과 authorizationCode를 받을 수 있는데, 이걸 서버로 보내서 Firebase나 백엔드 인증 처리를 하면 된다.
마무리
생각보다 간단하게 끝났다. Xcode에서 Sign In with Apple 활성화하고 시뮬레이터에서는 Apple 로그인이 제대로 안 될 수 있으니 실기기에서 테스트하고.

Leave a Reply
Want to join the discussion?Feel free to contribute!