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를 설치하고 프로젝트를 구성하는 방법은 다음과 같습니다.
- 관리자 계정으로 대시보드에 로그인해 주십시오.
- bundle.gradle 혹은 bundle.gradle.kts 파일에 Nbase SDK 를 추가해 주십시오.
- 게임팟 3.0 부터는 Gradle 설정을 통해 간단하게 외부 라이브러리와 통합이 가능합니다.
Kotlin Gradle 설정
- 프로젝트의 settings.gradle.kts 파일에 아래 정의를 추가합니다.
dependencyResolutionManagement {
repositories {
...
google()
// nbase repo
maven(url = "https://repo.nbase.io/repository/nbase-releases")
}
}
- 프로젝트에 (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 설정
- 프로젝트에 (Module : project)의 build.gradle 파일에 정의를 추가합니다.
allprojects {
repositories {
...
google()
// nbase repo
maven { url "https://repo.nbase.io/repository/nbase-releases" }
}
}
- 프로젝트에 (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 |
게스트 로그인의 경우 기본 모듈에 적용되어 있습니다.
사전 준비
- 프로젝트ID 와 프로젝트 키는 대시보드 > 프로젝트 설정에서 복사해 주십시오.
- 로그인, 스토어, 연동에 대한 환경 설정은 대시보드 > 프로젝트 설정에서 수행해 주십시오.
- 로그인별로 로그인 수단별 환경 설정을 참조하여, 콘솔에 설정하고 대시보드에 추가해 주십시오.
- 인앱 결제 시에 스토어별 환경 설정을 참조하여, 콘솔에 설정하고 대시보드에 추가해 주십시오.
- 인앱 결제를 위한 스토어마다 아이템을 등록해 주십시오. 대시보드 > 결제 > 인앱에서 추가해 주십시오.
초기화
초기화를 수행하려면 게임을 시작할 때 로드되는 첫 장면에 사용되는 개체에 아래 코드를 추가해 주십시오.
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
| 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 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 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
}
}
- 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 | 이름 (제공해 주는 경우) |
| 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를 호출하려면 아래 코드를 사용해 주십시오.
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 타입을 반환합니다.
| Return Type | Description |
|---|---|
| Provider | 마지막 로그인 Provider 타입 |
- signInLastLoggedIn() Parameter
| Key | Type | Description | Required |
|---|---|---|---|
| activity | Activity | 현재 액티비티 | O |
로그아웃
SDK 로그아웃 기능을 사용하려면 아래 코드를 사용해 주십시오.
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
| Key | Type | Description | Required |
|---|---|---|---|
| activity | Activity | 현재 액티비티 | O |
- Callback
| Key | Type | Description |
|---|---|---|
| status | Boolean | 성공 여부 |
회원 탈퇴
회원 탈퇴 기능을 사용하려면 아래 코드를 사용해 주십시오.
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;
});
- Parameter
| 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;
});
자격 증명으로 로그인하기 (옵션)
다양한 인증 방법(이메일 및 비밀번호, 소셜 미디어 계정, 전화번호 등)을 통해 얻은 인증 자격 증명(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;
});
외부 계정 연동 기능
외부 계정 연동 기능 사용하기
현재 게임팟 사용자 계정에 다른 소셜 계정을 연동하려면 아래 코드를 사용해 주십시오.
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
| 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. 안드로이드에서 아래와 같은 오류가 발생됩니다.
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 값이 상이할 경우에도 발생합니다.