어제 구글 로그인까지 성공 후, String 값으로 token 값을 확인하는데 빈 string으로 나와 때려치고 퇴근했다.
구글링을 해본 결과 Google에서는 GetIdToken();을 권장하지 않는다는 사실을 알게 되었다. 하지만 AWS SDK는 이걸 쓰라는데 어떻게? 일단 들어갈때까지 코루틴으로 넣어보자
public void OnLogin()
{
if (!Social.localUser.authenticated)
{
Social.localUser.Authenticate((bool bSuccess) =>
{
if (bSuccess)
{
UnityEngine.Debug.Log("Social.Login Successful");
StartCoroutine(LoginByGoogle());
//CredentialsManager.credentials.AddLogin("accounts.google.com", token);
}
else
{
Debug.Log("Fall");
text.text = "Fail";
}
});
}
}
public IEnumerator LoginByGoogle()
{
Debug.Log("Google Login ");
string token = PlayGamesPlatform.Instance.GetIdToken();
Debug.Log("first token " + token);
while (string.IsNullOrEmpty(token))
{
token = PlayGamesPlatform.Instance.GetIdToken();
yield return new WaitForSeconds(0.5f);
}
Debug.Log("token " + token);
}

일단 테스트 해본 결과 처음 토큰값이 제대로 들어오고 있다. Text를 통해 테스트 했을 때, 빈 토큰이 나온 이유는 규격을 넘어서 인 듯 하다.
하지만, 첫번째 토큰을 받았는데 출력되고 while 문에서 토큰이 Empty값으로 다시 도는 걸 확인했을 때, 토큰이 휘발성이라서 한번만 사용가능한지 여부도 생각하며 작업을 진행해야 할 거 같다. 일단 인증은 성공했단다.
역시 무식한게 최고다. 하지만 나중에 효율을 생각해보면 고칠 필요성을 느낀다. 일단 많은 과정이 남았으니 후에 최적화를 해보자.
다음 무엇을 해야하는 지 생각해보다 amazon cognito sync 를 해서 접근이 필요할 거 같다.


이렇단다. 근데 내가 받은 dll 파일에는 AmazonCognitoSyncConfig라는 클래스가 포함되어 있지 않다. 연동 혹은 대체 가능한 클래스를 찾아보자. 결국 SDK는 AWS에서 제공하는 낮은 버전으로 변경했다.
public void OnLogin()
{
if (!Social.localUser.authenticated)
{
Social.localUser.Authenticate((bool bSuccess) =>
{
if (bSuccess)
{
UnityEngine.Debug.Log("Social.Login Successful");
StartCoroutine(LoginByGoogle());
Debug.Log("token " + token);
CredentialsManager.credentials.AddLogin("accounts.google.com", token); // providername, token
AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint = CredentialsManager.region };
CognitoSyncManager syncManager = new CognitoSyncManager(CredentialsManager.credentials, clientConfig);
Dataset playerInfo = syncManager.OpenOrCreateDataset("PlayerInfo");
//Debug.Log ("Saving to CognitoSync Cloud"); // 사용자 데이터를 저장하여 비교할 수 있다.
//playerInfo.Put("alias" , PlayGamesPlatform.Instance.GetUserEmail());
//Debug.Log(PlayGamesPlatform.Instance.GetUserEmail());
//playerInfo.Put("playerName", PlayGamesPlatform.Instance.GetUserDisplayName());
//Debug.Log(PlayGamesPlatform.Instance.GetUserDisplayName());
//playerInfo.SynchronizeAsync();
string testId = playerInfo.Get("alias");
string playerName = playerInfo.Get("playerName");
Debug.Log("test ID : " + testId + " / PlayerName : " + playerName);
}
else
{
Debug.Log("Fall");
}
});
}
}
위의 스크립트로 구글로그인 시 토큰을 통해 외부 인증을 받고 난 후, 인증정보를 통해 접속 유저의 Dataset을 만들고 그를 통해 정보를 저장하고 받아 올 수 있다. 하지만 나는 userpool에 저장하는 과정을 하고 있기에 좀 더 찾아보고 다른 방향성을 찾아야 할 거 같다.
그리하여
단계 3. 사용자 풀에 소셜 로그인 추가(옵션) - Amazon Cognito
단계 3. 사용자 풀에 소셜 로그인 추가(옵션) 앱 사용자가 Facebook, Google, Amazon 및 Apple과 같은 소셜 자격 증명 공급자(IdP)를 통해 로그인하도록 할 수 있습니다. 사용자가 직접 또는 타사를 통해 로
docs.aws.amazon.com
문서를 참조하여 실험하였다. 결과적으로 웹에서 외부공급자를 통해 userpool에 등록을 성공시켰다.

이제 이 과정을 유니티에 적용시킬 예정이다.
예상되는 난관은 저 과정은 도메인에서 자동으로 처리해주는 과정이다. 하지만 유니티에서는 수동으로 값을 지정하고 내가 넣어줘야한다. 이러한 과정의 library가 있는지 찾아봐야하며, 없다면 만들어야 한다.
또한, 낮은 SDK로 적용하면서 빌드과정에서 오류가 발생하는거 같다.

이러한 오류 인데 찾아보니 Unity 2019 버전으로 올라가면서 AWSSDK.CORE dll 호환 문제라고 한다. Lambda를 사용할 때, 문제가 생긴다고 커뮤니티에서 봤는데 Lambda를 실행할 때, 테스트해봐야 할거같다.
'기록일지' 카테고리의 다른 글
2022-01-18 (0) | 2022.01.18 |
---|---|
2022-01-17 (0) | 2022.01.17 |
2022-01-12 (0) | 2022.01.13 |
2022-01-06 (AWS) (0) | 2022.01.06 |
AWS_Unity 개발일지 2022-01-05 (0) | 2022.01.05 |