Search Unity

Apple은 지난 6월 WWDC(Worldwide Developers Conference)에서 신제품인 Apple로 로그인(Sign in with Apple)을 발표했습니다. 9월 19일 iOS 13 릴리스를 앞두고 App Store 심사 지침도 업데이트되었습니다. 이제 새로운 애플리케이션은 타사 또는 소셜 로그인 서비스를 사용하려면 Apple로 로그인 옵션을 함께 제공해야 하며, 기존 애플리케이션은 2020년 4월부터 이 규정을 준수해야 합니다. 이번 변경사항은 Apple 개발자 사이트에서 자세히 확인할 수 있습니다.

많은 Unity 개발자가 타사 로그인 서비스에 의존하고 있으므로 유니티에서는 새로운 가이드라인을 보다 쉽게 준수할 수 있도록 새로운 에셋 스토어 패키지를 만들었습니다. 새 프로젝트 또는 기존 프로젝트에 이 패키지를 추가하면 새로운 Apple로 로그인 기능을 쉽게 활용할 수 있습니다.

아래에서 다음 내용을 확인해 보세요.

  1. 새로운 에셋 스토어 플러그인 단계별 가이드
  2. 중요 가이드라인 바로가기 링크
  3. 고급 사용 사례에서 서버 측 유효성을 확인하는 방법

모바일 게임에서는 플레이어의 신상 정보를 중요하게 다루며, 이는 플레이어 개인정보 보호의 맥락에서도 중요성이 점차 증가하고 있습니다. 유니티는 더 원활한 플레이어 환경을 구현하기 위해 자체 로그인 시스템 사용자와 타사 로그인 서비스 사용자 모두에 유연성을 제공하고자 합니다. 이번 블로그 포스팅에서는 올해 말에 출시될 User Authentication(사용자 인증) 솔루션을 살펴보실 수 있습니다.

시작하기

Apple로 로그인을 구현하는 새로운 에셋 스토어 패키지가 출시되었습니다. 이 패키지는 iOS 13 API에 새로 추가된 기능인 Apple로 로그인 서비스를 제공합니다.

또한 macOS 10.14(Mojave) 또는 10.15(Catalina) 및 iOS 13.0용 Xcode 11이 필요합니다. Xcode와 iOS 13 다운로드 파일은 여기에서 찾을 수 있습니다. 또한 Apple로 로그인 시작하기 가이드를 참고하시기 바랍니다. 이 가이드에는 Apple의 휴먼 인터페이스 가이드라인(Human Interface Guidelines)과 App Store 심사 지침(App Store Review Guidelines)이 설명되어 있습니다. 또한 개발 중인 애플리케이션에 이 기능을 사용하려면 Apple 개발자 포털에서 Apple로 로그인 기능을 먼저 활성화해야 합니다.

지금 Unity 에셋 스토어에서 새로운 패키지를 다운로드할 수 있습니다.

패키지를 사용하려면 다음 단계를 수행합니다.

1. 패키지를 기존 Unity 프로젝트로 가져옵니다.
2. Apple로부터 로그인에 관한 정보를 수신하기 위해 콜백이 있는 스크립트를 작성합니다. API 사용 방법에 대한 예시는 샘플 스크립트인 “SignInWithApple.cs”를 참고하세요.

3. Unity 프로젝트를 다시 빌드하고 Unity에서 만든 Xcode프로젝트를 엽니다.

4. Xcode 내에서 자격 및 프레임워크 종속성을 설정합니다.

a. 프로젝트 설정에서 “Sign in with Apple” 기능을 추가합니다.

b. AuthenticationServices 프레임워크를 프로젝트에 추가합니다. iOS의 이전 버전을 타겟으로 하는 경우에는, 이 프레임워크를 선택사항(optional)으로 지정합니다.

아래 동영상을 참고하여 위 단계를 수행하세요.

참고: Unity 2019.2 및 이전 버전에서 만든 Xcode 프로젝트에는 UnityFramework 타겟이 없습니다. 대신 Unity-iPhone 타겟에 AuthenticationServices 프레임워크를 추가해야 합니다.

5. 프로젝트 설정이 완료되면 콜백에서 사용 가능한 데이터를 모두 추출하여 프로젝트의 기존 코드베이스와 함께 사용할 수 있습니다.

서버 측 유효성 확인

서버 측 ID 확인이 필요한 게임이나 애플리케이션의 경우, identityToken을 서버로 전달하여 유효성을 확인할 수 있습니다.

Apple의 identityToken은 클라이언트 측에서 생성할 수 없는 JWT(JSON Web Token) 토큰입니다. JWT 토큰이 Apple에서 발행되었고 앱에서 사용하도록 의도되었는지 검증하려면 다음을 확인해야 합니다.

  • 표준 JWT 검증 적용:
  • JWT 토큰의 대상자 확인:
    • Apple로 로그인으로부터 수신한 토큰은 iOS 앱 ID를 대상자로 사용합니다. 토큰이 올바른 앱에 발급되었는지 확인하기 위해서 서버 측에서 토큰의 유효성을 검사해야 합니다.

Apple JWT 페이로드 클레임은 다음과 같습니다.

클레임 열 이름 유형 설명
iss 발행자 문자열 https://appleid.apple.com 값은 항상 https://appleid.apple.com입니다.
aud 대상자 문자열 com.unity.testApp 토큰의 대상자
exp 만료 시간 숫자 1568671600 epoch 시간(1970년 1월 1일 00:00:00 (UTC)부터의 경과 시간을 초로 환산하여 정수로 나타낸 것)을 기준으로 한 토큰 만료 시간
iat 발행 시점 숫자 1568671000 epoch 시간을 기준으로 토큰이 발행된 시점
sub 주체 문자열 001999.80b18c74c3264cad895d0eae181d8f50.1909 인증된 사용자의 유저 ID
c_hash 코드 해시 문자열 agyAh42GdE-O72Y4HUHypg 승인 코드의 해시로 승인 코드의 유효성을 확인할 때만 사용됩니다.
email 이메일 문자열 xxx@privaterelay.appleid.com 사용자의 이메일 주소
email_verified 이메일 검증됨 문자열 true 이메일 검증 여부를 JSON문자열로 표기합니다.
auth_time 인증 시간 숫자 1568671000 epoch 시간을 기준으로 인증이 발생한 시점

프로그래밍 언어는 대부분 JWT 라이브러리가 포함되어 있습니다. JWT 라이브러리는 토큰을 파싱하고 유효성을 확인하는 데 도움을 줍니다.

JavaScript를 사용하여 토큰의 유효성을 확인하려면 다음을 참고하세요. JavaScript는 stdin에서 토큰을 읽고 유효성 확인을 시도합니다. 아래 예에서 “your.app.id” 대신 Apple의 실제 앱 ID를 입력하세요.

향후 계획

곧 출시될 사용자 인증 솔루션에는 Unity에서 호스팅하는 인증 및 승인 API, 백엔드 구현과 무관하게 로그인 및 키 인증 워크플로를 구현하는 Unity 패키지, Apple로 로그인 등에 필요한 UX 관련 요구사항을 해결하는 드롭인 프리팹이 포함됩니다.

첫 번째 사용자 인증 릴리스에서는 이메일 ID/암호를 통한 인증과 통합 ID 제공자로서의 Apple로 로그인(Android 지원 포함)에 대한 지원을 제공합니다. 이 솔루션은 확장 가능하며 커스텀 또는 타사 통합 ID 제공자를 추가할 수 있습니다. 사용자 인증 기능은 Unity 에디터 내에서 단순화된 공용 API를  사용하여 여러 플랫폼에 ID 제공자를 설정하게 해줍니다. 그 결과 몇 주가 소요되던 개발 시간을 수일로 단축할 수 있을 뿐만 아니라 고객에게 더 많은 인증 옵션을 쉽게 제공할 수 있습니다. 소비자가 개인정보 보호를 더욱 중요하게 생각함에 따라 인증 옵션에 대한 요구가 증가할 것으로 전망됩니다.

사용자 인증 패키지의 알파 릴리스는 올해 말에 제공될 예정입니다. 알파 릴리스를 사용하려면 지금 신청하세요.

11 코멘트

코멘트 구독

leave_a_reply to Sylec답글을 취소하려면 여기를 누르십시오.

사용할 수 있는 HTML 태그 및 속성: <a href=""> <b> <code> <pre>

  1. Hello, is it possible to get an identity token from “apple sign in” without getting the apple popup each time ?

  2. it crashed when login success.

    1. Figured out why it’s crashing, I’m getting the same issue.

      Inside of Bulk_Assembly-CSharp_0.cpp, line 21015 there is a method called extern “C” void UserInfo_tC46F8D8850FF36FFAD9060EF32007B2A7F920041_marshal_pinvoke_back. Inside of this method an error is being set on line 21021 unmarshaled.set_error_4(il2cpp_codegen_marshal_string_result(marshaled.___error_4));

      The crash is occurring here because the error is NULL when returned from the server because of a successful login, thus when the parameter is set and returned as null, it triggers a crash.

      Here’s what I did as a temporary workaround:

      Inside of UnitySignInWithApple.m, go to line 92, inside of the UserInfo struct, set data.error hardcoded to “NULL” (string). This no longer crashed after I was successfully signed in. I don’t know what other adverse effects this would have (if any) as I haven’t fully read through the code to see where else this method was invoked, but knowing this delegate method is presented on completion of a login, and there is already a check that verifies success, it should be fine.

      Hope this helps, I’ll submit a bug report to Unity about this.

      1. How can Unity release an official plugin with so many problems?! The two login functions are calling each other infinitely. The native callback functions don’t manage the memory correctly and cause crashes. The coding style is also terrible. Does Unity development team even do code review?

    2. Sorry you are having trouble! We have posted an updated asset store plugin which fixes a number of issues. Please try it out and let us know if you still have any problems.

  3. Great Piece of content, Thanks for sharing with us.

    https://themawto.com

  4. > Rebuild your Unity project and open the Xcode project created by Unity…
    Does that mean that building with Unity Cloud Build wont work?

  5. Good old Apple. Keeps forcing everyone to stay in their ecosystem. They never change.

  6. Why this package is not in Package manager but in Asset store?

    1. We wanted to make this available to all versions of Unity not just newer versions with Package Manager. User Authentication coming later this year will be shipped as a package.

      1. Was just digging for a solution like this … we where looking for a WebAuthenticationBroker / Web Authentication solution for standalone Unity. Is there somewhere we can learn more about the state of this, check out its roadmap, etc.?