1.2. Android SDK 설치
...
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 | |
idp_facebook | |
idp_googlegame | |
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 | |
idp_facebook | |
idp_googlegame | |
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 | |
idp_facebook | |
idp_googlegame | |
3.10.0 | gamesdk | |
idp_kakao | |
idp_facebook | |
idp_googlegame | |
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 | |
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 | |
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 | |
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 | |
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 | |
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)
코드 블럭 |
---|
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 카카오게임샵 : 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
코드 블럭 |
---|
<?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 이상)
...
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 파일 설정
...
SDK 최소 지원 버전은 21 이상으로 설정합니다.
SDK 타겟 버전을 31 으로 설정합니다.
SDK 에서는 아래 퍼미션들을 공통으로 사용합니다
다중 화면 처리를 위한 설정을 추가합니다.
3.16.0 미만 버전에서는 IDP 인증을 위해 아래 Activity 가 설정되어야 합니다.
ADID 를 얻기 위한 구글 설정 추가 (영향받는 버전: 3.10.4 버전 이상)
구글 Ads 최신 버전에서 해당 설정이 없는 경우 앱이 동작하지 않는 이슈가 있어 아래와 같이 설정합니다.
만약 게임에서 AdMob을 사용하고 있는 경우, 해당 필드에 게임의 AdMob App 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 설정을 해주어야 합니다.
...
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 선언을 설정합니다.
...
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 버전부터 해당 선언은 제거되었습니다.
메인 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의 패키지 가시성 대응과 관련하여
...
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 선언이 필요합니다.
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 통신을 사용하는 게임은 아래와 같은 설정이 필요합니다.
...
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 출력에 다음과 같이 표시된 메시지에서 키 해시를 확인합니다.
...