Android SDK

Android에서 게임을 개발하기 위한 GAMEPOT Android SDK 사용법에 대해 설명합니다. SDK를 설치하고 환경을 구성함으로써 게임과 대시보드를 연동할 수 있습니다.

요구 사양

Android용 GAMEPOT SDK를 사용하기 위한 요구 사양은 다음과 같습니다.

  • 최소 사양: Android Level 24 이상 (하위 버전의 Android 지원이 필요하면 [email protected] 메일로 문의해 주시기 바랍니다. )

SDK 설치 및 환경 구성

Android SDK를 설치한 후 환경을 구성하여 GAMEPOT 대시보드와 게임을 연동하고 게임 개발에 필요한 기능을 사용할 수 있습니다.

GAMEPOT SDK에서 지원하는 언어는 아래와 같습니다.

  • 한국어, 영어, 이탈리아어, 태국어 ,베트남어, 일본어, 중국어(간체/번체), 인도네시아어, 독일어, 스페인어, 프랑스어

앱 실행 시 디바이스 언어에 따라 SDK 내 지원 언어로 표기되며 미지원 언어는 영어로 표기됩니다.

SDK 설치

GAMEPOT Android SDK를 설치하고 프로젝트를 구성하는 방법은 다음과 같습니다.

  1. 관리자 계정으로 대시보드에 로그인해 주십시오.

  2. bundle.gradle 혹은 bundle.gradle.kts 파일에 Nbase SDK 를 추가해 주십시오.

  3. 게임팟 3.0 부터는 Gradle 설정을 통해 간단하게 외부 라이브러리와 통합이 가능합니다.

Kotlin Gradle 설정

  1. 프로젝트의 settings.gradle.kts 파일에 아래 정의를 추가합니다.

dependencyResolutionManagement {
    repositories {
        ...
        google()
        // nbase repo
        maven(url = "https://repo.nbase.io/repository/nbase-releases")
    }
}
  1. 프로젝트에 (Module : app)의 build.gradle.kts 파일에 SDK 종속성을 추가합니다.

dependencies {
...
    implementation("io.nbase:nbasesdk:latest.release")
}

예) 구글 로그인과 구글 스토어 결제를 사용하는 경우

 dependencies {
...
    implementation("io.nbase:nbasesdk:latest.release")
    implementation("io.nbase:nbase-adapter-provider-google:latest.release")
    implementation("io.nbase:nbase-adapter-billing-googleplay:latest.release")
}

Java Gradle 설정

  1. 프로젝트에 (Module : project)의 build.gradle 파일에 정의를 추가합니다.

allprojects {
    repositories {
        ...
        google()
        // nbase repo
        maven { url "https://repo.nbase.io/repository/nbase-releases" }
    }
}
  1. 프로젝트에 (Module : app)의 build.gradle 파일에 SDK 종속성을 추가합니다.

dependencies {
...
    implementation("io.nbase:nbasesdk:latest.release")
}

예) 구글 로그인과 구글 스토어 결제를 사용하는 경우

 dependencies {
...
    implementation("io.nbase:nbasesdk:latest.release")
    implementation("io.nbase:nbase-adapter-provider-google:latest.release")
    implementation("io.nbase:nbase-adapter-billing-googleplay:latest.release")
}

라이브러리 리스트

Name
Version
Description
Dependeny modules

io.nbase:nbasesdk

3.0.87

게임팟 기본 모듈

X

io.nbase:nbase-adapter-provider-google

3.0.10

구글 로그인

X

io.nbase:nbase-adapter-provider-apple

3.0.6

애플 로그인

X

io.nbase:nbase-adapter-provider-facebook

3.0.4

페이스북 로그인

com.facebook.android:facebook-login:latest.release

io.nbase:nbase-adapter-provider-kakao

3.0.2

카카오 로그인

X

io.nbase:nbase-adapter-provider-line

3.0.2

라인 로그인

X

io.nbase:nbase-adapter-provider-naver

3.0.1

네이버 로그인

X

io.nbase:nbase-adapter-provider-huawei

3.0.1

화웨이 로그인

X

io.nbase:nbase-adapter-provider-playgame

3.0.3

구글플레이게임 로그인

X

io.nbase:nbase-adapter-provider-x

3.0.1

X 로그인

X

io.nbase:nbase-adapter-billing-googleplay

3.0.6

구글 스토어

com.android.billingclient:billing-ktx:7.1.1

io.nbase:nbase-adapter-billing-onestore

3.0.2

원스토어

X

io.nbase:nbase-adapter-billing-galaxy

3.0.3

갤럭시 스토어

X

io.nbase:nbase-adapter-billing-huawei

3.0.1

화웨이 스토어

X

게스트 로그인의 경우 기본 모듈에 적용되어 있습니다.

사전 준비

  1. 프로젝트ID 와 프로젝트 키는 대시보드 → 프로젝트 설정에서 복사 하실 수 있습니다.

  2. 로그인, 스토어, 연동에 대한 환경설정은 모두 대시보드 → 프로젝트 설정 에서 추가/수정 하실 수 있습니다.

  3. 로그인 별로 [로그인 인증 환경 설정] 을 참고하여, 콘솔에 설정하고 대시보드에 추가해야만 합니다.

  4. 인앱 결제 시에 [스토어 환경 설정] 을 참고하여, 콘솔에 설정하고 대시보드에 추가해야만 합니다.

  5. 인앱 결제를 위한 스토어마다 아이템을 등록해 주세요. 대시보드 → 결제 → 인앱에서 추가해 주세요.

초기화

초기화를 수행하려면 게임을 시작할 때 로드되는 첫 장면에 사용되는 개체에 아래 코드를 추가해 주십시오.

import com.nbase.sdk.NBase
import com.nbase.sdk.Store

NBase.initialize(activity, projectId, projectKey, [StoreId], [language], [region]) { init, e ->
    if (e != null) {
        Log.e("NBase", e.message)
    } else {
        Log.e("NBase", init)
    }
}
  • Parameter

Key
Type
Description
Required

projectId

String

프로젝트 ID (대시보드 → 프로젝트 설정)

O

projectKey

String

프로젝트 키 (대시보드 → 프로젝트 설정)

O

storeId

String

스토어 ID (아래 표 참고)

O

language

String

언어 (en,ko,jp...)

O

region

String

리전명 (kr, jp, sg, us, eu, preview)

O

Key
Description

Store.GOOGLE

구글 스토어

Store.ONE

원스토어

Store.GALAXY

갤럭시 스토어

Store.AMAZON

아마존 스토어

Store.HUAWEI

화웨이 스토어

  • Callback

Key
Type
Description

status

Boolean

상태

language

String

언어

country

String

국가

remote_ip

String

IP

platform

String

플랫폼

sandbox

Boolean

샌드박스 여부

로그인 기능

로그인 기능 사용하기

개발사에서 구현한 로그인 UI에 따라 로그인 버튼을 클릭했을 때 동작하는 SDK 로그인 기능을 사용하려면 아래 코드를 사용해 주십시오.

import com.nbase.sdk.Provider

NBase.signIn(activity, Provider.GOOGLE.toString()) { user, e -> 
    if (e != null) {
        if (e.errorCode == 414) { // Maintenance
            // Maintenance
            Log.e("NBase", "Maintenance: " + e.message) // Maintenance message
            /* case 1: Use in-game popup implemented directly by the developer
            case 2: Call the code below to use the SDK's own popup
            NBase.showAppStatusPopup(activity, user?.appStatus) { status, err ->
                // Popup handling
            }
            */
        } else if (e.errorCode == 413) { // Update
            // Update
            Log.e("NBase", "Update: " + e.message) // Update message
            /* case 1: Use in-game popup implemented directly by the developer
            case 2: Call the code below to use the SDK's own popup
            NBase.showAppStatusPopup(activity, user?.appStatus) { status, err ->
                // Popup handling
            }
            */
        } else {
            // signIn Failed
            Log.e("NBase", "signIn Failed: " + e.errorCode + ", " + e.message)
        }
    } else {
        // signIn Success
        Log.e("NBase", "signIn Success: " + user.toString())
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    NBase.onActivityResult(requestCode, resultCode, data)
}

업데이트 / 점검 시 SDK 에서 제공하는 자체 팝업을 사용하는 경우 아래 코드를 추가해 주십시오.

NBase.showAppStatusPopup(activity, appStatus){ status, e ->
    if (status.close){
        // App Close
    }
    else if (status.next){
        // Next, Optional update
    }
}
  • Parameter

Key
Description

Provider.GOOGLE

구글

Provider.ANONYMOUS

게스트

Provider.FACEBOOK

페이스북

Provider.APPLE

애플

Provider.KAKAO

카카오

Provider.GOOGLEPLAY

구글플레이게임

Provider.STEAM

스팀

Provider.X

X

Provider.LINE

라인

Provider.NAVER

네이버

Provider.GITHUB

깃헙

Provider.MICROSOFT

마이크로소프트

Provider.HUAWEI

화웨이

  • User

Key
Type
Description

id

string

유저의 고유 ID

socialId

string

소셜 ID

name

string

이름 (제공해 주는 경우)

email

string

이메일 (제공해 주는 경우)

token

string

토큰

age

int

나이 (제공해 주는 경우)

profile

string

프로필 (제공해 주는 경우)

customField

string

커스텀 필드

isSignUp

bool

가입 여부

appStatus

AppStatus

점검/업데이트 상태

  • AppStatus

Key
Type
Description

message

string

메시지

startedAt

long

시작 시간

endedAt

long

종료 시간

currentAppVersion

string

현재 앱 버전

updateAppVersion

string

업데이트 앱 버전

currentAppVersionCode

string

현재 앱 버전 코드

updateAppVersionCode

string

업데이트 앱 버전 코드

isForce

bool

강제 업데이트 여부

url

string

점검/업데이트 등록된 URL

SDK 자체 제공 로그인 UI

GAMEPOT SDK가 제공하는 완성된 형태의 로그인 UI를 사용할 수 있습니다. SDK가 제공하는 로그인 UI를 호출하려면 아래 코드를 사용해 주십시오.

NBase.openSignInUI(activity) { user, e -> 
    if (e != null) {
        if (e.errorCode == 414) { // Maintenance
            // Maintenance
            Log.e("NBase", "Maintenance: " + e.message) // Maintenance message
            /* case 1: Use in-game popup implemented directly by the developer
            case 2: Call the code below to use the SDK's own popup
            NBase.showAppStatusPopup(activity, user?.appStatus) { status, err ->
                // Popup handling
            }
            */
        } else if (e.errorCode == 413) { // Update
            // Update
            Log.e("NBase", "Update: " + e.message) // Update message
            /* case 1: Use in-game popup implemented directly by the developer
            case 2: Call the code below to use the SDK's own popup
            NBase.showAppStatusPopup(activity, user?.appStatus) { status, err ->
                // Popup handling
            }
            */
        } else {
            // signIn Failed
            Log.e("NBase", "signIn Failed: " + e.errorCode + ", " + e.message)
        }
    } else {
        // signIn Success
        Log.e("NBase", "signIn Success: " + user.toString())
    }
}

자동 로그인 (옵션)

초기화 한 후에 마지막으로 로그인한 인증 수단으로 자동 로그인을 시도합니다. 자동 로그인을 시도하기 전에 마지막 로그인 Provider 타입을 확인하여 유효한 값이 있을 때만 자동 로그인을 수행하는 것을 권장합니다.

// 마지막 로그인 Provider 타입 확인
val lastProviderType = NBase.getLastProviderType()

if (lastProviderType != Provider.NONE) {
    // 유효한 Provider가 있을 때만 자동 로그인 시도
    NBase.signInLastLoggedIn(activity) { user, e ->
        if (e != null) {
            if (e.errorCode == 414) { // Maintenance
                // Maintenance
                Log.e("NBase", "Maintenance: " + e.message) // Maintenance message
                /* case 1: Use in-game popup implemented directly by the developer
                case 2: Call the code below to use the SDK's own popup
                NBase.showAppStatusPopup(activity, user?.appStatus) { status, err ->
                    // Popup handling
                }
                */
            } else if (e.errorCode == 413) { // Update
                // Update
                Log.e("NBase", "Update: " + e.message) // Update message
                /* case 1: Use in-game popup implemented directly by the developer
                case 2: Call the code below to use the SDK's own popup
                NBase.showAppStatusPopup(activity, user?.appStatus) { status, err ->
                    // Popup handling
                }
                */
            } else {
                // signIn Failed
                Log.e("NBase", "signIn Failed: " + e.errorCode + ", " + e.message)
            }
        } else {
            // signIn Success
            Log.e("NBase", "signIn Success: " + user.toString())
        }
    }
} else {
    // 마지막 로그인 정보가 없음
    Log.e("NBase", "No last login provider found")
}
  • getLastProviderType()

마지막으로 로그인한 Provider 타입을 반환합니다.

Return Type
Description

Provider

마지막 로그인 Provider 타입

  • signInLastLoggedIn() Parameter

Key
Type
Description
Required

activity

Activity

현재 액티비티

O

로그아웃

SDK 로그아웃 기능을 사용하려면 아래 코드를 사용해 주십시오.

NBase.signOut(activity) { status, e ->
    if (e != null) {
        Log.e("NBase", "signOut Fail")
        Log.e("NBase", "error.message : " + e.message.toString())
    } else {
        Log.e("NBase", "signOut")
        Log.e("NBase", "status : " + status.toString())
        // 로그아웃 성공 후 처리 로직
    }
}
  • Parameter

Key
Type
Description
Required

activity

Activity

현재 액티비티

O

  • Callback

Key
Type
Description

status

Boolean

성공 여부

회원 탈퇴

회원 탈퇴 기능을 사용하려면 아래 코드를 사용해 주십시오.

NBase.deleteMember(providerId) { status, e ->
    if (e != null) {
        Log.e("NBase", "deleteMember Fail")
        Log.e("NBase", "error.message : " + e.message.toString())
    } else {
        Log.e("NBase", "deleteMember")
        Log.e("NBase", "status : " + status.toString())
        // 회원 탈퇴 성공 후 처리 로직
    }
}
  • Parameter

Key
Type
Description
Required

providerId

Provider

로그인한 Provider 타입 (예: Provider.GOOGLE, Provider.ANONYMOUS 등)

O

  • Callback

Key
Type
Description

status

Boolean

성공 여부

자체 아이디 비밀번호 인증하기 (옵션)

사용자가 이메일 주소와 비밀번호를 사용하여 로그인할 수 있게 하는 인증 메서드입니다. 사용자의 이메일 주소와 비밀번호를 기반으로 사용자 인증을 수행합니다. 이 기능은 전통적인 이메일/비밀번호 기반의 인증 시스템에서 중요한 역할을 합니다.

NBase.signInWithPassword(activity, username, password) { user, e ->
    if (e != null) {
        Log.e("NBase", e.message)
    } else {
        Log.e("NBase", user)
    }
}

자격 증명으로 로그인하기 (옵션)

다양한 인증 방법(이메일 및 비밀번호, 소셜 미디어 계정, 전화번호 등)을 통해 얻은 인증 자격 증명(credentials)으로 사용자 로그인을 처리하는 데 사용됩니다. 다양한 인증 방식을 쉽게 구현할 수 있도록 도와주며 게임팟에 로그인할 수 있도록 합니다.

NBase.signInWithCredential(activity, Provider.GOOGLE.ToString(), providerToken) { user, e ->
    if (e != null) {
        Log.e("NBase", e.message)
    } else {
        Log.e("NBase", user)
    }
}

외부 계정 연동 기능

외부 계정 연동 기능 사용하기

현재 게임팟 사용자 계정에 다른 소셜 계정을 연동하려면 아래 코드를 사용해 주십시오.

NBase.createLinking(activity, providerId) { linkingId, e ->
    if (e != null) {
        Log.e("NBase", "createLinking Fail")
        Log.e("NBase", "error.message : " + e.message.toString())
    } else {
        Log.e("NBase", "createLinking")
        Log.e("NBase", "linkingId : " + linkingId.toString())
        // 계정 연동 성공 후 처리 로직
    }
}
  • Parameter

Key
Type
Description
Required

activity

Activity

현재 액티비티

O

providerId

Provider

연동할 Provider 타입 (예: Provider.GOOGLE, Provider.FACEBOOK 등)

O

  • Callback

Key
Type
Description

linkingId

String

연동 성공 시 반환되는 연동 ID

연동 리스트 확인

현재 게임팟 사용자 계정에 연동된 소셜 계정 목록을 확인하려면 아래 코드를 사용해 주십시오.

NBase.getLinkedLists { linkings, e ->
    if (e != null) {
        Log.e("NBase", "getLinkedLists Fail")
        Log.e("NBase", "error.message : " + e.message.toString())
    } else {
        Log.e("NBase", "getLinkedLists")
        Log.e("NBase", "linkings : " + linkings.toString())
        // 연동 목록 확인 후 처리 로직
    }
}
  • Callback

Key
Type
Description

linkings

List

연동된 계정 목록

  • Linking

Key
Type
Description

id

String

연동 ID (계정 연동 해제 시 사용)

username

String

소셜 ID

provider

String

소셜 provider 타입

연동 해제

현재 게임팟 사용자 계정에서 특정 소셜 계정 연동을 해제하려면 아래 코드를 사용해 주십시오.

NBase.deleteLinking(linkingId) { status, e ->
    if (e != null) {
        Log.e("NBase", "deleteLinking Fail")
        Log.e("NBase", "error.message : " + e.message.toString())
    } else {
        Log.e("NBase", "deleteLinking")
        Log.e("NBase", "status : " + status.toString())
        // 연동 해제 성공 후 처리 로직
    }
}
  • Parameter

Key
Type
Description
Required

linkingId

String

해제할 연동 ID (createLinking 또는 getLinkedLists에서 획득)

O

  • Callback

Key
Type
Description

status

Boolean

성공 여부

앱 상태 확인

현재 클라이언트의 점검 / 업데이트 상태를 확인하려면 아래 코드를 사용해 주십시오.

NBase.checkAppStatus(activity) { status, error ->
    when (status) {
        is NBaseAppStatus.Maintenance -> {
            // Maintenance
            /* case 1: Use in-game popup implemented directly by the developer
            case 2: Call the code below to use the SDK's own popup
            NBase.showAppStatusPopup(activity, status) { popupStatus, e ->
                // Popup handling
            }
            */
        }
        is NBaseAppStatus.Update -> {
            // Update
            /* case 1: Use in-game popup implemented directly by the developer
            case 2: Call the code below to use the SDK's own popup
            NBase.showAppStatusPopup(activity, status) { popupStatus, e ->
                // Popup handling
            }
            */
        }
        null -> {
            // AppStatus Success or Error
            if (error != null) {
                Log.e("NBase", "checkAppStatus error: $error")
            } else {
                Log.e("NBase", "checkAppStatus success")
            }
        }
    }
}

문제 해결

Q. 안드로이드에서 아래와 같은 오류가 발생됩니다.

Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.security.crypto.MasterKeys" on path: DexPathList[[zip file "/data/app/~~KKBtt9efgPjpqDSP6o3P1g==/com.nbase.je_beta-6fz3RrA1gqu27fSFW0ehcQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~KKBtt9efgPjpqDSP6o3P1g==/com.nbase.je_beta-6fz3RrA1gqu27fSFW0ehcQ==/lib/arm64, /system/lib64, /system/system_ext/lib64]]

A. MasterKeys 클래스를 찾지 못해서 발생한 오류로 아래 코드를 build.gradle 혹은 build.gradle.kt 파일에 입력 해주셔야 합니다.

implementation("androidx.security:security-crypto:1.0.0")

Q. 구글 로그인 시 아래와 같은 오류가 발생됩니다.

10: Developer console is not set up correctly.

A. 구글 Cloud 콘솔에 등록되어 있는 웹 어플리케이션의 OAuth 2.0 Client ID, Client Secret 가 모두 게임팟 대시보드에 정상적으로 기입되었을지 확인이 필요합니다.

Q. 구글 로그인 시 아래와 같은 오류가 발생됩니다.

16: Cannot find a matching credential.

A. 구글 Cloud 콘솔에 등록되어 있는 OAuth 2.0 안드로이드로 등록된 패키지와 앱의 SHA-1 값이 상이할 경우에도 발생합니다.

Last updated