Unity에서 Firebase Auth 사용해보기

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

사전 준비

Firebase에 프로젝트 등록

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



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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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값을 유니티 구글 플레이 설정 창에 넣기


유니티 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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));
            }
        });
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 익명으로 로그인 시
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 콘솔화면에서 확인하면 등록된 사용자 계정을 확인할 수 있다.

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

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

prev 1 ··· 10 11 12 13 14 15 16 ··· 95 next