Unity에서 Firebase Auth 사용해보기

Firebase의 인증 기능 중, 익명과 구글 로그인을 해보자.

사전 준비

Firebase에 프로젝트 등록

유니티 앱의 Keystore를 생성한다.



Firebase 앱 등록정보에 SHA1 지문 정보가 필요하므로 저장한 keystore에서 SHA1 지문을 미리 뽑아둔다.

keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore> 예시) G:\project\firebase>keytool -exportcert -list -v -alias firebase -key store user.keystore 키 저장소 비밀번호 입력: 별칭 이름: firebase 생성 날짜: 2017. 7. 20 항목 유형: PrivateKeyEntry 인증서 체인 길이: 1 인증서[1]: 소유자: O=DefaultCompany 발행자: O=DefaultCompany 일련 번호: 6fb1b55 적합한 시작 날짜: Thu Jul 20 10:26:02 KST 2017, 종료 날짜: Fri Jul 08 10:26:02 K ST 2067 인증서 지문: MD5: 31:FB:A8:D6:B7:39:53:5F:4F:C4:FB:96:97:10:60:EC SHA1: FA:A3:6F:CA:2E:DF:BF:A5:A0:43:05:05:2D:F0:04:12:BE:A8:23:38 SHA256: F5:80:E8:BB:53:B4:FC:C2:5D:A0:82:5A:12:1A:15:24:89:55:B7:09:C6: 1C:34:E4:E3:C6:72:53:3A:08:BF:BC 서명 알고리즘 이름: SHA1withRSA 버전: 3

Firebase 콘솔화면에서 프로젝트 생성과 앱 추가


미리 뽑아 두었던 앱의 SHA1 지문 등록


유니티 프로젝트에 넣어야 하므로 google-services.json파일을 다운로드 해둔다.


firebase unity3d sdk 다운로드

FirbaseAuth.unitypackage설치


google-services.json을 유니티 프로젝트에 포함

예시에서는 Assets\Plugins\Android\Firebase에 포함시켰다.



Firebase에서 로그인방법 중 익명과 구글 항목을 활성화 시킴


구글 로그인은 셋팅을 좀더 해줘야 한다.

구글 플레이 서비스 콘솔에서 Outh2 클라이언트 ID를 복사

여기서 주의 할 점은, Web client* 이름의 클라이언트 ID를 복사해야 한다.

이걸 몰라서 토큰키를 받지 못하는 현상을 겪었다.


복사한 클라이언트 ID값을 유니티 구글 플레이 설정 창에 넣기


유니티 코드

public void OnClickLoginAnonymous() { Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; auth.SignInAnonymouslyAsync().ContinueWith(task => { if (task.IsCompleted && !task.IsCanceled && !task.IsFaulted) { // User is now signed in. Firebase.Auth.FirebaseUser newUser = task.Result; Debug.Log(string.Format("FirebaseUser:{0}\nEmail:{1}", newUser.UserId, newUser.Email)); } else { Debug.Log("failed"); } }); } public void OnClickGoogleLogin() { InitGooglePlayService(); Social.localUser.Authenticate(success => { Debug.Log(string.Format("{0}:{1}", success, Social.localUser.userName)); if (success == false) return; StartCoroutine(coLogin()); }); } void InitGooglePlayService() { PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() // requests an ID token be generated. This OAuth token can be used to // identify the player to other services such as Firebase. .RequestIdToken() .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.DebugLogEnabled = true; PlayGamesPlatform.Activate(); } IEnumerator coLogin() { Debug.Log(string.Format("\nTry to get Token...")); while (System.String.IsNullOrEmpty(((PlayGamesLocalUser)Social.localUser).GetIdToken())) yield return null; string idToken = ((PlayGamesLocalUser)Social.localUser).GetIdToken(); Debug.Log(string.Format("\nToken:{0}", idToken)); Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(idToken, null); auth.SignInWithCredentialAsync(credential).ContinueWith( task => { if (task.IsCompleted && !task.IsCanceled && !task.IsFaulted) { // User is now signed in. Firebase.Auth.FirebaseUser newUser = task.Result; Debug.Log(string.Format("FirebaseUser:{0}\nEmail:{1}", newUser.UserId, newUser.Email)); } }); } # 익명으로 로그인 시 07-31 18:07:35.713: I/Unity(27254): FirebaseUser:eBSI8OzDUzRmyzMLhJgLRGRRnte2 07-31 18:07:35.713: I/Unity(27254): Email: 07-31 18:07:35.713: I/Unity(27254): # 구글로 로그인 시 07-31 18:08:57.251: I/Unity(27254): Starting Auth with token client. 07-31 18:08:57.251: I/Unity(27254): 07-31 18:08:57.251: I/Unity(27254): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) ... 07-31 18:08:59.601: I/Unity(27254): True:GoogleAccount40791 07-31 18:08:59.601: I/Unity(27254): 07-31 18:08:59.601: I/Unity(27254): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 07-31 18:08:59.601: I/Unity(27254): Try to get Token... 07-31 18:08:59.601: I/Unity(27254): 07-31 18:08:59.601: I/Unity(27254): (Filename: ./artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51) 07-31 18:08:59.601: I/Unity(27254): Token:eyJhbGciOiJSUzI1NiIsImtpZCI6IjY3ODU2OGM4YWRiMmVjYzA3ZDE0M2RiNTE0Y2M3YTk5NTIwN2RmMzYifQ.eyJhenAiOiIxMDQzMzk4Mjk4MzY4LTExcnZvaTltZWowbWhmbHE5NWJjZjA1bWR1cjg2NXE0LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiYXVkIjoiMTA0MzM5ODI5ODM2OC0wbDQ5Ym1idDZnMmo5N2R2cTdtMG5vcTFuYm52bnJxZi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInN1YiI6IjEwNDU4MTIyODM2NDg3MjU4NjkzMCIsImlzcyI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSIsImlhdCI6MTUwMTQ5MTI5MSwiZXhwIjoxNTAxNDk0ODkxLCJuYW1lIjoi7ZSM66CI66Gc7YWM7Iqk7Yq4IiwiZ2l2ZW5fbmFtZSI6Iu2FjOyKpO2KuCIsImZhbWlseV9uYW1lIjoi7ZSM66CI66GcIn0.wMCNkbrsID2geKHAvxb4n85y1PIq7X3XyHqO2AWqy7YFlL5wn7bQu6uAx5wTaXJjm1pOiT3hhpmQcIISgfGeCjke_9h66VSoR330QEnflVsG5jNFestckqD79cDhKO2SlBeFPOt57RoeTk_hAnm4Plvs3FvgSE-OrThJPSWDuj--38FTSaB088CNaliD2GrIW7LYFbzEnid2UyUbPtobTZEHBaCFxuUDHj7E_Jwdqn30uCLT9Jo3s-Is3x44NtsQy0sN9STETpoR_h5MT64XvuVO30gH6pBCYh7aDMmyvMGtT5653nB3ztK2OujlZk809ZFLwGAHw6NnhxR92V4nyg 07-31 18:09:00.931: I/Unity(27254): FirebaseUser:AtU4at9asEhNI24KmGXVzih3TG63 07-31 18:09:00.931: I/Unity(27254): Email:ddddd@gmail.com 07-31 18:09:00.931: I/Unity(27254):

Firebase 콘솔화면에서 확인하면 등록된 사용자 계정을 확인할 수 있다.

참고로, 익명 계정은 앱을 지우고 재설치 하면, 유저 아이디값이 새로 생성되는 반면,

구글 계정은 기존 사용하던 유저 아이디값을 갖는다.