Android SDK

Prev Next

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

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

요구 사양

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

  • 최소 사양은 Android level 24 이상입니다. 하위 버전 지원이 필요하면 문의채널로 문의해 주십시오.

SDK 설치 및 환경 구성

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

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

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

게임팟 초기화 시 등록한 언어로 자동 표기되며, 미지원 언어는 영어로 표시됩니다.

SDK 설치

GAMEPOT Android SDK를 설치하고 프로젝트를 구성하려면 다음 절차를 따르십시오.

  1. build.gradle 또는 build.gradle.kts 파일에 NBase SDK를 추가해 주십시오.
  2. GAMEPOT 3.0부터는 Gradle 설정으로 외부 라이브러리를 간편하게 통합할 수 있습니다.

Kotlin Gradle 설정

Kotlin DSL을 사용하는 프로젝트에서는 다음 설정을 추가해 주십시오.

  1. 프로젝트 루트 build.gradle.kts 파일에 다음 설정을 추가해 주십시오.
    Kotlin:
dependencyResolutionManagement {
	repositories {
		...
		google()
		maven(url = "https://repo.nbase.io/repository/nbase-releases")
	}
}
  1. 앱 모듈(Module: app)의 build.gradle.kts 파일에 다음 설정을 추가해 주십시오.

Kotlin:

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

구글 로그인과 구글 스토어 결제를 함께 사용하는 경우에는 다음 예시를 참고해 주십시오.

Kotlin:

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 설정

Groovy DSL을 사용하는 프로젝트에서는 다음 설정을 추가해 주십시오.

  1. 프로젝트 루트 build.gradle 파일에 다음 설정을 추가해 주십시오.
    Groovy:
allprojects {
	repositories {
		...
		google()
		maven { url "https://repo.nbase.io/repository/nbase-releases" }
	}
}
  1. 앱 모듈(Module: app)의 build.gradle 파일에 다음 설정을 추가해 주십시오.

Groovy:

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

구글 로그인과 구글 스토어 결제를 함께 사용하는 경우에는 다음 예시를 참고해 주십시오.

Groovy:

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

지원 가능한 AOS 종속 모듈은 다음과 같습니다.

Name Description Dependency modules
io.nbase:nbasesdk 게임팟 기본 모듈 X
io.nbase:nbase-adapter-provider-google 구글 로그인 X
io.nbase:nbase-adapter-provider-apple 애플 로그인 X
io.nbase:nbase-adapter-provider-facebook 페이스북 로그인 com.facebook.android:facebook-login:latest.release
io.nbase:nbase-adapter-provider-kakao 카카오 로그인 X
io.nbase:nbase-adapter-provider-line 라인 로그인 X
io.nbase:nbase-adapter-provider-naver 네이버 로그인 X
io.nbase:nbase-adapter-provider-huawei 화웨이 로그인 X
io.nbase:nbase-adapter-provider-playgame 구글플레이게임 로그인 X
io.nbase:nbase-adapter-provider-x X 로그인 X
io.nbase:nbase-adapter-billing-googleplay 구글 스토어 com.android.billingclient:billing:8.0.0
io.nbase:nbase-adapter-billing-onestore 원스토어 X
io.nbase:nbase-adapter-billing-galaxy 갤럭시 스토어 X
io.nbase:nbase-adapter-billing-huawei 화웨이 스토어 X

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

사전 준비

SDK를 적용하기 전에 필요한 필수 설정 항목을 다음과 같이 확인해 주십시오.

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

초기화

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

Kotlin:

import android.util.Log
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 ?: "initialize fail")
	} else {
		Log.i("NBase", "initialize success: ${init.toString()}")
	}
}

Java:

import android.util.Log;
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.i("NBase", "initialize success: " + init.toString());
	}
	return null;
});
  • Parameters

다음 표는 초기화에 필요한 매개변수를 설명합니다.

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 로그인 기능을 호출하려면 다음 코드를 참고해 주십시오.

Kotlin:

import android.content.Intent
import android.util.Log
import com.nbase.sdk.NBase
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)
}

Java:

import android.content.Intent;
import android.util.Log;
import com.nbase.sdk.NBase;
import com.nbase.sdk.Provider;

NBase nBase = NBase.INSTANCE;

nBase.signIn(activity, Provider.GOOGLE.toString(), (user, e) -> {
    if (e != null) {
        if (e.getErrorCode() == 414) { // Maintenance
            // Maintenance
            Log.e("NBase", "Maintenance: " + e.getMessage()) // 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.getErrorCode() == 413) { // Update
            // Update
            Log.e("NBase", "Update: " + e.getMessage()) // 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.getErrorCode() + ", " + e.getMessage());
        }
    } else {
        // signIn Success
        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);
}

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

Kotlin:

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

Java:

NBase nBase = NBase.INSTANCE;

nBase.showAppStatusPopup(activity, appStatus){ status, e ->
    if (status.getClose()){
        // App Close
    }
    else if (status.getNext()){
        // Next, Optional update
    }
}
  • Provider

다음 표는 로그인 기능에서 사용할 서비스 타입을 설명합니다.

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

다음 표는 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

다음 표는 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를 호출하려면 아래 코드를 사용해 주십시오.

Kotlin:

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

Java:

NBase nBase = NBase.INSTANCE;

nBase.openSignInUI(activity, (user, e) -> {
    if (e != null) {
        if (e.getErrorCode() == 414) { // Maintenance
            // Maintenance
            Log.e("NBase", "Maintenance: " + e.getMessage()) // 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.getErrorCode() == 413) { // Update
            // Update
            Log.e("NBase", "Update: " + e.getMessage()) // 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.getErrorCode() + ", " + e.getMessage());
        }
    } else {
        // signIn Success
        Log.e("NBase", "signIn Success: " + user.toString());
    }
    return null;
});

자동 로그인 (옵션)

초기화한 후 마지막으로 로그인한 인증 수단으로 자동 로그인을 시도할 수 있습니다. 자동 로그인을 시도하기 전에 마지막 로그인 Provider 타입을 확인하는 것이 좋습니다.

Kotlin:

// 마지막 로그인 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")
}

Java:

NBase nBase = NBase.INSTANCE;

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

if (lastProviderType != Provider.NONE) {
    // 유효한 Provider가 있을 때만 자동 로그인 시도
    nBase.signInLastLoggedIn(activity, (user, e) -> {
        if (e != null) {
            if (e.getErrorCode() == 414) { // Maintenance
                // Maintenance
                Log.e("NBase", "Maintenance: " + e.getMessage()) // 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.getErrorCode() == 413) { // Update
                // Update
                Log.e("NBase", "Update: " + e.getMessage()) // 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.getErrorCode() + ", " + e.getMessage());
            }
        } else {
            // signIn Success
            Log.e("NBase", "signIn Success: " + user.toString());
        }
        return null;
    });
} else {
    // 마지막 로그인 정보가 없음
    Log.e("NBase", "No last login provider found");
}
  • getLastProviderType()

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

다음 표는 getLastProviderType() 메서드의 반환 값을 설명합니다.

Return Type Description
Provider 마지막 로그인 Provider 타입
  • signInLastLoggedIn() Parameter

마지막으로 로그인한 인증 수단으로 자동 로그인을 시도합니다.
다음 표는 signInLastLoggedIn() 메서드의 매개변수를 설명합니다.

Key Type Description Required
activity Activity 현재 액티비티 O
  • Callback

다음 표는 자동 로그인 콜백으로 전달되는 값을 설명합니다.

Key Type Description
user User 로그인 성공 시 사용자 정보
error Error 로그인 실패 시 에러 정보

로그아웃

게임팟 사용자 계정을 로그아웃하려면 아래 코드를 사용해 주십시오.

Kotlin:

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())
        // 로그아웃 성공 후 처리 로직
    }
}

Java:

NBase nBase = NBase.INSTANCE;

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

다음 표는 getLastProviderType() 메서드의 매개변수를 설명합니다.

Key Type Description Required
activity Activity 현재 액티비티 O
  • Callback

다음 표는 로그아웃 콜백으로 전달되는 값을 설명합니다.

Key Type Description
status Boolean 로그아웃 성공 여부

회원 탈퇴

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

Kotlin:

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())
        // 회원 탈퇴 성공 후 처리 로직
    }
}

Java:

NBase nBase = NBase.INSTANCE;

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

다음 표는 회원 탈퇴 시 전달해야 하는 매개변수를 설명합니다.

Key Type Description Required
providerId Provider 로그인한 Provider 타입(예: Provider.GOOGLE, Provider.ANONYMOUS 등) O
  • Callback

다음 표는 회원 탈퇴 콜백 값을 설명합니다.

Key Type Description
status Boolean 회원 탈퇴 성공 여부

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

사용자가 이메일 주소와 비밀번호를 사용하여 로그인할 수 있게 하는 인증 메서드입니다. 사용자의 이메일 주소와 비밀번호를 기반으로 사용자 인증을 수행합니다.

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

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

외부에서 획득한 소셜 계정의 자격 증명(Access Token)을 사용하여 로그인하려면 아래 코드를 사용해 주십시오.

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;
});
  • Parameter

다음 표는 자격 증명 로그인에 필요한 매개변수를 설명합니다.

Key Type Description Required
activity Activity 현재 액티비티 O
providerId Provider 연동할 Provider 타입 O
providerToken String 소셜 계정의 Access Token O
  • Callback

다음 표는 자격 증명 로그인 콜백 값을 설명합니다.

Key Type Description
user User 로그인 성공 시 사용자 정보
error Error 로그인 실패 시 에러 정보

외부 계정 연동 기능

GAMEPOT 사용자 계정에 외부 소셜 계정을 연동하고 관리하는 기능을 안내합니다.

외부 계정 연동 기능 사용

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

Kotlin:

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())
        // 계정 연동 성공 후 처리 로직
    }
}

Java:

NBase nBase = NBase.INSTANCE;

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

다음 표는 계정 연동에 필요한 매개변수를 설명합니다.

Key Type Description Required
activity Activity 현재 액티비티 O
providerId Provider 연동할 Provider 타입 (예: Provider.GOOGLE, Provider.FACEBOOK 등) O
  • Callback

다음 표는 계정 연동 콜백 값을 설명합니다.

Key Type Description
linkingId String 연동 성공 시 반환되는 연동 ID

연동 리스트 확인

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

Kotlin:

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())
        // 연동 목록 확인 후 처리 로직
    }
}

Java:

NBase nBase = NBase.INSTANCE;

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

다음 표는 계정 연동 목록 확인 시 제공되는 값을 설명합니다.

Key Type Description
linkings List 연동된 계정 목록
  • Linking

다음 표는 Linking 객체의 필드를 설명합니다.

Key Type Description
id String 연동 ID (계정 연동 해제 시 사용)
username String 소셜 ID
provider String 소셜 provider 타입

연동 해제

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

Kotlin:

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())
        // 연동 해제 성공 후 처리 로직
    }
}

Java:

NBase nBase = NBase.INSTANCE;

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

다음 표는 계정 연동 해제에 필요한 매개변수를 설명합니다.

Key Type Description Required
linkingId String 해제할 연동 ID (createLinking 또는 getLinkedLists에서 획득) O
  • Callback

다음 표는 계정 연동 해제 콜백 값을 설명합니다.

Key Type Description
status Boolean 연동 해제 성공 여부

앱 상태 확인

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

Kotlin:

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

Java:

NBase nBase = NBase.INSTANCE;

nBase.checkAppStatus(activity, (status, error) -> {
    if (status instanceof 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
        });
        */
    } else if (status instanceof 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
        });
        */
    } else if (status == null) {
        // AppStatus Success or Error
        if (error != null) {
            Log.e("NBase", "checkAppStatus error: " + error.toString());
        } else {
            Log.e("NBase", "checkAppStatus success");
        }
    }
    return null;
});

문제 해결

자주 발생하는 오류와 해결 방법을 안내합니다.

Q. 안드로이드에서 androidx.security.crypto.MasterKeys 클래스를 찾지 못했다는 오류가 발생합니다.
A. MasterKeys 클래스를 찾지 못해 발생한 오류입니다. 다음 종속성을 build.gradle 또는 build.gradle.kts 파일에 추가해 주십시오.

Groovy:

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이 GAMEPOT 대시보드에 정확히 기입되었는지 확인해 주십시오.

Q. 구글 로그인 시 16: Cannot find a matching credential. 오류가 발생합니다.
A. 구글 Cloud 콘솔에 등록된 OAuth 2.0 안드로이드 클라이언트의 패키지 이름과 앱의 SHA-1 값이 일치하는지 확인해 주십시오.