도구의발견
Unity3D + Facebook 연동 개발 가이드(안드로이드 버젼)
kukuta
2014. 2. 25. 11:10
이번 포스팅은 Facebook Unity SDK(https://developers.facebook.com/)를 이용하여 Unity와 facebook을 연동하는 방법에 대해서 다룹니다. 예제 코드는 facebook sdk 패키지를 import하면 만들어지는 Examples/InteractiveConsole이 깔끔하고 쉽게 나와있으므로 그것을 보시는 것이 좋습니다.
본 포스팅에서는 InteractiveConsole 예제를 실행하면서 겪었던 환경 셋팅 문제를 주로 다룹니다. 현재 안드로이드 버젼만 다루고 있으며 ios의 경우에는 해당 작업을 하게 되면 추가하도록 하겠습니다.
준비 작업
- Java SDK(ver 1.7) : facebook 앱 인증에 필요한 key hash를 생성하는데 사용됩니다.
- OpenSSL(dowload) : facebook key hash를 생성과 안드로이드 빌드 위해 필요 합니다.
- Java SDK와 OpenSSL의 경우에는 설치를 하고 환경 변수 PATH에 bin 디렉토리의 경로를 등록합니다.
- Unity 3D(ver. 4.3.4f) : https://unity3d.com/kr/get-unity/download에서 다운 받으시면 됩니다. 자세한 설명은 생략합니다.
- Facebook Unity SDK(ver 4.3.6) : https://developers.facebook.com/docs/unity/downloads/에서 다운 받으시면 됩니라. 링크가 변경 되었더라도 충분히 검색을 통해 찾으실수 있으리라 믿습니다.
※ 혹시 몰라 버젼을 기록해 두었습니다. 뭔가 이상하게 돌아간다면 버젼을 확인해보시고 버젼이 상이하고 이 문서가 더 이상 도움이 되지 않는다고 생각 되시면 kukuta@gmail.com으로 메일 주십시오.
Overview
우리가 하게 될 작업에 대해 간단하게 알아 보겠습니다.
- 일단 Unity가 설치되어 있어야 합니다.
- Facebook Unity SDK를 Unity 프로젝트에 import 합니다.
- Facebook app을 만듭니다.
- Unity에서 Build Setting과 Facebook 연동.
- 빌드해서 스마트 폰에 올려 봅니다.
- 테스트 합니다.
- 문제를 발견 합니다..고칩니다..빌드해서 스마트 폰에 올려 봅니다..테스트 합니다..문제르..쿨럭..
Step 1. Unity 설치
- 알아서들 설치 합니다. 이 포스트를 볼 정도면 Unity 설치가 문제가 아니라고 생각 됩니다.
Step 2. Facebook Unity SDK Download & Import
- https://developers.facebook.com/docs/unity/downloads/ 에서 SDK를 다운 받습니다.
- 페이지가 깨지거나 링크가 달라지더라도 검색을 통해 알아서 다운 받으실수 있다고 믿습니다.
- 다운로드 받고 custom import 하는 부분에 대해서도 설명을 생략합니다.
- SDK가 import 되고 나면 Unity 메뉴에 'Facebook'이 추가 됩니다.
- https://developers.facebook.com/docs/unity/getting-started/canvas 참조
Step 3. Facebook 앱 만들기
- Facebook 앱 생성에 대한 설명 역시 생략합니다.
- 설정에 필요한 Package Name, Class Name, Key Hashes 항목은 Unity 셋팅을 통해 생성됩니다.
- 본 포스팅 마지막 과정에서 위 세개 값을 Unity로 부터 생성하여 복사해서 넣도록 하겠습니다.
Step 4. Unity와 Facebook 연동
1) App Name, App Id - "Invalid App Id"
- Unity 프로젝트 생성, Scene 생성 등에 대한 설명은 생략합니다.
- 'Facebook > Edit Settings' 메뉴를 클릭하면 Facebook Settings Inspector가 뜹니다.
- 'Facebook 앱'에서 App Name과 App Id 복사해 붙여 넣습니다.
2) 플랫폼 안드로이드로 변경
- 'File > Build Settings' 메뉴를 클릭, Platform=Android 변경, Switch Platform을 클릭하여 플랫폼을 변경합니다.
3) Package Name 지정
- 'Facebook > Edit Settings'에 보면 기본 Package Name이 (com.Company.ProductName) 셋팅 되어 있습니다.
- 'File > Build Settings > Player Settings 클릭 > Inspector 창 > Other Settings 메뉴 > Bundle Identifier'를 수정
4) Class Name
- 'com.facebook.unity.FBUnityDeepLinkingActivity'
- 지정되어 있는대로 내비둡니다. 나중에 이걸 복사해서 facebook 엡에 붙여 넣을 겁니다.
5) Key Hash 생성
NOTE - 조심하십시오. 가장 많은 삽질이 여기서 일어 납니다.
- "your android debug keystorefile is missing! you can create new one by creating and build empty android project in eclipse" 가 디스플레이 되고 있다면 아직은 정상입니다.
- key hash를 먼저 생성해 주어야 합니다. 그러기 위해서는 Java SDK 에 들어 있는 keytool과 OpenSSL이 필요 합니다. (혹시 아직 설치하지 않았다면 Java SDK와 OpenSSL을 설치하시고 환경 변수(PATH)에 bin 디렉토리를 등록하신 다음 여기로 돌아 오시기 바랍니다)
- 커맨드 창을 열어 다음과 같이 입력 합니다 :
keytool -genkey -alias androiddebugkey -keystore D:\Project\FacebookLogin\Facebook\debug.keystore | "openssl.exe" sha1 -binary | "openssl.exe" base64- '-genkey' : 키를 생성하라는 옵션입니다.
Facebook 가이드 문서를 보면 -exportcert 옵션을 사용하는데, 이 옵션의 경우 파일이 없는 경우 새로 생성 해내지 않습니다. 하지만 우리는 대부분 처음 작업하는 사람인지라 기존 파일이 없겠지요. - '-alias' : 뭔지 잘 모르겠습니다. 그냥 androiddebugkey라고 적어 줍니다.
- '-keystore' : key가 저장될 위치와 이름을 지정합니다.
상대 경로도 가능한지 모르겠습니다. 지정된 디렉토리가 없는 경우 새로 생성하지 않고 실패 합니다. 디렉토리는 미리 생성 되어 있어야 합니다. - 나머지는 그냥 그대로 따라 쓰면 됩니다.
- '-genkey' : 키를 생성하라는 옵션입니다.
- 정상적인 상황이라면 패스워드를 물어 옵니다. "android" 를 입력 합니다. 그 외에 질문하는 것들은 모두 엔터로 넘겨 버리고 맨 마지막 질문에 "yes(한글 버젼이면 예)"를 타이핑합니다. 이렇게 되면 key hash 생성에 성공 입니다.(따옴표는 입력하지 않습니다. 만일 패스워드를 묻지 않는다면 뭔가 잘못 된 것입니다.)
6) 'File > Build Settings > Player Settings 클릭 > Inspector 창 > Publishing Settings
- Use Existing Keystore 체크
- Browse Keystore클릭 하고 이전에 생성해놓은 debug.keystore 위치를 찾아 선택
- Keystore password에 "android" 입력
- Alias 에서 androiddebukey 선택
- Password "android"
- 위와 같이 셋팅하고 다시 'Facebook > Edit Settings' 메뉴로 돌아가면 Package Name, Class Name, Debug Android Key Hash가 모두 반영 되어있습니다.
- ..라고 하고 싶지만 여전히 "your android debug keystorefile is missing! you can create new one by creating and build empty android project in eclipse" 메시지가 나오고 있을 겁니다.
- Facebook SDK의 윈도우쪽 버그로써 아래 Trouble Shooting에서 다루겠습니다.
7) Unity로 부터 Package Name, Class Name, Key Hash를 복사 & 붙여 넣기를 하고 저장
- 'Facebook > Edit Settings'
- Package Name, Class Name, Key Hash를 페이스 북에 복사 & 붙여 넣기
- 로그인 테스트를 하는데 개발자만 로그인이 되고 다른 사람들이 로그인 되지 않는 경우는 아래 Trouble Shooting 항목을 참고 하세요.
Step 5. Build & Run on Device
- Facebook SDK 4.3버젼에서는 PC에서 로그인 테스트를 하는 경우 무조건 성공을 떨어뜨리는 버그가 있다. 제대로된 테스트를 위해서는 꼭 장치에 올려서 테스트 해보도록 한다.
Step 6. Trouble Shooting :
- "your android debug keystorefile is missing! you can create new one by creating and build empty android project in eclipse"
- key hash 파일이 생성되지 않았거나, 지정된 위치에 없으면 발생하는 에러 메시지 입니다.
- key hash 파일을 생성했고, 해당 파일이 지정된 디렉토리에 있는데도 불구하고 위 메시지가 발생 되는 경우 원인은 Facebook Unity SDK 의 버그로써 SDK에서는 key hash 파일을 특정 위치에만 놓고 사용하도록 코드가 만들어져 있습니다(윈도우의 경우에는 "C:/Users/<계정>/.android/debug.keystore", 리눅스 or 맥의 경우에는 ~/.android/debug.keystore). 그런데 윈도우의 경우에는 앞에 "C:/" 부분이 빠져 있기 때문에 SDK 코드를 직접 수정해야만 합니다(http://answers.unity3d.com/questions/596752/android-debug-keystore-file-is-missing.html) :
// File : Facebook/Editor/android/FacebookAndroidUtil.cs private static string DebugKeyStorePath { get { return Application.dataPath + @"/../Facebook/debug.keystore"; /* return (Application.platform == RuntimePlatform.WindowsEditor) ? System.Environment.GetEnvironmentVariable("HOMEPATH") + @"\.android\debug.keystore" : System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + @"/.android/debug.keystore"; */ } }
- 저 같은 경우 Unity 프로젝트 내에 Facebook이라는 디렉토리를 만들고 그 안에 debug.keystore 파일을 저장했습니다만..각자 편한대로 수정해서 사용하시면 될듯 합니다.
- "openssl not found. make sure that openssl is installed and that it is in your path"
- open ssl이 PATH 환경 변수에 제대로 등록 되지 않은 것입니다. 등록하시고 unity를 재시작 합니다.
- 개발자만 로그인이 되고 다른 사람 계정은 로그인이 되지 않아요!
- Facebook 앱을 공개로 변경하지 않으면 앱 개발자만 로그인 할수 있습니다. Status & Review 설정에서 앱을 공개로 변경하거나 테스트 사용자를 등록하여 로그인하셔야 합니다.
이상 Unity와 Facebook의 연동 가이드를 마칩니다. 문의는 아래 댓글을 이용 부탁 드립니다.