현제 개발 중인 모바일 게임,
'전설의 대장장이 이야기-The Legend Of BlackSmith'가 출시되었다.
구글 플레이 스토어 링크
전설의 대장장이 이야기 - Google Play 앱
무기를 제작하고 판매해서 전설적인 대장장이가 되어보세요!
play.google.com
게임 유저라면 안드로이드 폰으로 게임을 다운받을 때 이런 화면이 상단에 뜨며 동시 로그인 되는 장면을 보았을 것이다.
게임 출시를 앞두고 요즘 모바일 게임의 기본인 구글 플레이 게임즈와 연동하는 과정에서 최신 버전의 정보가 적어
상당히 많은 시행착오를 겪었기에 이와 관련해 정리를 해보고자 한다.
사용한 유니티 버전은 2022.3.15f1
사용한 Google Play Games Plugin for unity 버전은 현재 24년 3월 27일 기준 v11.01 이다.
유니티 빌드 세팅하기
완성된 유니티 프로젝트가 있다는 가정 하에 유니티 프로젝트 빌드 세팅 build settings으로 접속해 보자.
1. 안드로이드로 플랫폼 전환
모바일 게임이니 당연하게도 빌드 세팅에서 안드로이드로 플랫폼 전환을 해 주자.
2. Player Settings
플랫폼 전환이 완료되면 Player Settings 클릭.
Other Settings 창을 오픈해 주고 Identification 항목으로 이동해 보자.
여기서 반드시!! 체크해야 하는 사항은 바로 패키지 이름 Package name이다.
미리 짚고 넘어가자면 여기서 정한 패키지 네임과 구글 플레이에서의 패키지 이름이 정확히 일치해야지만 된다!!
Script Backend 를 IL2CPP로,
Target Architectures의 ARM64는 반드시 체크하여 타겟팅 해주자.
Target API Level은 안드로이드13.0(API level 33) 으로 해 주어야 현재 버전 기준으로 플레이 스토어에서 에러가 나지 않는다.
(참고로 필자는 모든 분야에서 무적권 Cutting-Edge, 최신 버전으로 진행한다...)
3. KeyStore 생성해 주기
keystore이란?
필자가 간단히 요약해 주면, 위조 해킹 등등을 방지하기 위해 보안, 관리 목적으로 암호 파일을 하나 생성해 주는 것.
자세한 내용은 유니티 공식 문서 참고할 것.
https://docs.unity3d.com/kr/2021.2/Manual/android-keystore-manager.html
Android 키스토어 관리자 - Unity 매뉴얼
키스토어 관리자는 Android 키스토어 및 키를 생성, 설정 또는 로드할 수 있는 창입니다. 자세한 내용은 Android의 키, 인증서, 키스토어 문서를 참조하십시오.
docs.unity3d.com
참고로 이 Keystore를 한번 생성한 이후에는 반드시 백업해 주고 암호도 어디에 적어놓고 따로 관리해 주기!
이거가 사라지거나 암호를 분실하거나 하면 추후 상당히 귀찮아진다!
Keystore Manager을 클릭하고 키스토어를 하나 생성해 주자.
참고로 키스토어의 path를 정할 때 필자는 유니티 프로젝트 내에 Keystore 폴더를 만들어 주어 관리하고 있다.
Alias는 별명, 회사명이나 원하는 프로젝트 별명을 하나 넣어주고,
Password는 까먹지 않도록 동일하게 설정해 주는 것을 추천한다. 다시 한번 강조하지만 Password 절대 잃어/잊어 버리지 말 것!
GPGS 플러그인 다운 및 설치
keystore가 지정한 경로에 생성이 되었다는 것을 확인했으면 이제 플러그인을 설치해 보자.
설치 전에 플러그인을 만들어 주신 분에게 감사의 절을 한번 올리고 본격적으로 시작해 보자.
https://github.com/playgameservices/play-games-plugin-for-unity
GitHub - playgameservices/play-games-plugin-for-unity: Google Play Games plugin for Unity
Google Play Games plugin for Unity. Contribute to playgameservices/play-games-plugin-for-unity development by creating an account on GitHub.
github.com
위 링크로 들어가 11.01 최신 버전임을 확인하고 source code zip 파일을 다운받아 주자.
우리가 필요한 건 current-build 파일이다.
사용하고자 하는 유니티 프로젝트를 열어준 후 GooglePlayGamesPlugin-0.11.01.unitypackage를 더블 클릭하여 프로젝트에 임포트 해 주자.
임포트 에러 해결하기
임포트 후 이런 에러 메세지들이 반드시 쏟아져 나올 텐데 당황하지 말고 해결해 보자.
우선 두번째 에러 메세지를 자세히 읽어보면 insecure connection not allowed 라고 쓰여있는데, 뭔가 보안 때문에 통신 연결이 안 되고 있는 모양새다. 따라서 우리는 이렇게 HTTP를 통한 다운로드를 항상 허용해 줘 보자.
한번 더 Force Resolve를 해 보면 뭔가 해결이 되는 것 같은데...여전히 에러가 뜨며 진행이 안 되고 있을 것이다.
밑으로 내려 읽어보면 뭔가 디펜던시들이 충돌되고 있다는 것을 알 수 있다. 해결해 보자.
정리해보면, 유니티 프로젝트에서 com.google.games 경로인 Assets>GooglePlayGames>com.google.play.games>Editor 폴더로 가서,
GooglePlayGamesPluginDependencies.xml 파일을 오픈,
Packages/com.google.play.games/Editor/m2repository 경로를
Assets/GooglePlayGames/com.google.play.games/Editor/m2repository 로 바꿔준다
이제 다시 Assets>External Dependency Manager>Android Reslover>Force Resolve 를 통해 다시 한번 resolve를 해주면... 성공!
하지만 뭔가 찝찝한 게 하나 남아 있다.
남은 하나의 에러는 해결하기 쉽다.
결론만 말하자면 현재 안드로이드 빌드 중이기 때문에 IOS resolver는 필요가 없다는 거다.
추후 IOS 빌드를 하게 되면 다뤄 보도록 하겠다.
빨간 에러 메세지가 굉장히 거슬리니 과감하게 삭제해 주자...!
깔끔해졌다!
로그인 코드 작업
인터넷에서 어울리는 배경 사진 하나를 가져오고,
유니티로 로그인 기능을 수행할 UI 버튼 하나와 로그를 찍을 텍스트 하나를 만들어 주었다.
하이어라키에 GoogleManager 오브젝트를 하나 만들고 GoogleManager.cs 스크립트 하나를 생성해 붙여주었다.
로그인 관련 코드는 인터넷에 널려 있지만, 플러그인을 올려 주신 분의 깃을 참고하여 간단하게 작성해 보자.
주의할 점: 깃의 코드를 의심하지 말고, 다른 부분을 의심하자!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using TMPro;
public class GoogleManager : MonoBehaviour
{
public TextMeshProUGUI logText;
void Start()
{
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
SignIn();
}
public void SignIn()
{
PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
}
internal void ProcessAuthentication(SignInStatus status)
{
if (status == SignInStatus.Success)
{
// Continue with Play Games Services
// Perfectly login success
string name = PlayGamesPlatform.Instance.GetUserDisplayName();
string id = PlayGamesPlatform.Instance.GetUserId();
string ImgUrl = PlayGamesPlatform.Instance.GetUserImageUrl();
logText.text = "Success \n" + name;
}
else
{
logText.text = "Sign in Failed!";
// Disable your integration with Play Games Services or show a login button
// to ask users to sign-in. Clicking it should call
// PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
// Login failed
}
}
}
GPGS 플러그인 깃 메뉴얼의 Sign IN 파트를 참고하여 코드를 작성했다.
이제 로그 텍스트를 넣어주고
만들어 놓은 로그인 버튼에 SignIn() 함수를 할당해 주자.
컴파일 하면 준비는 끝났다. 이제 Google Play Console을 설정해 줄 차례다.
Google Play Console 설정
구글 플레이 스토어에 앱을 업로드하는 과정에 대해서는 이미 인터넷에 수많은 정보가 있기 때문에,
앱을 어느정도 업로드 했다는 가정 하에 헷갈리는 부분, 필요한 부분만 작성하도록 하겠다.
최종 목표는 이런 화면이 나오도록 만들어 주면 된다.
Play 게임즈 서비스 > 설정 및 관리 > 설정
처음 들어가면 아래와 같은 화면이 나오는데, 설명을 잘 읽어본 후 Google API를 사용하지 않음 에 체크하고
게임 이름을 잘 정해서 생성해주자.
Google Cloud Platform 을 클릭해서 OAuth 클라이언트를 생성해야 한다.
아마 처음이라면 OAuth 동의화면 생성 등 여러가지 창이 뜰 텐데
UserTpye 은 외부로 하고 앱 정보에 필요한 정보들을 천천히 도움말을 보며 따라 입력하면 된다.
그 이후 하단과 같은 페이지가 뜨면, 사용자 인증 정보 만들기 > OAuth 클라이언트 ID 만들기.
어플리케이션 유형: Android
이름: 알아서
패키지 이름: 처음에 언급했던 유니티 패키지 이름! 이게 조금이라도 달라질 경우 접속이 안 된다. 유니티 패키지 이름과 정확히 일치해야 하며, 필자의 경우 대문자 하나를 잘못 입력하여 엄청 고생했었다.
SHA-1 인증서
보안을 위한 인증 키라고 보면 된다.
포스팅 처음에 유니티에서 만들었던 KeyStore가 바로 여기에 쓰인다.
SHA-1 인증서를 얻기 위해서는 KeyStore가 필요하며, 자바의 Keytool을 통해 KeyStore에서 얻어주어야 한다.
그러므로 본인 컴퓨터에 Java가 설치되어 있어야 하며 설치가 안 되어있다면 인터넷을 검색하여 깔아주자.
(Java 설치 방법 포스팅은 구글링을 하시면 널려 있다.)
Java를 설치한 후, 인증서를 얻어오기 위해서 keytool이 필요하니, Java가 설치된 경로로 가서 bin 폴더를 찾자.
bin 폴더 안에 우리가 필요로 하는 keytool.exe가 존재한다.
필자의 경우 C:\Program Files\Java\jre1.8.0_311\bin 에 자바를 설치해 놓았다(디폴트).
이 경로에서 CMD(명령 프롬프트)를 실행해 주면 된다.
초보자들을 위해 자세히 설명해 주자면, 우선 윈도우에서 명령 프롬프트를 실행해 준다.
cd 명령어를 통해 자바의 bin 폴더 경로로 가자.
이제 keytool을 사용할 경로로 갔으니 실제 저장한 key를 얻어올 명령어를 입력해 주자.
명령어는 구글에서 알려 주었듯이 다음과 같다.
keytool -keystore path-to-debug-or-production-keystore -list -v
우리의 keystore는 어디에 있을까? 당연히 우리가 유니티 프로젝트에서 생성한 keystore를 저장해 놓은 유니티 경로에 있다.
필자가 키를 저장해 놓은 경로는, E:\Unity\Sample_GPGS\KeyStore (KeyStore을 생성해 놓은 폴더)
그렇다면 명령어는 다음과 같이 된다.
다시 명령 프롬프트로 돌아가 입력해 주자.
비밀번호는 아까 유니티에서 keystore을 생성할 때 입력해 주었던 비밀번호를 입력해 주면 된다.
비밀번호를 칠 때 아무 것도 입력되지 않는 것 처럼 보이겠지만 잘 입력되고 있으니, 당황하지 말고 차분하게 한자한자 입력해 준 후 엔터를 쳐 주시면 된다.
이렇게 SHA1 인증서 지문을 얻어올 수 있을 것이고, 철저히 보안을 지켜서 관리해 주시면 된다.
얻어온 지문을 SHA-1 인증서 디지털 지문 칸에 작성해 주고, 패키지 이름도 일치하도록 잘 작성해 준 다음 OAuth 클라이언트 ID를 만들어 주면 된다.
참고로 만든 SHA-1 인증서는 앱을 구글 플레이 콘솔에 업로드 했다는 가정 하에 이렇게 확인해 볼 수 있는데,
위의 앱 서명 키 인증서는 구글에 업로드 한 abb 파일의 인증서 지문이고 (구글이 변환해 줌)
apk 파일 테스트를 위해서는 우리가 방금 얻어온 지문, 즉 업로드 키 인증서라고 되어 있는 아래 부분의 SHA-1 인증서를 사용하는 것이니 헷갈리지 말고 작업을 하길 바란다.
Google Play Console 와 Unity 의 정보 연동해주기
OAuth 클라이언트가 생성되었다면 다시 Google Play Console로 돌아가 사용자 인증 정보를 추가해 준다.
불법 복제 방지 사용은 반드시 사용 안함으로 체크해 주자. (테스트 할 때 켜져 있으면 테스트가 안 된다.)
테스트를 하기 위해 테스터를 추가해 준다.
위 스샷처럼 만들어진 OAuth 클라이언트 ID를 복사해 얻어오자.
(위의 abb는 무시할 것. apk 버전으로 테스트 할 것이기 때문.)
유니티 프로젝트로 돌아가 사용할 클라이언트 ID를 넣어준다.
다음으로는 Android Resources 를 얻어와서 똑같이 붙여넣어 주자.
setup을 클릭하면 이렇게 성공했다는 화면이 나올 것이다.
이제 apk를 build해서 모바일에서 테스트 해 보면 자동 로그인 되는 여러분의 어플리케이션을 볼 수 있을 것이다!
(참고로 setup이 끝난 후 자동으로 resolve가 안 될경우 force resolve를 해 보시기 바란다.)
끝!