Android에서 Gamebase를 사용하기 위한 시스템 환경은 다음과 같습니다.
[최소 사양]
- 사용자 실행 환경 : Android API 19 (KitKat, OS 4.4) 이상
- 빌드 환경 : Android Gradle Plugin 3.2.0 이상
- 개발 환경 : Android Studio
Gamebase SDK | Gamebase Adapter | External SDK | 용도 | minSdkVersion |
---|---|---|---|---|
Gamebase | gamebase-sdk | nhncloud-core-1.9.2 nhncloud-common nhncloud-crash-reporter-ndk nhncloud-logger gson-2.8.9 okhttp-3.12.13 kotlin-stdlib-1.8.0 kotlin-stdlib-common kotlin-stdlib-jdk7 kotlin-stdlib-jdk8 kotlin-android-extensions-runtime kotlinx-coroutines-core-1.6.4 kotlinx-coroutines-android kotlinx-coroutines-core-jvm |
Gamebase의 인터페이스 및 핵심 로직을 포함 | API 19(Kitkat, OS 4.4) |
Gamebase Auth Adapters | gamebase-adapter-auth-appleid | - | Sign In With Apple 로그인을 지원 | - |
gamebase-adapter-auth-facebook | facebook-login-16.1.2 | Facebook 로그인을 지원 | - | |
gamebase-adapter-auth-google | play-services-auth-20.3.0 | Google 로그인을 지원 | - | |
gamebase-adapter-auth-gpgs-v2 | play-services-games-v2-20.1.2 | GPGS(Google Play Games Services) V2 로그인을 지원 | API 21(Lollipop, OS 5.0) | |
gamebase-adapter-auth-hangame | hangame-id-1.13.0 | Hangame 로그인을 지원 | - | |
gamebase-adapter-auth-line | linesdk-5.8.1 | LINE 로그인을 지원 | - | |
gamebase-adapter-auth-naver | naveridlogin-android-sdk-5.8.0 | NAVER 로그인을 지원 | API 21(Lollipop, OS 5.0) | |
gamebase-adapter-auth-payco | payco-login-1.5.15 | PAYCO 로그인을 지원 | - | |
gamebase-adapter-auth-twitter | signpost-core-1.2.1.2 | Twitter 로그인을 지원 | API 21(Lollipop, OS 5.0) | |
gamebase-adapter-auth-weibo | sinaweibosdk.core-13.5.0 | Weibo 로그인을 지원 | - | |
gamebase-adapter-auth-weibo-v4 | openDefault-4.4.4 | Weibo 로그인을 지원 | - | |
gamebase-adapter-auth-kakaogame | kakaogame.idp_kakao-3.19.3 kakaogame.gamesdk-3.19.3 kakaogame.common-3.19.3 kakao.sdk.v2-auth-2.17.0 kakao.sdk.v2-partner-auth-2.17.0 kakao.sdk.v2-common-2.17.0 play-services-ads-identifier-17.0.0 |
Kakao 로그인을 지원 | API 23(Marshmallow, OS 6.0) | |
Gamebase IAP Adapters | gamebase-adapter-toastiap | nhncloud-iap-core | 게임 내 결제 지원 | - |
gamebase-adapter-purchase-amazon | nhncloud-iap-amazon | Amazon Appstore를 지원 | - | |
gamebase-adapter-purchase-galaxy | nhncloud-iap-galaxy | Samsung Galaxy Store를 지원 | API 21(Lollipop, OS 5.0) Galaxy IAP SDK의 minSdkVersion은 18이지만, 실제 결제를 위해 설치해야 하는 Checkout 서비스 앱의 minSdkVersion은 21입니다. |
|
gamebase-adapter-purchase-google | billingclient.billing-5.0.0 nhncloud-iap-google |
Google Play를 지원 | - | |
gamebase-adapter-purchase-huawei | nhncloud-iap-huawei | Huawei AppGallery를 지원 | - | |
gamebase-adapter-purchase-onestore | nhncloud-iap-onestore | ONE store v17을 지원 | - | |
gamebase-adapter-purchase-onestore-v19 | nhncloud-iap-onestore-v19 | ONE store v19를 지원 | - | |
gamebase-adapter-purchase-onestore-v21 | nhncloud-iap-onestore-v21 | ONE store v21을 지원 | API 23(Marshmallow, OS 6.0) | |
gamebase-adapter-purchase-onestore-external | nhncloud-iap-onestore-external | ONE store 외부 결제 기능을 지원 | - | |
gamebase-adapter-purchase-mycard | nhncloud-iap-mycard | MyCard 결제 기능을 지원 | API 21(Lollipop, OS 5.0) | |
Gamebase Push Adapters | gamebase-adapter-toastpush | nhncloud-push-analytics nhncloud-push-core nhncloud-push-notification |
Push를 지원 | - |
gamebase-adapter-push-adm | nhncloud-push-adm | Amazon Device Messaging을 지원 | - | |
gamebase-adapter-push-fcm | firebase-messaging-17.6.0 nhncloud-push-fcm |
Firebase Cloud Messaging을 지원 | - |
[주의]
- NHN Cloud Console에서 새 프로젝트를 생성하여 Gamebase 서비스를 활성화했는지 반드시 확인하세요.
- 각 IdP 콘솔에서 Client ID를 발급받아 Gamebase 콘솔에 입력했는지 꼭 확인하세요.
AndroidX 사용 선언을 빌드 설정에 추가하세요.
Android Studio
# gradle.properties
# >>> [AndroidX]
android.useAndroidX=true
android.enableJetifier=true
Unity 2019.2 이하
// mainTemplate.gradle
([rootProject] + (rootProject.subprojects as List)).each {
ext {
// >>> [AndroidX]
it.setProperty("android.useAndroidX", true)
it.setProperty("android.enableJetifier", true)
}
}
Unity 2019.3 이상
# gradleTemplate.properties
# >>> [AndroidX]
android.useAndroidX=true
android.enableJetifier=true
Unreal
<gradleProperties>
<insert>
android.useAndroidX=true
android.enableJetifier=true
</insert>
</gradleProperties>
Android Gradle Plugin 버전이 3.4.0 미만인 경우 빌드가 실패하므로 다음 선언이 필요합니다.
# gradle.properties
# >>> Fix for AGP under 3.4.0
android.enableD8.desugaring=true
android.enableIncrementalDesugaring=false
Unity의 경우 Editor 버전이 2018.4.3 이하이거나, 2019.1.6 이하인 경우 이에 해당됩니다.(AGP 버전이 3.2.0)
// mainTemplate.gradle
([rootProject] + (rootProject.subprojects as List)).each {
ext {
// >>> Fix for AGP under 3.4.0
it.setProperty("android.enableD8.desugaring", true)
it.setProperty("android.enableIncrementalDesugaring", false)
}
}
Google Play Billing Library(PBL) 6.x를 R8과 함께 사용하는 경우, Android 4.4(API 레벨 19)에서 동작하지 않는 문제가 발생할 수 있습니다.
buildscript {
repositories {
// Raw R8 releases.
maven {
url("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath("com.android.tools:r8:8.1.46")
}
}
Huawei IAP를 사용하기 위해서 프로젝트 수준(root level)의 build.gradle 또는 settings.gradle(AGP 7.1 이상)에 다음 선언을 추가하세요.
buildscript {
repositories {
...
// [Huawei App Gallery] Maven repository address for the HMS Core SDK.
maven { url 'https://developer.huawei.com/repo/' }
}
dependencies {
...
// [Huawei App Gallery] AppGallery Connect plugin configuration. please use the latest plugin version.
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
// >>> [Huawei App Gallery] agconnect plugin for huawei - when Native Android build
apply plugin: 'com.huawei.agconnect'
repositories {
// >>> For Gamebase SDK
mavenCentral()
...
// >>> [Huawei App Gallery]
maven { url 'https://developer.huawei.com/repo/' }
// >>> [ONE store v21]
maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// >>> Gamebase Version
def GAMEBASE_SDK_VERSION = 'x.x.x'
// >>> Gamebase - Add Auth Adapter
implementation "com.toast.android.gamebase:gamebase-adapter-auth-google:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-gpgs-v2:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-facebook:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-appleid:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-twitter:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-naver:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-line:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-payco:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-weibo:$GAMEBASE_SDK_VERSION"
// >>> Gamebase - Select Purchase Adapter
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-google:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-onestore-v21:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-onestore-external:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-galaxy:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-amazon:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-huawei:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-mycard:$GAMEBASE_SDK_VERSION"
// >>> Gamebase - Select Push Adapter
implementation "com.toast.android.gamebase:gamebase-adapter-push-fcm:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-push-adm:$GAMEBASE_SDK_VERSION"
// >>> 다음 모듈의 사용 방법은 고객 센터로 문의 하시기 바랍니다.
implementation "com.toast.android.gamebase:gamebase-adapter-auth-hangame:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-hangamejp:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-hangamejpemail:$GAMEBASE_SDK_VERSION"
implementation "com.toast.android.gamebase:gamebase-adapter-auth-kakaogame:$GAMEBASE_SDK_VERSION"
// >>> [Weibo v4]
// https://github.com/nhn/toast.gamebase.android.sample/tree/main/weibo_sdk
implementation files('libs/openDefault-4.4.4.aar')
implementation "com.toast.android.gamebase:gamebase-adapter-auth-weibo-v4:$GAMEBASE_SDK_VERSION"
// >>> [ONE store v16]
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-onestore-v16:$GAMEBASE_SDK_VERSION"
// >>> [ONE store v17]
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-onestore:$GAMEBASE_SDK_VERSION"
// >>> [ONE store v19]
// https://github.com/ONE-store/onestore_iap_release/tree/iap19-release/android_app_sample/app/libs
implementation files('libs/iap_sdk-v19.01.00.aar')
implementation "com.toast.android.gamebase:gamebase-adapter-purchase-onestore-v19:$GAMEBASE_SDK_VERSION"
// >>> [Push Custom Receiver]
implementation "com.toast.android.gamebase:gamebase-adapter-push-notification:$GAMEBASE_SDK_VERSION"
}
android {
compileOptions {
// >>> [AndroidX]
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
// >>> [Weibo IdP]
ndk {
abiFilters 'armeabi' // , 'armeabi-v7a', 'arm64-v8a'
}
}
}
Unity 빌드인 경우
'Firebase Console > 프로젝트 설정'에서 google-services.json 파일을 다운로드합니다. 그런 다음 json 파일을 xml 파일로 변환하기 위한 generate_xml_from_google_services_json.exe 파일을 다운로드하고, 아래 명령어를 실행하여 파일을 변환할 수 있습니다.
"{UnityProject}\Firebase\Editor\generate_xml_from_google_services_json.exe" -i "{JsonFilePath}\google-services.json" -o "{UnityProject}\Assets\Plugins\Android\res\values\google-services.xml" -p "{PackageName}"
변환한 xml 파일은 'Android 라이브러리 프로젝트'에 리소스로 추가해야 합니다.
Unreal 빌드인 경우
GoogleServicesFilePath
의 값을 Firebase 콘솔에서 다운로드한 google-services.json
의 경로로 지정합니다.GoogleServicesFilePath
의 값을 비워 두면 Gamebase에서는 해당 JSON을 Android 리소스로 변환하는 작업을 진행하지 않습니다.고객 센터 페이지(Game > Gamebase > Android SDK 사용 가이드 > ETC > Additional Features > Contact)에서 문의글 작성 시 사진 및 미디어를 첨부하기 위해 Android API Level 21(OS 5.0) 이하 단말기에서는 저장소 읽기 권한 선언이 필요합니다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="21"/>
Android API Level 22 이상의 단말기에서도 READ_EXTERNAL_STORAGE 권한이 필요하다면 android:maxSdkVersion="21" 구문을 제거하고 런타임 권한 요청을 구현해야 합니다.
AndroidManifest.xml
<manifest ...>
<application ...>
...
<!-- [Facebook] Configurations begin -->
<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] Configurations end -->
...
</application>
</manifest>
res/values/strings.xml
<resources>
<!-- [Facebook] Facebook APP ID & Client Token -->
<string name="facebook_app_id">123456789012345</string>
<string name="facebook_client_token">a01234bc56de7fg89012hi3j45k67890</string>
</resources>
AndroidManifest.xml
<manifest ...>
<application ...>
...
<!-- [GPGS v2] Configurations begin -->
<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id" />
<!-- [GPGS v2] Configurations end -->
...
</application>
</manifest>
res/values/strings.xml
<resources>
<!-- [GPGS v2] GPGS v2 APP ID -->
<string name="game_services_project_id">1234567890</string>
</resources>
<application android:networkSecurityConfig="@xml/my_network_security_config"
...>
...
</application>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<!-- Weibo SDK start -->
<domain includeSubdomains="true">sina.cn</domain>
<domain includeSubdomains="true">weibo.cn</domain>
<domain includeSubdomains="true">weibo.com</domain>
<domain includeSubdomains="true">sinaimg.cn</domain>
<domain includeSubdomains="true">sinajs.cn</domain>
<domain includeSubdomains="true">sina.com.cn</domain>
<!-- Weibo SDK end -->
</domain-config>
</network-security-config>
<manifest>
...
<application>
...
<!-- [ONE store] Configurations begin -->
<!-- popup:팝업 결제 화면 / full:전체 결제 화면 -->
<meta-data
android:name="iap:view_option"
android:value="popup | full" />
<!-- [ONE store] Configurations end -->
...
</application>
</manifest>
결제 화면 | 설정 값 |
---|---|
전체 결제 화면 | "full" |
팝업 결제 화면 | "popup" |
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=123456789">
</meta-data>
<meta-data
android:name="com.huawei.hms.client.cpid"
android:value="cpid=1234567891234">
</meta-data>
주의: 사용자 단말에 Huawei App Gallery가 설치되어 있어야 정상적으로 결제가 가능합니다.
<application
android:name="com.toast.android.gamebase.purchase.mycard.GamebaseMyCardApplication"
...>
...
</application>
class MyApplication: GamebaseMyCardApplication() {
...
}
<application>
<meta-data android:name="iap:test_mode" android:value="true | false"/>
</application>
Example
<!-- When you have multiple applications sharing an Gamebase project, use this field to identify each application. -->
<meta-data android:name="com.nhncloud.sdk.push.deviceId.salt"
android:value="ApplicationForGoogleStore" />
<!-- Notification priority -->
<meta-data android:name="com.toast.sdk.push.notification.default_priority"
android:value="1"/>
<!-- Notification background color -->
<meta-data android:name="com.toast.sdk.push.notification.default_background_color"
android:resource="@color/defaultNotificationColor"/>
<!-- LED light -->
<meta-data android:name="com.toast.sdk.push.notification.default_light_color"
android:value="#0000ff"/>
<meta-data android:name="com.toast.sdk.push.notification.default_light_on_ms"
android:value="0"/>
<meta-data android:name="com.toast.sdk.push.notification.default_light_off_ms"
android:value="500"/>
<!-- Small icon -->
<meta-data android:name="com.toast.sdk.push.notification.default_small_icon"
android:resource="@drawable/ic_notification"/>
<!-- Sound -->
<meta-data android:name="com.toast.sdk.push.notification.default_sound"
android:value="notification_sound"/>
<!-- Vibrate pattern -->
<meta-data android:name="com.toast.sdk.push.notification.default_vibrate_pattern"
android:resource="@array/default_vibrate_pattern"/>
<!-- Use badge icon or not -->
<meta-data android:name="com.toast.sdk.push.notification.badge_enabled"
android:value="true"/>
<!-- Enable notification when application is foreground. -->
<meta-data android:name="com.toast.sdk.push.notification.foreground_enabled"
android:value="false"/>
meta-data key | value type | description |
---|---|---|
com.nhncloud.sdk.push.deviceId.salt | String | 서로 다른 애플리케이션이 하나의 Gamebase 프로젝트를 공유하는 경우, 푸시가 정상적으로 동작하지 않습니다. 각각의 앱마다 서로 다른 임의의 'salt' 값을 지정해야 합니다. |
com.toast.sdk.push.notification.default_priority | int | 우선 순위. 아래 5가지 값을 설정할 수 있습니다. NoticationComapt.PRIORITY_MIN : -2 NoticationComapt.PRIORITY_LOW : -1 NoticationComapt.PRIORITY_DEFAULT : 0 NoticationComapt.PRIORITY_HIGH : 1 NoticationComapt.PRIORITY_MAX : 2 |
com.toast.sdk.push.notification.default_background_color | int | 배경색. |
com.toast.sdk.push.notification.default_light_color | int | LED 색. |
com.toast.sdk.push.notification.default_light_on_ms | int | LED 불이 들어올 때의 시간. |
com.toast.sdk.push.notification.default_light_off_ms | int | LED 불이 나갈 때의 시간. |
com.toast.sdk.push.notification.default_small_icon | resource id | 작은 아이콘의 리소스 식별자. |
com.toast.sdk.push.notification.default_sound | String | 알림음 파일 이름. Android 8.0 미만 OS에서만 동작합니다. 'res/raw' 폴더의 mp3, wav 파일명을 지정하면 알림음이 변경됩니다. |
com.toast.sdk.push.notification.default_vibrate_pattern | long[] | 진동의 패턴. |
com.toast.sdk.push.notification.badge_enabled | boolean | 배지 아이콘 사용 여부. |
com.toast.sdk.push.notification.foreground_enabled | boolean | 포그라운드 알림 사용 여부. |
[주의]
- 'queries' 태그는 기존 Android Gradle Plugin(AGP)에서는 인식하지 못하여 빌드가 실패합니다.
- 아래 가이드 및 표를 참고해 'queries' 태그 빌드가 가능한 AGP 버전으로 업그레이드하시기 바랍니다.
- https://android-developers.googleblog.com/2020/07/preparing-your-build-for-package-visibility-in-android-11.html
- AGP 3.2.* 이하의 버전을 사용한다면 3.3.3 이상으로 업그레이드해야 합니다.
- AGP 4.1.0 이상의 버전을 사용한다면 AGP 업그레이드는 하지 않아도 무방합니다.
If you are using the Android Gradle plugin version... |
...upgrade to: | Unity Editor |
---|---|---|
4.1.* | N/A (no upgrade needed) | - |
4.0.* | 4.0.1 | - |
3.6.* | 3.6.4 | 2020.1 ~ |
3.5.* | 3.5.4 | - |
3.4.* | 3.4.3 | 2018.4.4 ~ 2019.1.7 ~ |
3.3.* | 3.3.3 | - |
3.2.* | Not supported | 2017.4.17 ~ 2018.3 ~ 2018.4.3 2019.1.0 ~ 2019.1.6 |
3.0.* | Not supported | 2018.2 |
2.3.* | Not supported | 2017.3 ~ 2017.4.16 2018.1 |
2.1.* | Not supported | Unity 5 2017.1 ~ 2017.2 |
<manifest>
<!-- [Android11] settings start -->
<queries>
<!-- [All SDK] AppToWeb Authenthcation support start -->
<package android:name="com.android.chrome" />
<package android:name="com.chrome.beta" />
<package android:name="com.chrome.dev" />
<package android:name="com.sec.android.app.sbrowser" />
<!-- [All SDK] AppToWeb Authenthcation support end -->
<!-- [Facebook] Configurations begin -->
<package android:name="com.facebook.katana" />
<!-- [Facebook] Configurations end -->
<!-- [PAYCO/Hangame] Configurations begin -->
<package android:name="com.nhnent.payapp" />
<!-- [PAYCO/Hangame] Configurations end -->
<!-- [Hangame] Configurations begin -->
<package android:name="com.nhn.hangameotp" />
<package android:name="com.sci.siren24.ipin" />
<package android:name="kr.co.samsungcard.mpocket" />
<package android:name="com.lcacApp" />
<package android:name="com.shcard.smartpay" />
<package android:name="com.hyundaicard.appcard" />
<package android:name="com.kbcard.cxh.appcard" />
<package android:name="com.hanaskcard.paycla" />
<package android:name="kvp.jjy.MispAndroid320" />
<package android:name="nh.smart.nhallonepay" />
<!-- [Hangame] Configurations end -->
<!-- [NAVER] Configurations begin -->
<package android:name="com.nhn.android.search" />
<!-- [NAVER] Configurations end -->
<!-- [Weibo] Configurations begin -->
<package android:name="com.weico.international" />
<package android:name="com.sina.weibo" />
<!-- [Weibo] Configurations end -->
<!-- [ONE store] Configurations begin -->
<!-- Android 2.60.0 이상부터는 ONE store queries 선언이 필요하지 않습니다. -->
<intent>
<action android:name="com.onestore.ipc.iap.IapService.ACTION" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="onestore" />
</intent>
<!-- [ONE store] Configurations end -->
<!-- [Galaxy store] Configurations begin -->
<package android:name="com.sec.android.app.samsungapps" />
<!-- [Galaxy store] Configurations end -->
</queries>
<!-- [Amazon Appstore] Configuration begin -->
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<!-- [Amazon Appstore] Configuration end -->
<!-- [Android11] settings end -->
</manifest>
[주의]
- QUERY_ALL_PACKAGES 권한은 Amazon Appstore 전용 선언이므로 Google Play 빌드시에는 적용하지 않도록 주의하시기 바랍니다.
# ---------------------- [Gamebase TOAST IAP] defines start ----------------------
# For using reflection
-keep class com.toast.android.toastgb.iap.ToastGbStoreCode { *; }
# ---------------------- [Gamebase TOAST IAP] defines end ----------------------
Gamebase에서 더 이상 지원하지 않는 API는 Deprecate 처리합니다. Deprecated 된 API는 다음 조건 충족 시 사전 공지 없이 삭제될 수 있습니다.