1.2. Android SDK 설치
1.2.1. 설치 환경
IDE: Android Studio
기존 Eclipse 기반에서 개발하고 있다면 아래와 같이 마이그레이션을 먼저 진행해야 합니다.
개발하고 있는 게임 프로젝트에서 우클릭하여 ' Properties > Android > Library' 에서 추가한 SDK 라이브러리들을 전부 'Remove' 한 뒤 'Apply' 합니다.
구글에서 제공하는 마이그레이션 가이드를 참조하여 게임 프로젝트만 Android Studio로 마이그레이션을 진행합니다.
이후 본 가이드를 따라 SDK를 적용하세요.
JDK: JDK 8이상
Android SDK: Android 12 (API 31)
OS : Android 6.0, API 23 이상 지원
Gradle Version 6.1.1 사용
1.2.2. SDK 환경 설정
1.2.2.1. build.gradle(project level)
buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.0.1' // 최소 3.1.2 버전 이상 필요 classpath 'com.google.gms:google-services:4.3.3' } } allprojects { repositories { google() mavenCentral() maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' name 'kakao' } maven { url 'https://s3.ap-northeast-2.amazonaws.com/kakao-sdk-release/release/' name 'Kakaogames' } } }
1.2.2.2. gradle.properties
3.10.4 버전에서 AndroidX 로 Migration 작업이 진행되었습니다.
# Project-wide Gradle settings. org.gradle.jvmargs=-Xmx4608M KAKAO_GAME_SDK_VERSION=3.14.0 # 아래 2개 설정 추가 android.useAndroidX=true android.enableJetifier=true
1.2.2.3. build.gradle(app level)
적용한 application 의 build.gradle 파일에 아래와 같이 필요한 모듈을 선택적으로 설정합니다.
gradle 3.0 미만 버전을 사용하여 'implementation' 을 사용할 수 없는 개발사에서는 'compile'을 사용하시면 됩니다.
apply plugin: 'com.android.application' android { ... // Java 8 언어 기능을 사용하기 위해 필요 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } ... dependencies { // 디바이스 인증을 사용하는 게임에서 필요. implementation "com.kakaogame:idp_device:$KAKAO_GAME_SDK_VERSION" // 페이스북 인증을 사용하는 게임에서 필요. implementation "com.kakaogame:idp_facebook:$KAKAO_GAME_SDK_VERSION" // 구글게임 인증을 사용하는 게임에서 필요. implementation "com.kakaogame:idp_googlegame:$KAKAO_GAME_SDK_VERSION" // 카카오 인증을 사용하는 게임에서 필요. implementation "com.kakaogame:idp_kakao:$KAKAO_GAME_SDK_VERSION" // 애플 인증을 사용하는 게임에서 필요. implementation "com.kakaogame:idp_siwa:$KAKAO_GAME_SDK_VERSION" // 게임SDK의 주요 기능을 사용하기 위해서 필요. implementation "com.kakaogame:gamesdk:$KAKAO_GAME_SDK_VERSION" } apply plugin: 'com.google.gms.google-services' // Google Services plugin
1.2.2.4. 외부 라이브러리 dependencies
각 필요한 라이브러리들이 아래 버전으로 dependency 가 걸려있습니다. 카카오 게임SDK를 연결 시 자동으로 포함됩니다.
SDK version | Module | External Libraries |
---|---|---|
3.7.1
| gamesdk |
|
idp_kakao |
| |
idp_facebook |
| |
idp_googlegame |
| |
3.8.0 | gamesdk |
|
idp_kakao |
| |
idp_facebook |
| |
idp_googlegame |
| |
3.9.1 | gamesdk |
|
idp_kakao |
| |
idp_facebook |
| |
idp_googlegame |
| |
3.10.0 | gamesdk |
|
idp_kakao |
| |
idp_facebook |
| |
idp_googlegame |
| |
3.10.4 (AndroidX) | gamesdk |
|
idp_facebook |
| |
idp_googlegame |
| |
3.10.6 | gamesdk |
|
idp_facebook |
| |
idp_googlegame |
| |
3.11.0 | idp_facebook |
|
3.11.5 | common |
|
gamesdk |
| |
idp_kakao |
| |
idp_facebook |
| |
idp_googlegame |
| |
3.13.4 | common |
|
gamesdk |
| |
idp_kakao |
| |
idp_facebook |
| |
idp_googlegame |
|
만약 게임에서 위 라이브러리와 dependencies가 겹치는 외부 라이브러리를 사용하는 경우 아래와 같이 해당 링크를 제거하여 버전이 높은 쪽으로 사용할 수 있습니다.
build.gradle(app level)
dependencies { ... implementation ('com.kakaogame:gamesdk:{KAKAO_SDK_VERSION}') { exclude group: 'com.google.android.gms', module: 'play‐services-ads' // 제거하고자 하는 라이브러리 exclude group: 'com.android.support' // 그룹 전체 라이브러리를 제거할 수도 있습니다. support 버전이 안 맞아 빌드 에러가 나는 경우 설정으로 변경 가능 ... } } |
아래는 페이스북 SDK 버전을 게임에서 원하는 SDK버전으로 변경하는 예시입니다.
build.gradle(app level)
dependencies { ... implementation ('com.kakaogame:idp_facebook:{KAKAO_SDK_VERSION}') { exclude group: 'com.facebook.android', module: 'facebook-android-sdk' } implementation 'com.facebook.android:facebook-android-sdk:4.39.0' } |
1.2.2.5. kakao_game_sdk_configuration.xml
어플리케이션의 src/main/assets 디렉토리에 kakao_game_sdk_configuration.xml을 생성한 후 에디터로 파일을 열어서 정보를 추가 합니다.
항목 | 구분 | 설명 | Values |
---|---|---|---|
appId | 필수 | 기술PM으로부터 전달받은 게임의 앱 아이디를 설정합니다. | |
appSecret | 필수 | 기술PM으로부터 전달받은 게임의 앱 시크릿 키를 설정합니다. | |
appVersion | 필수 | 게임의 버전을 설정합니다. 이 버전을 기반으로 앱의 업그레이드 지원 여부를 자동으로 안내합니다. | |
market | 필수 | 게임이 런칭되는 마켓을 설정합니다. | 구글 플레이 : googlePlay |
debugLevel | 선택 | 카카오게임 SDK의 로그 출력 레벨을 설정합니다. 설정하지 않으면 NONE으로 설정됩니다. | VERBOSE / DEBUG / ERROR / NONE(기본값) |
serverType | 선택 | SDK 와 연결될 플랫폼의 서버 타입을 설정합니다. 실제 서비스 용 빌드에서는 "real" 로 설정하시면 됩니다. | real, real_global : 글로벌 서버로 접속 필요한 경우 사용 |
assets/kakao_game_sdk_configuration.xml
<?xml version="1.0" encoding="UTF-8"?> <configuartion-list> <configuration key="appId" value="" /> <configuration key="appSecret" value="" /> <configuration key="appVersion" value="" /> <configuration key="market" value="" /> <configuration key="debugLevel" value="" /> <configuration key="serverType" value="" /> </configuartion-list>
1.2.3. IDP 인증 정보 설정
1.2.3.1. 카카오 인증 정보 설정
src/main/res/values/kakao_game_kakao_auth.xml 에 아래 리소스 파일 추가 및 value 설정합니다.
"카카오앱키"값은 발급 받은 값으로 변경이 필요합니다.
res/values/kakao_game_kakao_auth.xml
<?xml version="1.0" encoding="UTF-8"?> <resources> <string name="kakao_app_key">[카카오앱키]</string> <string name="kakao_scheme">kakao[카카오앱키]</string> <string name="kakaotalk_host">kakaotalk</string> <string name="kakaolink_host">kakaolink</string> <string name="kakaostory_host">kakaostory</string> </resources> |
1.2.3.2. 페이스북 인증 정보 설정
src/main/res/values/kakao_game_facebook_auth.xml 에 아래 리소스 파일 추가 및 value 설정합니다.
"페이스북앱키"값은 발급 받은 값으로 변경 필요합니다.
res/values/kakao_game_facebook_auth.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="facebook_app_id">[페이스북앱키]</string> <string name="facebook_client_token">[페이스북 클라이언트 토큰]</string> <!-- 페이스북 인증시 "public_profile", "email" 퍼미션이 기본 정의되어 있으며 추가로 필요한 Read 퍼미션이 있는 경우 아래 item 항목에 추가한다. Publish 퍼미션을 추가할 수 없다. --> <string-array name="facebook_read_pemissions"> <item></item> </string-array> </resources> |
1.2.3.3. 구글 인증 정보 설정
src/main/res/values/kakao_game_google_auth.xml 에 아래 리소스 파일 추가 및 value 설정합니다.
"구글앱아이디"값과 "구글웹클라이언트아이디"값은 발급 받은 값으로 변경 필요합니다.
res/values/kakao_game_google_auth.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- KakaoGameSDK 3.5.0 미만에서 설정 --> <string name="google_app_id">[구글앱아이디]</string> <string name="google_web_app_client_id">[구글웹클라이언트아이디]</string> <!-- KakaoGameSDK 3.5.0 이상에서 설정 --> <string name="kg_google_app_id">[구글앱아이디]</string> <string name="kg_google_web_app_client_id">[구글웹클라이언트아이디]</string> </resources> |
1.2.3.4. SigninWithApple 인증 정보 설정 (3.10.6 이상)
src/main/res/values/kakao_game_siwa_auth.xml 에 아래 리소스 파일 추가 및 value 설정합니다.
"SIWA클라이언트"값은 애플에서 발급 받은 값으로 변경 필요합니다.
res/values/kakao_game_siwa_auth.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="siwa_client_id">[SIWA클라이언트아이디]</string> </resources> |
1.2.4. AndroidManifest.xml 파일 설정
게임 앱의 AndroidManifest.xml 파일에 아래 사항들을 설정하여야 합니다.
1.2.4.1. 공통 설정
SDK 최소 지원 버전은 21 이상으로 설정합니다.
android:minSdkVersion="21"
SDK 타겟 버전을 31 으로 설정합니다.
2018년 11월 1일부터는 targetSdk 버전이 26이상이 아닌 경우 앱을 업데이트하실 수 없습니다.3.13.3에서 Android 12 대응 작업을 진행하였습니다.
android:exported 명시적 선언 추가
SDK 에서는 아래 퍼미션들을 공통으로 사용합니다
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
다중 화면 처리를 위한 설정을 추가합니다.
안드로이드 폰의 화면 분할 및 폴더블 폰에 대응하기 위해서 application 설정에 아래와 같이 추가합니다.
android:resizeableActivity="true"
각 추가되는 Activity 설정에 아래와 같이 추가합니다.
android:configChanges="orientation|screenSize|keyboard|screenLayout|screenSize|smallestScreenSize"
3.16.0 미만 버전에서는 IDP 인증을 위해 아래 Activity 가 설정되어야 합니다.
com.kakaogame.KGAuthActivity
ADID 를 얻기 위한 구글 설정 추가 (영향받는 버전: 3.10.4 버전 이상)
구글 Ads 최신 버전에서 해당 설정이 없는 경우 앱이 동작하지 않는 이슈가 있어 아래와 같이 설정합니다.
만약 게임에서 AdMob을 사용하고 있는 경우, 해당 필드에 게임의 AdMob App Id를 삽입합니다.
퍼미션 선언 필요
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
를 추가해주어야 합니다.
AndroidManifest.xml (공통 설정)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" > <!-- KakaoGame SDK START --> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31" /> <!-- KakaoGame SDK END --> <!-- KakaoGame SDK START --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- KakaoGame SDK END --> <application android:usesCleartextTraffic="true" android:resizeableActivity="true"> <activity android:name="com.companyname.MainActivity" android:configChanges="orientation|screenSize|keyboard|screenLayout|screenSize|smallestScreenSize" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="sensor" android:exported=”true” > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> ... </activity> <!-- 구글 Ads 라이브러리를 사용하기 위한 설정 (3.10.4 버전 이상) --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~1234567890"/> <!-- 3.16.0 버전 미만 설정. 3.16.0 버전부터는 내부 라이브러리에 포함됩니다. --> <!-- KakaoGame SDK Auth START --> <activity android:name="com.kakaogame.KGAuthActivity" android:configChanges="orientation|screenSize|keyboard|screenLayout|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- KakaoGame SDK Auth END--> </application> </manifest> </manifest> |
1.2.4.2. URL 프로모션 설정
URL 프로모션 지원을 위해서는 아래와 같이 게임의 메인 Activity 에 intent filter 설정을 해주어야 합니다.
scheme은 "kakaogame" + 앱아이디 로 구성 됩니다.(예를들어 앱ID가 123456이면 scheme 값은 "kakaogame123456" 이 됩니다.)
AndroidManifest.xml (URL 프로모션 설정)
<application> <activity android:name=".MainActivity"> ... <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="kakaogame[앱아이디]" /> </intent-filter> ... </application> |
1.2.4.3. 초대 이벤트 설정
3.10.6 버전 이상 사용 시 아래 INSTALL_REFERRER 설정은 Manifest에서 하지 않습니다.
하위 버전을 사용하다 3.10.6 버전으로 업그레이드하는 개발사에서는 아래 설정 내용을 삭제 해주시기 바랍니다.
초대 Install Referrer Receiver 선언을 설정합니다.
1.2.4.3.1. 멀티플 브로드캐스트 리시버
멀티플 브로드캐스트 리시버를 사용하면 INSTALL_REFERRER 이벤트를 다른 모든 리시버에게 자동으로 전달하는 기능을 제공합니다.
다른 광고 플랫폼을 사용하지 않는 경우에도 사용 가능합니다.
멀티플 브로드캐스트 리시버(KGMultipleInstallReferrerReceiver)는 INSTALL_REFERRER 액션이 정의된 브로드캐스트 리시버 중에 제일 먼저 선언 되어야 합니다.
AndroidManifest.xml (초대 이벤트 설정)
<application> <!-- INSTALL_REFERRER 액션이 정의된 브로드캐스트 리시버 중에 제일 먼저 선언되어야 합니다 --> <receiver android:name="com.kakaogame.invite.KGMultipleInstallReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"/> </intent-filter> </receiver> ... <!-- 앱스플라이어 연동 하는 경우 --> <receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver"android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"/> </intent-filter> </receiver> <!-- 다른 광고 플랫폼을 연동하는 경우 아래에 브로드캐스트 리시버 추가 --> </application> |
1.2.4.3.2. 싱글 브로드캐스트 리시버
다른 광고 플랫폼에서 제공하는 멀티플 브로드캐스트 리시버를 사용하는 경우 싱글 브로드캐스트 리시버를 사용합니다.
광고 플랫폼의 브로드캐스트 리시버를 사용하는 방법은 해당 광고 플랫폼 가이드를 참조합니다.
AndroidManifest.xml (초대 이벤트 설정)
<application> <!-- 앱스플라이어 연동 하는 경우 --> <receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver""android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"/> </intent-filter> </receiver> <receiver android:name="com.kakaogame.invite.KGSingleInstallReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"/> </intent-filter> </receiver> </application> |
1.2.4.4. 카카오 인증 설정
3.11.0 버전부터 해당 선언은 제거되었습니다.
KakaoWebViewActivity 선언이 필요합니다.com.kakao.sdk.AppKey 메타 데이터 선언이 추가 되어야 합니다.
메인 Activity에 아래 intent filter 선언이 추가 되어야 합니다.
AuthCodeHandlerActivity 선언과 intent filter 선언이 필요합니다.
AgeAuthActivity 선언과 intent filter 선언이 필요합니다.
Android 12 대응하여 exported가 명시적으로 선언되어야 합니다.
AndroidManifest.xml (카카오 인증 설정)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" > <application> <activity android:name=".MainActivity" android:exported=”true”> <!-- Kakao Auth START --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/kakao_scheme" android:host="@string/kakaolink_host" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/kakao_scheme" android:host="@string/kakaostory_host" /> </intent-filter> <!-- Kakao Auth END --> </activity> <activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity" android:exported=”true”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="oauth" android:scheme="@string/kakao_scheme" /> </intent-filter> </activity> <activity android:name="com.kakao.sdk.partner.user.AgeAuthActivity" android:exported=”true”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="ageauth" android:scheme="@string/kakao_scheme" /> </intent-filter> </activity> </application> </manifest> |
1.2.4.5. 구글 인증 설정
SignInHubActivity 선언이 추가 되어야 합니다.
com.google.android.gms.version/com.google.android.gms.games.APP_ID 메타 데이터 선언이 추가 되어야 합니다.
APP_ID에 숫자를 하드코딩하면 인증에 실패합니다. "@string/google_app_id" 형태로 작성하셔야 합니다.
AndroidManifest.xml (구글 인증 설정)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" > <application> <!-- Google Auth START --> <activity android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/google_app_id" /> <!-- Google Auth END --> </application> </manifest> |
1.2.4.6. 페이스북 인증 설정
FacebookActivity 선언이 추가 되어야 합니다.
com.facebook.sdk.ApplicationId 메타 데이터 선언이 추가 되어야 합니다.
com.facebook.sdk.ClientToken 메타 데이터 선언이 추가 되어야 합니다.
AndroidManifest.xml (페이스북 인증 설정)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" > <application> <!-- Facebook Auth START --> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token" /> <!-- Facebook Auth END --> </application> </manifest> |
1.2.4.7. 트위터 인증 설정
TwitterOAuthActivity 선언이 추가 되어야 합니다.
AndroidManifest.xml (트위터 인증 설정)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" > <application> <!-- Twiitter Auth Start --> <activity android:name="com.kakaogame.twitter.TwitterOAuthActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" /> <!-- Twitter Auth End --> </application> </manifest> |
1.2.4.8. 쿼리문 관련 설정
Android 11의 패키지 가시성 대응과 관련하여
특정버전 미만일 경우 쿼리를 추가해야 앱2앱 로그인이나 타사 앱의 기능을 사용할 수 있습니다.
AndroidManifest.xml (공통 설정)
<queries> <!-- For App2App login(3.11.0 미만일 경우 추가) --> <package android:name="com.kakao.talk /> <package android:name="com.kakao.onetalk /> <!-- End of App2App login --> <!-- For browser content(3.11.3 미만일 경우 추가) --> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> <!-- End of browser content --> <!-- For E-mail content(3.11.0 이상 3.11.5 미만일 경우 추가) --> <intent> <action android:name="android.intent.action.SENDTO"/> <data android:scheme="*" /> </intent> <!-- End of E-mail content --> </queries> |
1.2.4.9. 퍼미션 관련 설정
KGApplication.RequestPermissionsWithDescriptionPopup API 를 사용하기 위해서 AndroidManifest.xml에 meta-data 선언이 필요합니다.
meta-data를 설정하지 않으면 OS 에서 권한 팝업을 띄워주게 되어서 해당 API를 사용할 수 없게 됩니다.
AndroidManifest.xml (권한 팝업 설정)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" > <application> <meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" /> </application> </manifest> |
1.2.4.10. Http 사용 설정
targetSdkVersion을 28 버전 이상으로 설정하고 http 통신을 사용하는 게임은 아래와 같은 설정이 필요합니다.
카카오 게임 SDK 내부에서는 http를 사용하지 않습니다. 개발사에서 cdn등 이슈로 http 콜이 필요한 경우에만 설정합니다.
Kakao SDK v3.8.3 이상 버전 사용 필수
http 콜이 필요한 도메인 설정
res/xml/network_security_config.xml 파일 생성하여 http 통신이 필요한 domain을 추가
network_security_config.xml
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <!-- Add Your Http Domain --> <domain includeSubdomains="true">example.com</domain> </domain-config> </network-security-config>
AndroidManifest.xml 내 Application에 위에서 생성한 파일을 networkSecurityConfig 로 설정
AndroidManifest.xml
<application android:networkSecurityConfig="@xml/network_security_config">
1.2.4.11. 게임 내 지원 언어 리소스
라이브러리에서 게임 내 지원 언어 외 추가적인 언어 팩이 있을 때, 해당 언어를 제거하고 싶다면 아래 위치의 폴더를 제거 해주시면 됩니다.
예를 들어, 일본어 언어 설정을 제거하고 싶을 때에는 KakaoGameSDK>res>values-ja 폴더를 제거합니다.
1.2.5. 키 해시 확인 및 등록 방법
앱의 빌드를 위해서는 빌드 머신의 키 해시를 등록해야 하며 다음과 같은 방법으로 키 해시를 확인하실 수 있습니다.
디버그 키 해시 및 릴리즈 키 해시를 아래 가이드대로 구해서 [게임센터 > 게임관리 > 키해시등록] 메뉴에 등록해주세요.
1.2.5.1. 디버그 키 해시 구하기
Android SDK를 설치하면 androiddebugkey의 alias로 debug.keystore 파일에 개발용 인증서가 저장되어 있습니다. 인증서를 확인하는 방법은 아래와 같습니다. (주의: 아래는 실제 키 해시를 구하는 방법은 아닙니다.)
keytool -exportcert -alias androiddebugkey -keystore {debug_keystore_path} -storepass android -keypass android
keystore 등록해야할 키 해시는 아래와 같이 수행하여 구해야 합니다.
해당 샘플을 빌드한 머신에서 수행해야 합니다.
openssl 버전은 1.0.2 버전 혹은 그 이상것을 사용 해주시기 바랍니다.
keytool -exportcert -alias androiddebugkey -keystore {debug_keystore_path} -storepass android -keypass android | openssl sha1 -binary | openssl base64
위 방법은 리눅스에서는 정상 동작을 보증하나, 윈도우즈 환경에서는 제대로 값을 얻지 못할 수도 있습니다.
키 해시 오류가 날 경우, 아래의 방법으로도 시도해보시기 바랍니다.
keytool -exportcert -alias androiddebugkey -keystore {debug_keystore_path} > ./debug.txt openssl sha1 -binary debug.txt > debug_sha.txt openssl base64 -in debug_sha.txt > debug_base64.txt
[debug_keystore_path]
OS X와 리눅스 : Eclipse "ADT > Preferences > Android > Build > Default debug keystore" 에서 확인 가능합니다.
(예 : ~/.android/debug.keystore)Windows : Eclipse "Window > Preferences > Android > Build > Default debug keystore" 에서 확인 가능합니다.
Windows Vista와 Windows 7 (예: C:\Users\.android\debug.keystore)
Windows XP (예 : C:\Documents and Settings\.android\debug.keystore)
keytool : $JAVA_HOME/bin 아래에 존재합니다.
openssl : Windows의 경우는 다운 받아 설치합니다.
1.2.5.2. 릴리즈 키 해시 구하기
keytool -exportcert -alias [release_key_alias] -keystore [release_keystore_path] | openssl sha1 -binary | openssl base64 |
---|
invalid android_key_hash 오류 확인
키 해시를 구하여 게임센터에 등록한 후에도 지속적으로 <com.kakao.util.exception.KakaoException: AUTHORIZATION_FAILED : invalid android_key_hash or ios_bundle_id or web_site_url> 오류를 받는다면 아래와 같이 정상적인 키 해시를 사용하고 있는지 확인하실 수 있습니다.
게임에서 사용하는 MainActivity 클래스에서onCreate()
를 임시로 아래와 같이 변경합니다.MainActivity
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Add code to print out the key hash try { android.content.pm.Signature[] signatures; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES); if (packageInfo == null || packageInfo.signingInfo == null) { Log.e("KeyHash:", "KeyHash is Null. "); } if(packageInfo.signingInfo.hasMultipleSigners()){ signatures = packageInfo.signingInfo.getApkContentsSigners(); } else{ signatures = packageInfo.signingInfo.getSigningCertificateHistory(); } } else { PackageInfo info = getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES); signatures = info.signatures; } for (android.content.pm.Signature signature : signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.e("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } }
위 코드를 실행시켜 Logcat 출력에 다음과 같이 표시된 메시지에서 키 해시를 확인합니다.
1.2.6. 빌드 확인
프로젝트가 정상적으로 빌드 되는지 확인합니다.