Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

1.2. Android SDK 설치

...

  • IDE: Android Studio

    • 기존 Eclipse 기반에서 개발하고 있다면 아래와 같이 마이그레이션을 먼저 진행해야 합니다.

      • 개발하고 있는 게임 프로젝트에서 우클릭하여 ' Properties > Android > Library' 에서 추가한 SDK 라이브러리들을 전부 'Remove' 한 뒤 'Apply' 합니다.

      • 구글에서 제공하는 마이그레이션 가이드를 참조하여 게임 프로젝트만 Android Studio로 마이그레이션을 진행합니다.

      • 이후 본 가이드를 따라 SDK를 적용하세요.

  • JDK: JDK 8이상

  • Android SDK: Android 12 (API 31)

  • OS : Android 5 Android 6.0, API 21 이상 지원 API 23 이상 지원

  • Gradle Version 6.1.1 사용

1.2.2. SDK 환경 설정

...

각 필요한 라이브러리들이 아래 버전으로 dependency 가 걸려있습니다. 카카오 게임SDK를 연결 시 자동으로 포함됩니다. 

SDK version

Module

External Libraries

3.7.1   

 

 

gamesdk

  • com.google.android.gms:play-services : 11.8.0

  • com.google.firebase:firebase-messaging:11.8.0

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

idp_kakao

  • com.google.android.gms:play-services : 11.8.0

idp_facebook

  • com.facebook.android:facebook-android-sdk : 4.+

idp_googlegame

  • com.google.android.gms:play-services : 11.8.0

3.8.0

gamesdk

  • com.google.android.gms:play-services-ads : 15.0.1

  • com.google.firebase:firebase-messaging:15.0.2

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

idp_kakao

  • com.google.android.gms:play-services-ads: 15.0.1

idp_facebook

  • com.facebook.android:facebook-android-sdk : 4.35.0

idp_googlegame

  • com.google.android.gms:play-services-auth: 15.0.1

  • com.google.android.gms:play-services-games : 15.0.1

3.9.1

gamesdk

  • com.google.android.gms:play-services-ads : 15.0.1

  • com.google.firebase:firebase-messaging:15.0.2

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

idp_kakao

  • com.google.android.gms:play-services-ads: 15.0.1

idp_facebook

  • com.facebook.android:facebook-android-sdk : 4.38.1

idp_googlegame

  • com.google.android.gms:play-services-auth: 15.0.1

  • com.google.android.gms:play-services-games : 15.0.1

3.10.0   

gamesdk

  • com.google.android.gms:play-services-ads : 16.0.0

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

idp_kakao

  • com.google.android.gms:play-services-ads : 16.0.0

idp_facebook

  • com.facebook.android:facebook-android-sdk : 5.0.1

idp_googlegame

  • com.google.android.gms:play-services-auth: 16.0.0

  • com.google.android.gms:play-services-games : 16.0.0

3.10.4 (AndroidX)  

gamesdk

  • com.google.android.gms:play-services-ads : 18.0.0

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

  • androidx.legacy:legacy-support-v4:1.0.0

  • androidx.cardview:cardview:1.0.0

  • androidx.appcompat:appcompat:1.0.0

idp_facebook

  • com.facebook.android:facebook-android-sdk : 5.8.0

idp_googlegame

  • com.google.android.gms:play-services-auth: 17.0.0

  • com.google.android.gms:play-services-games : 18.0.0

  • androidx.annotation:annotation:1.0.0

3.10.6  

gamesdk

  • com.google.android.gms:play-services-ads : 18.0.0

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

  • androidx.legacy:legacy-support-v4:1.0.0

  • androidx.cardview:cardview:1.0.0

  • androidx.appcompat:appcompat:1.0.0

  • com.android.installreferrer:installreferrer:1.0

idp_facebook

  • com.facebook.android:facebook-android-sdk : 5.8.0

idp_googlegame

  • com.google.android.gms:play-services-auth: 17.0.0

  • com.google.android.gms:play-services-games : 18.0.0

  • androidx.annotation:annotation:1.0.0

3.11.0

idp_facebook

  • com.facebook.android:facebook-android-sdk:9.0.0

3.11.5

common

  • com.google.android.gms:play-services-ads:19.3.0

  • androidx.legacy:legacy-support-v4:1.0.0

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

gamesdk

  • com.android.installreferrer:installreferrer:1.0

  • androidx.appcompat:appcompat:1.0.0

  • androidx.cardview:cardview:1.0.0

idp_kakao

  • com.kakao.sdk:v2-partner-common:2.5.2

  • com.kakao.sdk:v2-partner-user:2.5.2

  • com.kakao.sdk:v2-partner-talk:2.5.2

  • com.kakao.sdk:v2-story:2.5.2

  • com.kakao.sdk:v2-link:2.5.2

idp_facebook

  • com.facebook.android:facebook-android-sdk:9.0.0

idp_googlegame

  • com.google.android.gms:play-services-auth:17.0.0

  • com.google.android.gms:play-services-games:18.0.0

  • androidx.annotation:annotation:1.0.0

3.13.4

common

  • com.google.android.gms:play-services-ads:19.8.0

  • androidx.work:work-runtime:2.7.0

  • androidx.legacy:legacy-support-v4:1.0.0

  • com.nostra13.universalimageloader:universal-image-loader:1.9.5

gamesdk

  • com.android.installreferrer:installreferrer:1.0

  • androidx.appcompat:appcompat:1.0.0

  • androidx.cardview:cardview:1.0.0

idp_kakao

  • com.kakao.sdk:v2-partner-common:2.8.6

  • com.kakao.sdk:v2-partner-user:2.8.6

  • com.kakao.sdk:v2-partner-talk:2.8.6

  • com.kakao.sdk:v2-partner-friend:2.8.6

  • com.kakao.sdk:v2-story:2.8.6

  • com.kakao.sdk:v2-link:2.8.6

idp_facebook

  • com.facebook.android:facebook-android-sdk:11.3.0

idp_googlegame

  • com.google.android.gms:play-services-auth:19.2.0

  • com.google.android.gms:play-services-games:21.0.0

  • androidx.annotation:annotation:1.0.0

만약 게임에서 위 라이브러리와 dependencies가 겹치는 외부 라이브러리를 사용하는 경우 아래와 같이 해당 링크를 제거하여 버전이 높은 쪽으로 사용할 수 있습니다.

build.gradle(app level)

Code Block
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)

Code Block
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
카카오게임샵 : kakaogameShop
원스토어 : oneStore 

debugLevel

선택

카카오게임 SDK의 로그 출력 레벨을 설정합니다. 설정하지 않으면 NONE으로 설정됩니다.

VERBOSE / DEBUG / ERROR / NONE(기본값)

serverType

선택

SDK 와 연결될 플랫폼의 서버 타입을 설정합니다. 실제 서비스 용 빌드에서는 "real" 로 설정하시면 됩니다.

real, real_global : 글로벌 서버로 접속 필요한 경우 사용

assets/kakao_game_sdk_configuration.xml

...

res/values/kakao_game_kakao_auth.xml

Code Block
<?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

Code Block
<?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

Code Block
<?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 이상)

...

res/values/kakao_game_siwa_auth.xml

Code Block
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="siwa_client_id">[SIWA클라이언트아이디]</string>
</resources>

1.2.4. AndroidManifest.xml 파일 설정

...

  • 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를 삽입합니다.

    • 퍼미션 선언 필요

AndroidManifest.xml (공통 설정)

Code Block
<?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 설정을 해주어야 합니다.

...

AndroidManifest.xml (URL 프로모션 설정)

Code Block
<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 선언을 설정합니다. 

...

AndroidManifest.xml (초대 이벤트 설정)

Code Block
<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 (초대 이벤트 설정)

Code Block
<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 (카카오 인증 설정)

Code Block
<?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 (구글 인증 설정)

Code Block
<?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 (페이스북 인증 설정)

Code Block
<?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 (트위터 인증 설정)

Code Block
<?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의 패키지 가시성 대응과 관련하여

...

AndroidManifest.xml (공통 설정)

Code Block
<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 (권한 팝업 설정)

Code Block
<?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 통신을 사용하는 게임은 아래와 같은 설정이 필요합니다.

...

  • 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. 릴리즈 키 해시 구하기

Code Block
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

      Code Block
      @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 출력에 다음과 같이 표시된 메시지에서 키 해시를 확인합니다.

...