Android SDK
    • PDF

    Android SDK

    • PDF

    기사 요약

    Classic/VPC 환경에서 이용 가능합니다.

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

    요구 사양

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

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

    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")
    }
    

    라이브러리 리스트

    NameVersionDescriptionDependeny modules
    io.nbase:nbasesdk3.0.84게임팟 기본 모듈X
    io.nbase:nbase-adapter-provider-google3.0.8구글 로그인X
    io.nbase:nbase-adapter-provider-apple3.0.4애플 로그인
    io.nbase:nbase-adapter-provider-facebook3.0.4페이스북 로그인com.facebook.android:facebook-login:latest.release
    io.nbase:nbase-adapter-provider-naver3.0.1네이버 로그인
    io.nbase:nbase-adapter-provider-line3.0.1라인 로그인
    io.nbase:nbase-adapter-provider-x3.0.1트위터 로그인
    io.nbase:nbase-adapter-billing-googleplay3.0.5구글 스토어com.android.billingclient:billing-ktx:6.1.0
    io.nbase:nbase-adapter-billing-one3.0.1원스토어
    io.nbase:nbase-adapter-billing-galaxy3.0.1갤럭시 스토어

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

    사전 준비

    1. 프로젝트ID 와 프로젝트 키는 대시보드 > 프로젝트 설정에서 복사해 주십시오.
    2. 로그인, 스토어, 연동에 대한 환경 설정은 대시보드 > 프로젝트 설정에서 수행해 주십시오.
    3. 로그인별로 로그인 수단별 환경 설정을 참조하여, 콘솔에 설정하고 대시보드에 추가해 주십시오.
    4. 인앱 결제 시에 스토어별 환경 설정을 참조하여, 콘솔에 설정하고 대시보드에 추가해 주십시오.
    5. 인앱 결제를 위한 스토어마다 아이템을 등록해 주십시오. 대시보드 > 결제 > 인앱에서 추가해 주십시오.

    초기화

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

    Kotlin:

    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)
        }
    }
    

    Java:

    import com.nbase.sdk.NBase;
    import com.nbase.sdk.Store;
    
    NBase nBase = NBase.INSTANCE;
    nBase.initialize(activity, projectId, projectKey, Store.GOOGLE, language, region, (init, e) -> {
        if (e != null) {
            Log.e("NBase", "initialize fail: " + e.getMessage());
        } else {
            Log.e("NBase", "initialize success: " + init.toString());
        }
        return null;
    });
    
    • Parameter
    KeyTypeDescriptionRequired
    projectIdString프로젝트 ID (대시보드 → 프로젝트 설정)O
    projectKeyString프로젝트 키 (대시보드 → 프로젝트 설정)O
    storeIdString스토어 ID (아래 표 참고)O
    languageString언어 (en,ko,jp...)O
    regionString리전명 (kr, jp, sg, us, eu, preview)O
    KeyDescription
    Store.GOOGLE구글 스토어
    Store.ONE원스토어
    Store.GALAXY갤럭시 스토어
    Store.AMAZON아마존 스토어
    Store.HUAWEI화웨이 스토어
    • Callback
    KeyTypeDescription
    statusBoolean상태
    languageString언어
    countryString국가
    remote_ipStringIP
    platformString플랫폼
    sandboxBoolean샌드박스 여부

    로그인

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

    Kotlin:

    import com.nbase.sdk.Provider
    
    NBase.signIn(activity, Provider.GOOGLE.toString()) { user, e -> 
        if (e != null) {
            Log.e("NBase", e.message)
        } else {
            Log.e("NBase", user)
        }
    }
    
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        NBase.onActivityResult(requestCode, resultCode, data)
    }
    

    Java:

    import com.nbase.sdk.Provider;
    
    NBase nBase = NBase.INSTANCE;
    nBase.signIn(activity, Provider.GOOGLE.toString(), (user, e) -> {
        if (e != null) {
            Log.e("NBase", "signIn fail: " + e.getMessage());
        } else {
            Log.e("NBase", "signIn success: " + user.toString());
        }
        return null;
    });
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        nBase.onActivityResult(requestCode, resultCode, data);
    }
    
    • Parameter
    KeyDescription
    Provider.GOOGLE구글
    Provider.ANONYMOUS게스트
    Provider.FACEBOOK페이스북
    Provider.APPLE애플
    Provider.KAKAO카카오
    Provider.PLAYGAME플레이게임
    Provider.STEAM스팀
    Provider.XX
    Provider.LINE라인
    Provider.NAVER네이버
    Provider.GITHUB깃헙
    Provider.MICROSOFT마이크로소프트
    Provider.HUAWEI화웨이
    • Callback
    KeyTypeDescription
    idString사용자 ID
    socialIdString소셜 ID
    nameString이름
    nicknameString닉네임
    emailString이메일
    tokenString토큰
    ageInt나이
    birthString생년월일
    sexString성별
    profileString프로필 URL
    mobileString휴대폰 번호
    customFieldString사용자 정의 필드

    자동 로그인 (옵션)

    초기화 한 후에 마지막으로 로그인한 인증 수단으로 자동 로그인을 시도합니다.

    Kotlin:

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

    Java:

    NBase nBase = NBase.INSTANCE;
    nBase.signInLastLoggedIn(activity, (user, e) -> {
        if (e != null) {
            Log.e("NBase", "signInLastLoggedIn fail: " + e.getMessage());
        } else {
            Log.e("NBase", "signInLastLoggedIn success: " + user.toString());
        }
        return null;
    });
    

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

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

    Kotlin:

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

    Java:

    NBase nBase = NBase.INSTANCE;
    nBase.signInWithPassword(activity, username, password, (user, e) -> {
        if (e != null) {
            Log.e("NBase", "signInWithPassword fail: " + e.getMessage());
        } else {
            Log.e("NBase", "signInWithPassword success: " + user.toString());
        }
        return null;
    });
    

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

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

    Kotlin:

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

    Java:

    NBase nBase = NBase.INSTANCE;
    nBase.signInWithCredential(activity, Provider.GOOGLE.toString(), providerToken, (user, e) -> {
        if (e != null) {
            Log.e("NBase", "signInWithCredential fail: " + e.getMessage());
        } else {
            Log.e("NBase", "signInWithCredential success: " + user.toString());
        }
        return null;
    });
    

    로그아웃

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

    Kotlin:

    NBase.signOut() { status, e ->
        if (e != null) {
            Log.e("NBase", e.message)
        } else {
            Log.e("NBase", status)
        }
    }
    

    Java:

    NBase nBase = NBase.INSTANCE;
    nBase.signOut((status, e) -> {
        if (e != null) {
            Log.e("NBase", "signOut fail: " + e.getMessage());
        } else {
            Log.e("NBase", "signOut success: " + status);
        }
        return null;
    });
    
    • Callback
    KeyTypeDescription
    statusBoolean성공 여부

    결제

    결제 전에 스토어별 환경 설정 에 해당 스토어에 맞도록 설정해야 합니다.
    또한, 대시보드 > 결제 > 인앱에 아이템이 추가되지 않았을 있을 경우 'ProductID not found' 라는 오류가 발생됩니다.

    인앱 정보 가져오기

    결제하실 때에 화면에 결제 정보와 현지 통화 정보를 표시해야 합니다. 아래 함수를 통해서 현재 결제 통화나 이름 등을 가져올 수 있습니다. 만일 정상적으로 가져오지 못하는 경우 콘솔 세팅을 확인해 주시기 바랍니다.

    Kotlin:

    import com.nbase.sdk.Store
    
    NBase.getProductItems() {products, e -> 
        if (e != null) {
            Log.e("NBase", e.message)
        } else {
            // 인앱 아이템 정보
            Log.e("NBase", products)
        }
    }
    

    Java:

    NBase nBase = NBase.INSTANCE;
    nBase.getProductItems((products, e) -> {
        if (e != null) {
            Log.e("NBase", "getProductItems fail: " + e.getMessage());
        } else {
            if (products != null) {
                Log.e("NBase", "getProductItems success: " + products.toString());
            }
        }
        return null;
    });
    
    • Callback
    KeyTypeDescription
    idStringID
    productNameString제품 이름
    priceFloat제품 가격
    productIdString제품 고유 ID
    productTypeString제품 타입
    productDescriptionString제품 설명
    currencyString통화 단위

    결제 요청

    가져온 인앱 정보에 productId 로 결제를 요청하실 수 있습니다.

    Kotlin:

    import com.nbase.sdk.Store
    
    NBase.purchase(activity, Store.GOOGLE, [productId], [metadata], [options]) { purchase, e -> 
        if (e != null) {
            Log.e("NBase", e.message)
        } else {
            Log.e("NBase", purchase)
        }
    }
    

    Java:

    import com.nbase.sdk.Store;
    
    NBase nBase = NBase.INSTANCE;
    nbase.purchase(activity, Store.GOOGLE, productId, metadata, options, (purchase, e) -> {
        if (e != null) {
            Log.e("NBase", "purchase fail: " + e.getMessage());
        } else {
            if (purchase != null) {
                Log.e("NBase", "purchase success: " + purchase.toString());
            }
        }
        return null;
    });
    
    • Parameter
    KeyTypeDescriptionRequired
    ProductIdString상품ID (대시보드 → 결제 → 인앱 아이템)O
    MetadataStringMetadataX
    OptionsString결제 옵션 기능X
    KeyDescription
    Store.GOOGLE구글 스토어
    Store.ONE원 스토어
    Store.GALAXY갤럭시 스토어
    Store.AMAZON아마존 스토어
    Store.HUAWEI화웨이 스토어
    • Callback
    KeyTypeDescription
    idStringID
    orderIdString주문 ID
    storeIdString스토어 ID
    productIdString상품 ID
    billingKeyString결제 키
    signatureString서명
    originalJsonString원본 JSON
    developerPayloadString개발자 페이로드
    packageNameString패키지명
    isAcknowledgedbool확인 여부
    purchaseStateString구매 상태
    purchaseTimeString구매 시간
    quantityString수량
    recurringStateString반복 결제 상태
    currencyString통화
    countryString국가
    paymentIdString결제 ID
    priceFloat가격
    iapVersionString인앱결제 버전
    playerIdString플레이어 ID
    serverIdString서버 ID
    levelInt레벨
    userdataString사용자 데이터
    metadataString메타데이터
    optionsString옵션
    authCodeString인증 코드

    문제 해결

    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 값이 상이할 경우에도 발생합니다.


    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.