Classic/VPC 환경에서 이용 가능합니다.
Unity 환경을 위한 GAMEPOT Unity SDK 사용법을 안내합니다. SDK를 설치하고 환경을 구성함으로써 게임과 대시보드를 연동할 수 있습니다.
요구 사양
Unity용 GAMEPOT SDK를 사용하기 위한 요구 사양은 다음과 같습니다.
- Unity 최소 사양: 2022.3.44f1 이상
- 하위 버전의 Unity 지원이 필요하면 문의 채널로 문의해 주십시오.
SDK 설치 및 환경 구성
GAMEPOT Unity SDK를 설치한 후 환경을 구성하여 GAMEPOT 대시보드와 게임을 연동하고 게임 개발에 필요한 기능을 사용할 수 있습니다.
GAMEPOT SDK에서 지원하는 언어는 아래와 같습니다.
- 한국어, 영어, 이탈리아어, 태국어, 베트남어, 일본어, 중국어(간체/번체), 인도네시아어, 독일어, 스페인어, 프랑스어
게임팟 초기화 시 등록한 언어로 자동 표기되며, 미지원 언어는 영어로 표시됩니다.
SDK 설치
GAMEPOT Unity SDK를 설치하고 Unity에서 프로젝트를 구성하려면 다음 절차를 따르십시오.
- Unity 공식 배포 GitHub에서 최신 버전을 다운로드해 주십시오.
- Unity에서 Assets > Import Package > Custom Package... 메뉴를 차례대로 클릭한 후
nbasesdk-unity-plugin-[version].unitypackage파일을 불러와 주십시오.- 게임팟 3.0부터는 Maven 배포와 CocoaPods를 통해 배포되며, 기기별로 간단한 설정으로 다양한 외부 라이브러리를 통합할 수 있습니다.
iOS 빌드의 경우 CocoaPods를 설치해야 정상 작동합니다.
External Dependency Manager for Unity를 포함하여 설치되며, 편리하게 Android, iOS 패키지를 설치할 수 있습니다.
NBase SDK Unity 3.0.18 이상에서는 Tools > GamePotSDK > Dependency Manager 메뉴에서 Android와 iOS에 사용할 모듈을 선택할 수 있습니다. Apply Dependencies를 클릭하면 Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml이 갱신되고 Android 의존성 해석이 실행됩니다. 버전을 직접 지정해야 하는 경우에만 Advanced Mode를 사용해 주십시오.
Android Gradle 설정
Android 빌드에 필요한 Gradle 설정 절차를 순서대로 진행해 주십시오.
- Player Settings에서 Publishing Settings의 Custom Main Gradle Template과 Custom Gradle Properties Template을 선택해 주십시오.

- Minimum API Level을 24로 상향해 주십시오.

- Assets > External Dependency Manager > Android Resolver > Settings 메뉴를 차례대로 클릭한 후 Enable Auto-Resolution과 Explode AARs 항목의 체크를 해제해 주십시오.

- Tools > GamePotSDK > Dependency Manager를 열어 사용할 Android 모듈을 선택한 후, Apply Dependencies를 클릭해 주십시오.
Dependency Manager에서 제공하지 않는 모듈을 추가해야 하는 경우에는 Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml을 직접 편집할 수 있습니다. 다음은 NBase SDK 사용에 기본으로 필요한 종속 패키지를 정의한 예시입니다.
Dependency modules란?
외부 SDK를 사용하기 위한 모듈로, 구글 로그인의 경우 io.nbase:nbase-adapter-provider-google처럼 어댑터로 제공되는 모듈을 함께 설치해야 합니다.
XML 예제:
<?xml version="1.0" encoding="UTF-8"?>
<dependencies>
<androidPackages>
<androidPackage spec="io.nbase:nbasesdk:3.0.98"/>
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.67" minTargetSdk="15.1" />
</iosPods>
</dependencies>
- 구글 로그인과 구글 스토어 결제를 사용하는 경우
XML 예제:
<dependencies>
<androidPackages>
<androidPackage spec="io.nbase:nbasesdk:3.0.98"/>
<androidPackage spec="io.nbase:nbase-adapter-provider-google:3.0.13"/>
<androidPackage spec="io.nbase:nbase-adapter-billing-googleplay:3.0.12" />
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.67" minTargetSdk="15.1" />
<iosPod name="NBaseAdapterProviderGoogle" version="3.0.58" minTargetSdk="15.1" />
</iosPods>
</dependencies>
지원 가능한 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 |
이메일, 게스트 로그인의 경우 기본 모듈에 적용되어 있습니다.
Dependency Manager가 Android 의존성 해석을 자동으로 실행하지 못한 경우에는 Unity 에디터에서 Assets > External Dependency Manager > Android Resolver > Force Resolve를 클릭해 주십시오.
Dependencies.xml을 구성한 뒤 Force Resolve를 실행하면 mainTemplate.gradle 파일에 정의한 내용이 implementation으로 자동 적용되며, 해당 설정이 완료되어야 빌드 시 관련 라이브러리를 내려받을 수 있습니다.
iOS 설정
Tools > GamePotSDK > Dependency Manager를 열어 사용할 iOS 모듈을 선택한 후, Apply Dependencies를 클릭해 주십시오.
Dependency Manager에서 제공하지 않는 Pod를 추가해야 하는 경우에는 Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml의 iosPods 영역을 직접 편집할 수 있습니다.
XML 예제:
<?xml version="1.0" encoding="UTF-8"?>
<dependencies>
<androidPackages>
...
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.67" minTargetSdk="15.1" />
</iosPods>
</dependencies>
만약 Firebase와 같이 필요한 프레임워크를 설치하고자 하는 경우에도 아래와 같이 별도로 추가해 주십시오.
XML 예제:
<iosPods>
...
<iosPod name="FirebaseMessaging" version="10.20.0" minTargetSdk="15.1" />
<iosPod name="Firebase/Analytics" version="10.15.0" minTargetSdk="15.1" />
...
</iosPods>
만약 CocoaPods 가 설치되어 있지 않다면,
Unity 에디터 내 Assets > External Dependency Manager > iOS Resolver > Install Cocoapods를 클릭해 주십시오.
Unity 프로젝트를 iOS용으로 빌드할 때, Unity-iPhone.xcworkspace 파일이 만들어지며, 이 파일을 열어야 합니다.
Unity-iPhone.xcodeproj 대신 Unity-iPhone.xcworkspace 파일을 열지 않으면 CocoaPods 의존성이 사용되지 않습니다.
Unity 2021부터는 자동으로 해당 프로젝트가 선택됩니다.
지원 가능한 iOS 종속 모듈은 다음과 같습니다.
| Name | Description | Dependency modules |
|---|---|---|
| NBase | 게임팟 기본 모듈 | X |
| NBaseAdapterProviderGoogle | 구글 로그인 | X |
| NBaseAdapterProviderFacebook | 페이스북 로그인 | FBSDKLoginKit (17.4.0) |
| NBaseAdapterProviderGameCenter | 게임센터 로그인 | X |
| NBaseAdapterProviderNaver | 네이버 로그인 | X |
| NBaseAdapterProviderLine | 라인 로그인 | X |
| NBaseAdapterProviderKakao | 카카오 로그인 | X |
| NBaseAdapterProviderX | X 로그인 | X |
일부 종속 프레임워크는 Swift Package Manager를 통해서만 추가할 수 있습니다.
아래는 Swift Package Manager로 추가가 필요한 필수 종속 프레임워크를 수동으로 추가하는 방법입니다.
-
Xcode에서 프로젝트 설정으로 이동한 후 Package Dependencies 설정으로 진입해 주십시오.

-
우측 상단 URL 입력란에
https://github.com/apollographql/apollo-ios.git을 추가한 뒤 검색하여 apollo-ios를 선택하고 Add Package로 추가해 주십시오. -
노출되는 모달에서 Apollo와 ApolloAPI 모듈을 프로젝트의 메인 타깃(Unity-iPhone)에 추가해 주십시오.

아래 표는 Swift Package Manager로 추가하는 종속 모듈을 설명합니다.
Name Dependency modules Location Version Framework NBase Apollo https://github.com/apollographql/apollo-ios.git 1.15.2 Apollo, ApolloAPI
사전 준비
GAMEPOT Unity SDK를 적용하기 전에 필요한 필수 설정 항목을 다음과 같이 확인해 주십시오.
- 프로젝트 ID와 프로젝트 키는 대시보드 > 프로젝트 설정에서 복사해 주십시오.
- 로그인, 스토어, 연동에 대한 환경 설정은 대시보드 > 프로젝트 설정에서 추가하거나 수정해 주십시오.
- 로그인별로 로그인 수단별 환경 설정을 참조하여 콘솔에 설정하고 대시보드에 추가해 주십시오.
- 인앱 결제 전 스토어별 환경 설정을 참조하여 콘솔에 설정하고 대시보드에 추가해 주십시오.
- 인앱 결제 전 결제 스토어마다 대시보드 > 결제 > 인앱에서 아이템을 등록해 주십시오.
초기화
초기화를 수행하려면 게임을 시작할 때 로드되는 첫 장면에 사용되는 개체에 아래 코드를 추가해 주십시오.
C# 예제:
using UnityEngine;
using NBaseSDK;
public class GamePotExample : MonoBehaviour
{
void Start()
{
NBaseSDK.NBase.initialize(projectId, projectKey, [storeId], [language], [region], (init, error) => {
if (error != null)
{
Debug.Log(error.Message);
return;
}
Debug.Log(init.ToString());
});
}
}
- Parameters
다음 표는 초기화에 필요한 매개변수를 설명합니다.
| Key | Type | Description | Required |
|---|---|---|---|
| projectId | String | 대시보드 → 프로젝트 설정에서 확인한 프로젝트 ID | O |
| projectKey | String | 대시보드 → 프로젝트 설정에서 확인한 프로젝트 키 | O |
| storeId | String | 아래 표의 스토어 식별자 | O |
| language | String | 언어 코드(en, ko, ja 등) | O |
| region | String | 리전 코드(kr, jp, sg, us, eu) | O |
스토어 식별자는 다음 표를 참고해 주십시오.
| Key | Description |
|---|---|
| Store.google.ToString() | 구글 스토어 |
| Store.one.ToString() | 원스토어 |
| Store.galaxy.ToString() | 갤럭시 스토어 |
| Store.amazon.ToString() | 아마존 스토어 |
| Store.huawei.ToString() | 화웨이 스토어 |
| Store.pc.ToString() | PC 스토어 |
| Store.steam.ToString() | 스팀 스토어 |
- Callback
다음 표는 초기화 콜백으로 전달되는 정보를 설명합니다.
| Key | Type | Description |
|---|---|---|
| Status | bool | 상태 |
| Language | string | 언어 |
| Country | string | 국가 |
| RemoteIp | string | IP |
| Platform | string | 플랫폼 |
| Sandbox | bool | 샌드박스 여부 |
초기화 (이벤트 수신)
먼저 NBase 이벤트를 수신하는 스크립트를 만들어야 합니다.
이 스크립트를 NBaseListener라고 하고 씬의 어떤 객체에도 배치할 수 있으며, 이 객체가 영구적으로 존재하도록 하기 위해 DontDestroyOnLoad 메서드를 호출하는 것이 좋습니다.
아래 그림은 씬에 NBaseListener 스크립트를 구성하는 예시를 보여 줍니다.

C# 예제:
using UnityEngine;
using NBaseSDK;
public class NBaseListener: MonoBehaviour, NBaseEventListener
{
void Start()
{
DontDestroyOnLoad(this.gameObject);
NBaseSDK.NBase.SetEventListener(this);
}
}
로그인 기능
로그인 기능을 이용하여 다양한 인증 수단으로 사용자를 인증하는 방법을 설명합니다.
로그인 기능 사용
개발사에서 구현한 로그인 UI에 따라 로그인 버튼을 클릭했을 때 동작하는 SDK 로그인 기능을 사용하려면 아래 코드를 사용해 주십시오. 그 이전에 로그인에 필요한 콘솔 및 대시보드 설정을 모두 완료해야만 정상적으로 작동합니다.
C# 예제:
NBaseSDK.NBase.signIn(Provider.google.ToString(), (user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // Withdrawal status
{
// Withdrawal
Debug.Log(error.Message.ToString()); // Withdrawal message
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // Access blocked
{
Debug.Log(error.Message.ToString()); // Block message
}
else
{
// signIn Failed
Debug.Log(error.Message.ToString());
}
}
else
{
// signIn Success
Debug.Log(user.ToString());
}
return;
});
업데이트 또는 점검 시 SDK에서 제공하는 자체 팝업을 사용하려면 아래 코드를 추가해 주십시오.
C# 예제:
NBaseSDK.NBase.showAppStatusPopup(appStatus, (status, error) =>
{
bool shouldClose = false;
bool shouldNext = false;
var closeValue = status.Close;
var nextValue = status.Next;
if (closeValue != null)
{
if (bool.TryParse(closeValue.ToString(), out bool result))
{
shouldClose = result;
}
}
if (shouldClose)
{
// App Close
}
if (nextValue != null)
{
if (bool.TryParse(nextValue.ToString(), out bool result))
{
shouldNext = result;
}
}
if (shouldNext)
{
// Next, Optional update
}
});
- Provider
다음 표는 로그인 기능에서 사용할 서비스 타입을 설명합니다.
| Key | Description |
|---|---|
| Provider.google.ToString() | 구글 |
| Provider.anonymous.ToString() | 게스트 |
| Provider.facebook.ToString() | 페이스북 |
| Provider.apple.ToString() | 애플 |
| Provider.kakao.ToString() | 카카오 |
| Provider.googleplay.ToString() | 플레이게임 |
| Provider.steam.ToString() | 스팀 |
| Provider.x.ToString() | X |
| Provider.line.ToString() | 라인 |
| Provider.naver.ToString() | 네이버 |
| Provider.github.ToString() | 깃허브 |
| Provider.microsoft.ToString() | 마이크로소프트 |
| Provider.huawei.ToString() | 화웨이 |
- User
다음 표는 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
다음 표는 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를 호출하려면 아래 코드를 사용해 주십시오.
C# 예제:
NBaseSDK.NBase.openSignInUI((user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // Withdrawal status
{
// Withdrawal
Debug.Log(error.Message.ToString()); // Withdrawal message
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // Access blocked
{
Debug.Log(error.Message.ToString()); // Block message
}
else
{
// signIn Failed
Debug.Log(error.Message.ToString());
}
}
else
{
// signIn Success
Debug.Log(user.ToString());
}
return;
});
자동 로그인 (옵션)
초기화한 후 마지막으로 로그인한 인증 수단으로 자동 로그인을 시도할 수 있습니다. 자동 로그인을 시도하기 전에 마지막 로그인 Provider 타입을 확인하는 것이 좋습니다.
C# 예제:
// 마지막 로그인 Provider 타입 확인
string lastProviderType = NBaseSDK.NBase.getLastProviderType();
if (lastProviderType != Provider.none.ToString())
{
// 마지막 로그인 정보가 있는 경우에만 자동 로그인 시도
NBaseSDK.NBase.signInLastLoggedIn((user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // Withdrawal status
{
// Withdrawal
Debug.Log(error.Message.ToString()); // Withdrawal message
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
// Maintenance
Debug.Log(error.Message.ToString()); // 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
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
// Update
Debug.Log(error.Message.ToString()); // 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
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // Access blocked
{
// Access blocked
Debug.Log(error.Message.ToString()); // Block message
}
else
{
// signIn Failed
Debug.Log(error.Message.ToString());
}
}
else
{
// signIn Success
Debug.Log(user.ToString());
}
});
}
else
{
// 마지막 로그인 정보가 없음
Debug.Log("No last login provider found");
}
getLastProviderType() 메서드는 마지막으로 로그인한 Provider 타입을 반환합니다.
signInLastLoggedIn() 메서드는 마지막으로 로그인한 인증 수단으로 자동 로그인을 시도합니다.
- Callback
다음 표는 자동 로그인 콜백으로 전달되는 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| user | User | 로그인 성공 시 사용자 정보 |
| error | Error | 로그인 실패 시 에러 정보 |
로그아웃
게임팟 사용자 계정을 로그아웃하려면 아래 코드를 사용해 주십시오.
C# 예제:
NBaseSDK.NBase.signOut((status, error) => {
if (error != null)
{
// signOut Failed
Debug.Log("signOut Failed: " + error.Message.ToString());
}
else
{
// signOut Success
Debug.Log("signOut Success: " + status.ToString());
// 로그아웃 성공 후 처리 로직
}
});
- Callback
다음 표는 로그아웃 콜백으로 전달되는 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| status | Boolean | 성공 여부 |
| error | Error | 로그아웃 실패 시 에러 정보 |
회원탈퇴
SDK 회원탈퇴 기능을 사용하려면 아래 코드를 사용해 주십시오.
C# 예제:
NBaseSDK.NBase.deleteMember(providerId, (status, error) => {
if (error != null)
{
// deleteMember Failed
Debug.Log("deleteMember Failed: " + error.Message.ToString());
}
else
{
// deleteMember Success
Debug.Log("deleteMember Success: " + status.ToString());
// 회원 탈퇴 성공 후 처리 로직
}
});
- Parameters
다음 표는 회원 탈퇴 시 전달해야 하는 매개변수를 설명합니다.
| Key | Type | Description | Required |
|---|---|---|---|
| providerId | String | 로그인한 Provider 타입 (예: Provider.google.ToString(), Provider.anonymous.ToString() 등) | O |
- Callback
다음 표는 회원 탈퇴 콜백 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| status | Boolean | 성공 여부 |
| error | Error | 회원 탈퇴 실패 시 에러 정보 |
자체 아이디 비밀번호 인증 (옵션)
사용자가 이메일 주소와 비밀번호를 사용하여 로그인할 수 있게 하는 인증 메서드입니다. 사용자의 이메일 주소와 비밀번호를 기반으로 사용자 인증을 수행합니다.
C# 예제:
NBaseSDK.NBase.signInWithPassword(username, password, (user, error) => {
if (error != null)
{
Debug.Log(error.Message.ToString());
return;
}
});
자격 증명으로 로그인 (옵션)
외부에서 획득한 소셜 계정의 자격 증명(Access Token)을 사용하여 로그인하려면 아래 코드를 사용해 주십시오.
C# 예제:
NBaseSDK.NBase.signInWithCredential(Provider.google.ToString(), providerToken, (user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
// Maintenance
Debug.Log("Maintenance: " + error.Message.ToString());
/* case 1: Use in-game popup implemented directly by the developer
case 2: Call the code below to use the SDK's own popup
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
// Update
Debug.Log("Update: " + error.Message.ToString());
/* case 1: Use in-game popup implemented directly by the developer
case 2: Call the code below to use the SDK's own popup
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else
{
// signInWithCredential Failed
Debug.Log("signInWithCredential Failed: " + error.Message.ToString());
}
}
else
{
// signInWithCredential Success
Debug.Log("signInWithCredential Success: " + user.ToString());
}
});
- Parameter
다음 표는 자격 증명 로그인에 필요한 매개변수를 설명합니다.
| Key | Type | Description | Required |
|---|---|---|---|
| provider | String | Provider ID (예: Provider.google.ToString(), Provider.facebook.ToString() 등) | O |
| providerToken | String | 소셜 계정의 Access Token | O |
- Callback
다음 표는 자격 증명 로그인 콜백 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| user | User | 로그인 성공 시 사용자 정보 |
| error | Error | 로그인 실패 시 에러 정보 |
외부 계정 연동 기능
GAMEPOT 사용자 계정에 외부 소셜 계정을 연동하고 관리하는 기능을 안내합니다.
Unity Standalone의 외부 계정 연동 기능은 NBase SDK Unity 3.0.18 이상에서 사용할 수 있습니다.
- 지원 플랫폼: Windows, macOS, Linux Standalone
- 지원 Provider: Steam
- 지원 API:
createLinking,getLinkedLists,deleteLinking - 미지원 API:
updateLinking
Standalone에서 createLinking을 호출하려면 Steamworks.NET이 설치되어 있고 STEAMWORKS_NET 스크립팅 정의 기호가 활성화되어 있어야 합니다. 게임에서 Steam API를 초기화하고 SteamAPI.RunCallbacks()도 계속 호출해야 합니다. NBase SDK는 Steam API를 직접 초기화하거나 종료하지 않습니다.
외부 계정 연동 기능 사용
현재 게임팟 사용자 계정에 다른 소셜 계정을 연동하려면 아래 코드를 사용해 주십시오.
C# 예제:
NBaseSDK.NBase.createLinking(Provider.google.ToString(), (linkingId, error) => {
if (error != null)
{
// createLinking Failed
Debug.Log("createLinking Failed: " + error.Message.ToString());
}
else
{
// createLinking Success
Debug.Log("createLinking Success: " + linkingId);
// 계정 연동 성공 후 처리 로직
}
});
- Parameter
다음 표는 계정 연동에 필요한 매개변수를 설명합니다.
| Key | Type | Description | Required |
|---|---|---|---|
| providerId | String | 연동할 Provider 타입 (예: Provider.google.ToString(), Provider.facebook.ToString() 등) | O |
- Callback
다음 표는 계정 연동 콜백 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| linkingId | String | 연동 성공 시 반환되는 연동 ID |
| error | Error | 연동 실패 시 에러 정보 |
Unity Standalone에서 Steam 계정 연동
로그인한 GAMEPOT 사용자 계정에 현재 Steam 클라이언트의 계정을 연동하려면 아래 순서로 설정하고 호출해 주십시오.
- Steamworks.NET을 Unity 프로젝트에 설치합니다.
- Steamworks App ID와 Web API Key를 GAMEPOT 대시보드의 Steam 연동 설정에 등록합니다.
- 로컬 테스트 시
steam_appid.txt에 Steamworks App ID를 입력합니다. 빌드한 실행 파일을 Steam 외부에서 직접 실행하는 경우에는 이 파일을 실행 파일과 같은 폴더에 배치합니다. 배포 빌드에는 테스트용steam_appid.txt를 포함하지 마십시오. - Steam 클라이언트에 로그인한 상태에서 Steam API를 초기화합니다.
- GAMEPOT 로그인을 완료한 다음
Provider.steam으로createLinking을 호출합니다.
C# 예제:
NBaseSDK.NBase.createLinking(Provider.steam.ToString(), (linkingId, error) => {
if (error != null)
{
Debug.LogError($"Steam account linking failed: {error.Code} / {error.Message}");
return;
}
Debug.Log($"Steam account linking succeeded: {linkingId}");
});
Standalone의 createLinking은 현재 Steam Provider만 지원합니다. Google, Apple 등의 Provider를 전달하면 오류 콜백이 반환됩니다. Steamworks.NET 미설치, Steam API 미초기화, Steam 클라이언트 미로그인 또는 인증 티켓 발급 실패도 성공으로 처리되지 않고 error로 반환됩니다.
연동 성공 후에는 반환된 linkingId를 저장해 두거나 getLinkedLists로 다시 조회할 수 있습니다. 연동 해제에는 Provider 문자열이 아니라 이 연동 ID를 전달해야 합니다.
연동 리스트 확인
현재 게임팟 사용자 계정에 연동된 소셜 계정 목록을 확인하려면 아래 코드를 사용해 주십시오. Unity Standalone에서도 동일한 API를 사용합니다.
C# 예제:
NBaseSDK.NBase.getLinkedLists((linkings, error) => {
if (error != null)
{
// getLinkedLists Failed
Debug.Log("getLinkedLists Failed: " + error.Message.ToString());
}
else
{
// getLinkedLists Success
if (linkings == null || linkings.Count == 0)
{
Debug.Log("No linked accounts");
return;
}
foreach (NBaseSDK.NBase.Linking linking in linkings)
{
Debug.Log($"getLinkedLists Success: {linking.Provider} / {linking.Id}");
}
}
});
- Callback
다음 표는 계정 연동 목록 확인 시 제공되는 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| linkings | List |
연동된 계정 목록 |
| error | Error | 목록 조회 실패 시 에러 정보 |
- Linking
다음 표는 Linking 객체의 필드를 설명합니다.
| Key | Type | Description |
|---|---|---|
| Id | String | 연동 ID (계정 연동 해제 시 사용) |
| Username | String | 소셜 ID |
| Provider | String | 소셜 Provider 타입 |
연동 해제
현재 게임팟 사용자 계정에서 특정 소셜 계정 연동을 해제하려면 아래 코드를 사용해 주십시오. Unity Standalone에서도 동일한 API를 사용하며, getLinkedLists에서 확인한 Linking.Id를 전달합니다.
C# 예제:
NBaseSDK.NBase.deleteLinking(linkingId, (status, error) => {
if (error != null)
{
// deleteLinking Failed
Debug.Log("deleteLinking Failed: " + error.Message.ToString());
}
else if (status)
{
// deleteLinking Success
Debug.Log("deleteLinking Success: " + status.ToString());
// 연동 해제 성공 후 처리 로직
}
else
{
Debug.LogWarning("deleteLinking returned false");
}
});
- Parameter
다음 표는 계정 연동 해제에 필요한 매개변수를 설명합니다.
| Key | Type | Description | Required |
|---|---|---|---|
| linkingId | String | 해제할 연동 ID (createLinking 또는 getLinkedLists에서 획득) | O |
- Callback
다음 표는 계정 연동 해제 콜백 값을 설명합니다.
| Key | Type | Description |
|---|---|---|
| status | Boolean | 성공 여부 |
| error | Error | 연동 해제 실패 시 에러 정보 |
앱 상태 확인
현재 클라이언트의 점검/업데이트 상태를 확인하려면 아래 코드를 사용해 주십시오.
C# 예제:
NBaseSDK.NBase.checkAppStatus((status, error) =>
{
if (error != null)
{
Debug.LogError("checkAppStatus Failed: " + error.Message);
return;
}
switch(status.State)
{
case NBaseSDK.NBase.AppStatus.Status.SUCCESS:
// SUCCESS
break;
case NBaseSDK.NBase.AppStatus.Status.FAILED:
// FAILED
break;
case NBaseSDK.NBase.AppStatus.Status.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
NBaseSDK.NBase.showAppStatusPopup(status, (popupStatus, popupError) => {
// Popup handling
});
*/
break;
case NBaseSDK.NBase.AppStatus.Status.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
NBaseSDK.NBase.showAppStatusPopup(status, (popupStatus, popupError) => {
// Popup handling
});
*/
break;
}
});
Unity Standalone 안내
Standalone은 Mac, Windows 및 Linux용 빌드를 나타냅니다.
게임팟 SDK는 크로스 플랫폼을 지원하지만 모바일과 Standalone에서 지원되는 기능이 다르므로 아래 표를 참고해 개발 계획을 수립해 주십시오.
| Service | Android | iOS | Web | PC | 비고 |
|---|---|---|---|---|---|
| 로그인 | O | O | O | PC 로그인 후 토큰 검증 | |
| 결제 | O | O | O | PC 결제 페이지로 이동 | |
| 공지사항 | O | O | O | O | UI를 제외한 목록 조회 제공 |
| 고객지원 | O | O | O | O | PC로 이동 |
| 리더보드 | O | O | O | O | |
| 친구관리 | O | O | O | O | |
| 푸시 | O | O | X | X | |
| 점검 | O | O | O | O | |
| 업데이트 | O | O | O | O | |
| 쿠폰 | O | O | O | O | |
| 채팅 | O | O | O | O | |
| 데이터저장소 | O | O | O | O | |
| 보안 | O | O | X | 준비중 | |
| 플레이어 | O | O | O | O | |
| 외부 계정 연동 | O | O | X | O | PC는 Steam만 지원 (NBase SDK Unity 3.0.18 이상) |
Web 버전은 GamePot 3.0 Typescript 버전에 한하여 제공되는 기능입니다.
Newtonsoft.Json 충돌
NBase Unity SDK는 API 요청 파싱을 위해 Unity의 Newtonsoft JSON 패키지를 사용합니다. JSON은 가장 일반적으로 사용되는 라이브러리 중 하나이므로 프로젝트에 이미 JSON이 있고 다음과 같은 라이브러리 중복 오류가 발생할 가능성이 있습니다.
이 경우 Plugins/Standalone 경로에 있는 Newtonsoft.Json 파일을 삭제하거나 프로젝트에 이미 있는 JSON 라이브러리를 삭제하고 Unity의 JSON을 사용해 주십시오. Unity의 JSON 패키지는 Unity 엔진과 함께 작동하도록 수정되었으며 IL2CPP를 완벽하게 지원하는 버전입니다.
문제 해결
자주 발생하는 오류와 해결 방법을 안내합니다.
Q. UnityPlayerActivity.java uses or overrides a deprecated API.
A. Edit > Project Settings > Player > Publishing settings > Custom Properties Gradle Template에 체크해 주십시오.
Q. error:1E08010C:DECODER routines::unsupported
A. 구글 Authentication Key 키 값이 일치하지 않을 경우 생기는 현상으로 구글 플레이 스토어 가이드를 참고하여 키를 정확하게 입력해 주세요.
Q. minimum API Level 상향 안내
A. 기본 API Level을 22에서 24로 상향해 주십시오.
아래 그림은 API Level을 조정하는 위치를 보여 줍니다.

Q. Authorization failed: Error Domain=AKAuthenticationError Code=-7026
A. TARGETS > +Capability를 클릭하여 Sign in with Apple을 추가해 주십시오.
아래 그림은 Sign in with Apple 기능을 추가하는 화면을 보여 줍니다.

Q. Couldn't get credential from result.10: Developer console is not set up correctly
A. 이 오류는 Google Cloud Console > 사용자 인증 정보 > OAuth 2.0 클라이언트 ID에서 웹 애플리케이션 유형의 클라이언트 ID가 설정되어 있지 않아 발생할 수 있습니다.
Q. 16: Cannot find a matching credential.
A. 이 경우는 Google Cloud Console > 사용자 인증 정보 > OAuth 2.0 클라이언트 ID가 등록 되지 않은 경우에 발생할 수 있는 오류입니다.
Q. java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;
A. 아래 코드를 추가해 주십시오.
XML 예제:
<androidPackage spec="com.android.billingclient:billing:8.0.0" />
Q. (iOS) 앱 실행 시 크래시가 발생되며 "/AdapterProviderFacebook' (no such file)" 에러가 확인됨
A. Xcode TARGETS → General → Frameworks, Libraries, and Embedded Content → AdapterProviderFacebook.xcframework 추가해 주십시오.
Q. (iOS) 실행 후 "'/usr/lib/swift/NBase.framework/NBase' (no such file, not in dyld cache)" 에러 발생
A. 아래와 같이 NBase.xcframework를 추가해 주십시오.
아래 그림은 NBase.xcframework를 프로젝트에 추가하는 과정을 보여 줍니다.


Q. (iOS) iOS 18 환경에서 "NSBundle file:///System/Library/Frameworks/Metal.framework/ principal class is nil because all fallbacks have failed" 에러 발생
A. Edit Scheme 창(단축키: CMD + SHIFT + ,)을 열어 Metal 항목의 API Validation을 체크 해제해 주십시오.
아래 그림은 Metal API Validation 옵션을 비활성화하는 위치를 보여 줍니다.
