Firebase의 인증 기능 중, 익명과 구글 로그인을 해보자.
사전 준비
Firebase에 프로젝트 등록
유니티 앱의 Keystore를 생성한다.
Firebase 앱 등록정보에 SHA1 지문 정보가 필요하므로 저장한 keystore에서 SHA1 지문을 미리 뽑아둔다.
keytool -exportcert -list -v -alias -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 콘솔화면에서 확인하면 등록된 사용자 계정을 확인할 수 있다.
참고로, 익명 계정은 앱을 지우고 재설치 하면, 유저 아이디값이 새로 생성되는 반면,
구글 계정은 기존 사용하던 유저 아이디값을 갖는다.