Available in Classic and VPC
This guide describes how to integrate your game with the dashboard using the GAMEPOT Unity SDK in Unity. By installing the SDK and configuring your environment, you can integrate the features necessary for game development.
Required specifications
The recommended specifications required to use GAMEPOT SDK for Unity are as follows:
- Minimum specifications: 2022.3.44f1 or later
- If you need support for a lower version of Unity, contact Ncloud Support with your request.
Install SDK and configure environment
You can install the GAMEPOT Unity SDK, configure the environment, and integrate the game and GAMEPOT dashboard to use features required for the game development.
The GAMEPOT SDK supports the following languages.
- Korean, English, Italian, Thai, Vietnamese, Japanese, Chinese (Simplified/Traditional), Indonesian, German, Spanish, French
When the app is launched, it is automatically displayed in the supported language in the SDK based on the device's language. If it is an unsupported language, it will be displayed in English.
SDK installation
The following describes how to install GAMEPOT Unity SDK and configure a project in Unity.
- From Unity official Distribution GitHub, Download the latest version.
- In Unity, click the Assets > Import Package > Custom Package... menus, in that order, and then load the nbase-unity-plugin-[version].unitypackage file.
- Starting with GAMEPOT 3.0, it is distributed via Maven distribution and CocoaPods, and integrates with dozens of external libraries with simple setup per device.
For iOS builds, CocoaPods must be installed to work properly.
It is installed including External Dependency Manager for Unity, which enables you to install Android and iOS packages conveniently.
Set Gradle for Android
Follow the Gradle setup procedure required for Android builds in order.
- In Player Settings, under Publishing Settings, select Custom Main Gradle Template and Custom Gradle Properties Template.

- Raise the minimum API level to 24.

- Click the Assets > External Dependency Manager > Android Resolver > Settings menus, in that order, and then deselect the Enable Auto-Resolution and Explode AARs fields.

- Open the Dependency configuration file in the editor as shown in the image below to review the settings.

The following file defines the dependency packages that are required by default to use the NBase SDK. If you want to use additional features, you can add them to the following file to use the module on Android and iOS.
What are dependency modules?
Dependency modules are modules for using external SDKs, such as io.nbase:nbase-adapter-provider-google for Google login, which must be installed with the module provided by Google.
XML example:
<?xml version="1.0" encoding="UTF-8"?>
<dependencies>
<androidPackages>
<androidPackage spec="io.nbase:nbasesdk:3.0.87"/>
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.59" minTargetSdk="15.0" />
</iosPods>
</dependencies>
- When using Google login and Google Play Store payment
XML example:
<dependencies>
<androidPackages>
<androidPackage spec="io.nbase:nbasesdk:3.0.87"/>
<androidPackage spec="io.nbase:nbase-adapter-provider-google:3.0.10"/>
<androidPackage spec="io.nbase:nbase-adapter-billing-googleplay:3.0.6" />
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.59" minTargetSdk="15.0" />
<iosPod name="NBaseAdapterProviderGoogle" version="3.0.56" minTargetSdk="15.0" />
</iosPods>
</dependencies>
The following dependency modules are supported.
| Name | Description | Dependency modules |
|---|---|---|
| io.nbase:nbasesdk | GAMEPOT base module | X |
| io.nbase:nbase-adapter-provider-google | Google login | X |
| io.nbase:nbase-adapter-provider-apple | Apple login | X |
| io.nbase:nbase-adapter-provider-facebook | Facebook login | com.facebook.android:facebook-login:latest.release |
| io.nbase:nbase-adapter-provider-kakao | Kakao login | X |
| io.nbase:nbase-adapter-provider-line | LINE login | X |
| io.nbase:nbase-adapter-provider-naver | NAVER login | X |
| io.nbase:nbase-adapter-provider-huawei | Huawei login | X |
| io.nbase:nbase-adapter-provider-playgame | Google Play Games login | X |
| io.nbase:nbase-adapter-provider-x | X login | X |
| io.nbase:nbase-adapter-billing-googleplay | Google Play Store | com.android.billingclient:billing-ktx:7.1.1 |
| io.nbase:nbase-adapter-billing-onestore | ONE Store | X |
| io.nbase:nbase-adapter-billing-galaxy | Galaxy Store | X |
| io.nbase:nbase-adapter-billing-huawei | Huawei Store | X |
Email and guest logins are applied to the base module.
After configuring all dependencies, click Assets > External Dependency Manager > Android Resolver > Force Resolve within the Unity Editor.
After defining in Dependencies.xml, if you run Force Resolve, the content defined in the mainTemplate.gradle file is automatically defined as implementation, and this content must be completed to import the relevant libraries when building.
Set iOS
Open the /Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml file.
Add the necessary framework between "iosPods" and "/iosPods." The basic framework required is added.
XML example:
<?xml version="1.0" encoding="UTF-8"?>
<dependencies>
<androidPackages>
...
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.59" minTargetSdk="15.0" />
</iosPods>
</dependencies>
If you want to install the necessary framework, such as Firebase, you can do so separately as shown below.
XML example:
<iosPods>
...
<iosPod name="FirebaseMessaging" version="10.20.0" minTargetSdk="9.0" />
<iosPod name="Firebase/Analytics" version="10.15.0" minTargetSdk="9.0" />
...
</iosPods>
If CocoaPods is not installed,
Click Assets > External Dependency Manager > iOS Resolver > Install Cocoapods within the Unity Editor.
When you build a Unity project for iOS, the Unity-iPhone.xcworkspace file is created, which you need to open.
If you don't open the Unity-iPhone.xcworkspace file instead of Unity-iPhone.xcodeproj, the CocoaPods dependency will not be used.
Starting with Unity 2021, the project will be selected automatically.
| Name | Description | Dependeny modules |
|---|---|---|
| NBase | GAMEPOT base module | X |
| NBaseAdapterProviderGoogle | Google login | X |
| NBaseAdapterProviderFacebook | Facebook login | FBSDKLoginKit (17.4.0) |
| NBaseAdapterProviderNaver | NAVER login | X |
| NBaseAdapterProviderLine | LINE login | X |
| NBaseAdapterProviderKakao | Kakao login | X |
| NBaseAdapterProviderX | X login | X |
Some dependent frameworks can only be added through the Swift Package Manager.
The following describes how to manually add essential dependency frameworks that require installation via Swift Package Manager.
-
In Xcode, go to Project Settings, and then enter the Package Dependencies settings.

-
Add
https://github.com/apollographql/apollo-ios.gitto the URL input field at the top right, search for it, select apollo-ios, and then add it with Add Package. -
Add the Apollo and ApolloAPI modules displayed in the modal to the main target (Unity-iPhone) of your project.

The following table, this section, describes the dependency modules added via Swift Package Manager.
Name Dependency modules Location Version Framework NBase Apollo https://github.com/apollographql/apollo-ios.git 1.15.2
Preparation
Before applying the GAMEPOT Unity SDK, verify the following essential configuration items.
- Copy the project ID and project key from Dashboard > Project settings.
- Add/edit login, store, and integration settings in Dashboard > Project settings.
- See Configuration by login method for each login, set it in the console and add it to the dashboard.
- Before in-app payment, see Configuration by store to set it in the console and add it to the dashboard.
- Before in-app payment, register items in Dashboard > Payment > In-app for each payment store.
Reset
To perform an initialization, add the following code to the object used in the first scene loaded when the game starts.
C# Example:
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());
});
}
}
Parameter
The following table describes the parameters required for initialization.
| Key | Description | Required |
|---|---|---|
| projectId | Dashboard → Project settings | O |
| projectKey | Dashboard → Project settings | O |
| storeId | See the following table. | O |
| language | Language (en, ko, ja...) | O |
| region | Region name (kr, jp, sg, us, eu) | O |
See the following table for store identifiers.
| Key | Description |
|---|---|
| Store.google.ToString() | Google Play Store |
| Store.one.ToString() | ONE Store |
| Store.galaxy.ToString() | Galaxy Store |
| Store.amazon.ToString() | Amazon Store |
| Store.huawei.ToString() | Huawei Store |
| Store.pc.ToString() | PC store |
| Store.steam.ToString() | Steam store |
Callback information
The following table describes the information passed to the initialization callback.
| Key | Type | Description |
|---|---|---|
| Status | bool | Condition |
| Language | string | Language |
| Country | string | Country |
| RemoteIp | string | IP |
| Sandbox | bool | Sandbox status |
Reset (event receipt)
First, you need to create a script that receives NBase events.
This script is called NBaseListener and can be placed on any object in the scene. It is recommended that you call the DontDestroyOnLoad method to ensure that the object exists permanently.
The image below illustrates an example of configuring the NBaseListener script in a scene.

C# Example:
using UnityEngine;
using NBaseSDK;
public class NBaseListener: MonoBehaviour, NBaseEventListener
{
void Start()
{
DontDestroyOnLoad(this.gameObject);
NBaseSDK.NBase.SetEventListener(this);
}
}
Login feature
Use login feature
Use the following code to use the SDK login feature that functions when clicking the login button according to the login UI implemented by the developer. Before that, you must complete all the console and dashboard settings required for login to work properly.
C# Example:
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;
});
If you use the pop-up provided by the SDK when updating or checking, add the following code.
C# Example:
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
}
});
Parameter
The following table describes the provider values used in the login feature.
| Key | Description |
|---|---|
| Provider.google.ToString() | |
| Provider.anonymous.ToString() | Guest |
| Provider.facebook.ToString() | |
| Provider.apple.ToString() | Apple |
| Provider.kakao.ToString() | Kakao |
| Provider.googleplay.ToString() | Play Games |
| Provider.steam.ToString() | Steam |
| Provider.x.ToString() | X |
| Provider.line.ToString() | LINE |
| Provider.naver.ToString() | NAVER |
| Provider.github.ToString() | GitHub |
| Provider.microsoft.ToString() | Microsoft |
| Provider.huawei.ToString() | Huawei |
User information
The following table describes the fields of the user object.
| Key | Type | Description |
|---|---|---|
| Id | string | User's unique ID |
| SocialId | string | Social ID |
| Name | string | Name (if provided) |
| string | Email (if provided) | |
| Token | string | Token |
| Age | int | Age (if provided) |
| Profile | string | Profile (if provided) |
| CustomField | string | Custom field |
| IsSignUp | bool | Registration status |
| AppStatus | AppStatus | Maintenance/update status |
App status information
The following table describes the fields of the AppStatus object.
| Key | Type | Description |
|---|---|---|
| Message | string | Message |
| StartedAt | long | Start Time |
| EndedAt | long | End time |
| CurrentAppVersion | string | Current app version |
| UpdateAppVersion | string | Update app version |
| CurrentAppVersionCode | string | Current app version code |
| UpdateAppVersionCode | string | Update app version code |
| IsForce | bool | Whether to force update |
| Url | string | URL registered for maintenance/update |
Login UI provided by SDK
You can use the login UI provided by GAMEPOT SDK in a completed form.
Use the following code to call the login UI provided by the SDK.
C# Example:
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;
});
Auto login (optional)
After initialization, it may attempt to automatically log in with the last authentication method you logged in with. We recommend checking the last login provider type before attempting automatic login.
C# Example:
// Check the last login provider type.
string lastProviderType = NBaseSDK.NBase.getLastProviderType();
if (lastProviderType != Provider.none.ToString())
{
// Attempt automatic login only if last login information is available.
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
{
// No last login information
Debug.Log("No last login provider found");
}
The getLastProviderType() method returns the last logged-in provider type.
The signInLastLoggedIn() method attempts automatic login using the last authentication method used to log in.
Callback information
The following table describes the values passed to the automatic login callback.
| Key | Type | Description |
|---|---|---|
| user | User | User information upon successful login |
| error | Error | Error information upon login failure |
Log out
Use the following code to use the SDK logout feature.
C# Example:
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());
// Processing logic after successful logout
}
});
Callback information
The following table describes the values passed to the logout callback.
| Key | Type | Description |
|---|---|---|
| status | Boolean | Success or Failure |
Membership withdrawal
Use the following code to use the SDK membership withdrawal feature.
C# Example:
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());
// Logic after successful membership withdrawal
}
});
Parameter
The following table, this section, describes the parameters that must be passed for a membership withdrawal.
| Key | Type | Description | Required |
|---|---|---|---|
| providerId | String | Logged-in provider type (example: Provider.google.ToString(), Provider.anonymous.ToString(), etc.) | O |
Callback information
The following table describes the callback values for membership withdrawal.
| Key | Type | Description |
|---|---|---|
| status | Boolean | Success or Failure |
Authenticate with ID and password (optional)
This is an authentication method that allows users to log in using their email address and password.
This method performs user authentication based on the user's email address and password, and plays an important role in the traditional email/password-based authentication system.
C# Example:
NBaseSDK.NBase.signInWithPassword(username, password, (user, error) => {
if (error != null)
{
Debug.Log(error.Message.ToString());
return;
}
});
Log in with credentials (optional)
Use the following code to log in using credentials (access tokens) obtained from external social accounts.
C# Example:
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
The following table describes the parameters required for credential login.
| Key | Type | Description | Required |
|---|---|---|---|
| provider | String | Provider ID (example: Provider.google.ToString(), Provider.facebook.ToString(), etc.) | O |
| providerToken | String | Access token of the social account | O |
Callback information
The following table describes the credential login callback values.
| Key | Type | Description |
|---|---|---|
| user | User | User information upon successful login |
| error | Error | Error information upon login failure |
External account integration feature
This section describes the feature that allows you to integrate and manage external social accounts with your GAMEPOT user account.
Use external account integration feature
Use the following code to integrate another social account with your current GAMEPOT user account.
C# Example:
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);
// Processing logic after successful account integration
}
});
Parameter
The following table describes the parameters required for account integration.
| Key | Type | Description | Required |
|---|---|---|---|
| providerId | String | Provider type to integrate (example: Provider.google.ToString(), Provider.facebook.ToString(), etc.) | O |
Callback information
The following table describes the callback values for account integration.
| Key | Type | Description |
|---|---|---|
| linkingId | String | Integration ID returned when integration is successful |
Check integration list
Use the following code to check the list of social accounts currently integrated with your GAMEPOT user account.
C# Example:
NBaseSDK.NBase.getLinkedLists((linkings, error) => {
if (error != null)
{
// getLinkedLists Failed
Debug.Log("getLinkedLists Failed: " + error.Message.ToString());
}
else
{
// getLinkedLists Success
Debug.Log("getLinkedLists Success: " + linkings.ToString());
// Processing logic after checking the integration list
}
});
Callback information
The following table describes the values provided when checking the account integration list.
| Key | Type | Description |
|---|---|---|
| linkings | List |
List of integrated accounts |
Linking object
The following table describes the fields of the Linking object.
| Key | Type | Description |
|---|---|---|
| id | String | Integration ID (use when removing account integration) |
| username | String | Social ID |
| provider | String | Social provider type |
Remove integration
To remove a specific social account integration from your current GAMEPOT user account, use the following code.
C# Example:
NBaseSDK.NBase.deleteLinking(linkingId, (status, error) => {
if (error != null)
{
// deleteLinking Failed
Debug.Log("deleteLinking Failed: " + error.Message.ToString());
}
else
{
// deleteLinking Success
Debug.Log("deleteLinking Success: " + status.ToString());
// Processing logic after successful integration removal
}
});
Parameter
The following table describes the parameters required for account integration removal.
| Key | Type | Description | Required |
|---|---|---|---|
| linkingId | String | Integration ID to remove (obtained from createLinking or getLinkedLists) | O |
Callback information
The following table describes the callback values for account integration removal.
| Key | Type | Description |
|---|---|---|
| status | Boolean | Success or Failure |
Check app status
Use the following code to check the current client's maintenance/update status.
C# Example:
NBaseSDK.NBase.checkAppStatus((status, error) =>
{
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, (status, error) => {
// 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, (status, error) => {
// Popup handling
});
*/
break;
}
});
Unity Standalone information
Standalone refers to builds for Mac, Windows, and Linux.
The GAMEPOT SDK supports cross-platform, but the features supported by mobile and Standalone are different, so see the table below to plan your development.
| Service | Android | iOS | Web | PC | Remarks |
|---|---|---|---|---|---|
| Login | O | O | O | Validate token after PC login. | |
| Payment | O | O | O | Navigate to the PC payment page. | |
| Notice | O | O | O | O | Provide list query excluding the UI. |
| Support | O | O | O | O | Navigate to PC. |
| Leaderboard | O | O | O | O | |
| Friend management | O | O | O | O | |
| Push | O | O | X | X | |
| Maintenance check | O | O | O | O | |
| Update | O | O | O | O | |
| Coupons | O | O | O | O | |
| Chat | O | O | O | O | |
| Data storage | O | O | O | O | |
| Security | O | O | X | Under preparation | |
| Player | O | O | O | O |
The web version is a feature only available in the GamePot 3.0 Typescript version.
Newtonsoft.Json crash
The NBase Unity SDK uses Unity's Newtonsoft JSON package to parse API requests. JSON is one of the most commonly used libraries, so there is a possibility that you already have JSON in your project and you will get the following library duplication error.
In this case, you can delete the Newtonsoft.Json file in the Plugins/Standalone path or delete the JSON library already in the project and use Unity's JSON. Unity's JSON package has been modified to work with the Unity engine and is a fully supported version of IL2CPP.
Troubleshooting
Q. UnityPlayerActivity.java uses or overrides a deprecated API.
A. Select Edit > Project Settings > Player > Publishing Settings > Custom Properties Gradle Template.
Q. error:1E08010C:DECODER routines::unsupported
A. This occurs when the Google authentication key value does not match. See the Google Play Store guide and enter the key correctly.
Q. Aside from official Maven addresses such as ONE Store or GAMEPOT Beta, downloads are not possible from Maven and jitpack.io.
The following error occurs in Unity.
Text example:
Could not determine the dependencies of task ':unityLibrary:compileReleaseAidl'.
> Could not resolve all task dependencies for configuration ':unityLibrary:releaseCompileClasspath'.
> Could not find io.nbase:nbasesdk:0.0.71-beta.
Required by:
project :unityLibrary
For modules that do not use public Maven, you must enter the following Maven address. Enter the Maven address together when configuring the NBaseSDKDependencies file.
XML example:
<!-- # ONE Store -->
<androidPackage spec="com.onestorecorp.sdk:sdk-iap:21.01.00"/>
<repositories>
<repository>https://repo.onestore.co.kr/repository/onestore-sdk-public</repository>
</repositories>
</androidPackage>
<!-- # NBase Beta Maven repository -->
<androidPackage spec="io.nbase:nbasesdk:3.0.84"/>
<repositories>
<repository>https://repo.nbase.io/repository/nbase-releases/</repository>
</repositories>
</androidPackage>
You can also add the address for jitpack.io.
Q. Minimum API level increase notice
A. Raise the minimum API level from 22 to 24.
The image below illustrates where to adjust the API level.

Q. Authorization failed: Error Domain=AKAuthenticationError Code=-7026
A. Add Sign In with Apple by clicking TARGETS > +Capability.
The image below illustrates the page for adding the Sign in with Apple feature.

Q. Couldn't get credential from result.10: Developer console is not set up correctly
A. This error may occur because the client ID of the web application type is not set in Google Cloud Console > Set credentials > OAuth 2.0 client ID.
Q. 16: Cannot find a matching credential.
A. This error can occur when the Google Cloud Console > Set credentials > OAuth 2.0 client ID is not registered.
Q. java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;
A. Add the following code.
XML example:
<androidPackage spec="com.android.billingclient:billing:7.0.0" />
Q. (iOS) A crash occurs when the app is launched, and the "/AdapterProviderFacebook' (no such file)" error is confirmed .
A. Add Xcode TARGETS → General → Frameworks, Libraries, and Embedded Content → AdapterProviderFacebook.xcframework.
Q. (iOS) After launching, an "'/usr/lib/swift/NBase.framework/NBase' (no such file, not in dyld cache)" error occurs .
A. Add NBase.xcframework as shown below.
The image below illustrates the process of adding NBase.xcframework to the project.


Q. (iOS) In the iOS 18 environment, an "NSBundle file:///System/Library/Frameworks/Metal.framework/ principal class is nil because all fallbacks have failed" error occurs .
A. Open the Edit Scheme window (shortcut: CMD + SHIFT + ,), deselect API Validation from the Metal field.
The image below illustrates where to disable the Metal API Validation option.
