可在Classic/VPC环境下使用。
下面介绍在Unity中使用GAMEPOT Unity SDK关联游戏与仪表盘的方法。从安装SDK开始进行环境配置,即可整合游戏开发所需的功能。
配置要求
为使用Unity的GAMEPOT SDK,所需的配置要求如下。
- 最低配置:2022.3.44f1以上
- 如需获得低版本的Unity支持,请通过咨询频道进行咨询。
SDK安装及环境配置
安装GAMEPOT Unity SDK后配置环境并关联GAMEPOT仪表盘和游戏,即可使用游戏开发所需的功能。
GAMEPOT SDK支持的语言如下所示。
- 韩语、英语、意大利语、泰语、越南语、日语、中文(简体/繁体)、印尼语、德语、西班牙语、法语
运行应用时,将根据设备语言自动显示SDK支持的语言,不支持的语言将显示为英语。
安装SDK
安装GAMEPOT Unity SDK后,在Unity配置项目的方法如下。
- 请在 Unity官方发布的GitHub 页面下载最新版本。
- 在Unity中依次点击 Assets > Import Package > Custom Package... 菜单后导入nbase-unity-plugin-[version].unitypackage文件。
- 从GAMEPOT 3.0起通过Maven和CocoaPods发布,并可通过各个设备的简单设置与多种外部库集成。
对于iOS构建,必须安装CocoaPods才能正常运行。
安装时包括External Dependency Manager for Unity在内,可以方便地安装Android和iOS包。
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项。

- 请按照下图所示,在编辑器中打开Dependency设置文件并确认相关配置。

以下是定义使用NBase SDK时默认所需的依赖包的文件。如需附加功能,可在下方文件中添加项目,以便在Android和iOS中使用模块。
什么是Dependency modules?
此为使用外部SDK时所需的模块。在使用Google登录时,必须同时安装以适配器形式提供的模块,如io.nbase:nbase-adapter-provider-google。
XML示例:
<?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>
- 使用Google登录和Google Play Store支付时
XML示例:
<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>
支持的依赖模块如下:
| Name | Description | Dependency modules |
|---|---|---|
| io.nbase:nbasesdk | GAMEPOT基础模块 | X |
| io.nbase:nbase-adapter-provider-google | Google登录 | X |
| io.nbase:nbase-adapter-provider-apple | Apple登录 | X |
| io.nbase:nbase-adapter-provider-facebook | Facebook登录 | com.facebook.android:facebook-login:latest.release |
| io.nbase:nbase-adapter-provider-kakao | Kakao登录 | X |
| io.nbase:nbase-adapter-provider-line | LINE登录 | X |
| io.nbase:nbase-adapter-provider-naver | NAVER登录 | X |
| io.nbase:nbase-adapter-provider-huawei | 华为登录 | X |
| io.nbase:nbase-adapter-provider-playgame | Google Play Games登录 | X |
| io.nbase:nbase-adapter-provider-x | X登录 | 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 | 华为商店 | X |
邮箱和访客登录适用于基础模块。
完成所有依赖项设置后,在Unity编辑器中点击Assets > External Dependency Manager > Android Resolver > Force Resolve。
配置Dependencies.xml后执行Force Resolve时,mainTemplate.gradle文件中定义的内容会自动以implementation的形式应用,只有完成这些设置后,才能在构建时下载相关的库。
iOS设置
打开/Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml文件。
在"iosPods"和"/iosPods"之间添加所需的框架即可。默认情况下已添加必要的框架。
XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<dependencies>
<androidPackages>
...
</androidPackages>
<iosPods>
<iosPod name="NBase" version="3.0.59" minTargetSdk="15.0" />
</iosPods>
</dependencies>
如要安装Firebase等必要的框架,请按照如下方式另行添加。
XML示例:
<iosPods>
...
<iosPod name="FirebaseMessaging" version="10.20.0" minTargetSdk="9.0" />
<iosPod name="Firebase/Analytics" version="10.15.0" minTargetSdk="9.0" />
...
</iosPods>
如果尚未设置CocoaPods,
请在Unity编辑器中点击Assets > External Dependency Manager > iOS Resolver > Install Cocoapods。
为iOS构建Unity项目时,会创建一个 Unity-iPhone.xcworkspace 文件,且必须打开该文件。
如果打开了 Unity-iPhone.xcworkspace 而不是 Unity-iPhone.xcodeproj 文件,将无法使用CocoaPods依赖关系。
从Unity 2021开始,该项目将会被自动选择。
| Name | Description | Dependeny modules |
|---|---|---|
| NBase | GAMEPOT基础模块 | X |
| NBaseAdapterProviderGoogle | Google登录 | X |
| NBaseAdapterProviderFacebook | Facebook登录 | FBSDKLoginKit (17.4.0) |
| NBaseAdapterProviderNaver | NAVER登录 | X |
| NBaseAdapterProviderLine | LINE登录 | X |
| NBaseAdapterProviderKakao | Kakao登录 | X |
| NBaseAdapterProviderX | X登录 | X |
部分依赖框架只能通过Swift Package Manager添加。
下方是通过Swift Package Manager手动添加额外所需的必要依赖框架的方法。
-
在Xcode中转到项目设置,然后进入包依赖设置。

-
在右上方的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
前期准备
在应用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());
});
}
}
参数
下表介绍初始化所需的参数。
| Key | Description | Required |
|---|---|---|
| projectId | 仪表盘 → 项目设置 | O |
| projectKey | 仪表盘 → 项目设置 | O |
| storeId | 参考下表 | O |
| language | 语言(en、ko、ja……) | O |
| region | 区域名称(kr、jp、sg、us、eu) | O |
商店标识符请参考下表。
| 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() | 华为商店 |
| Store.pc.ToString() | PC商店 |
| Store.steam.ToString() | Steam商店 |
回调信息
下表介绍通过初始化回调传递的信息。
| Key | Type | Description |
|---|---|---|
| Status | bool | 状态 |
| Language | string | 语言 |
| Country | string | 国家/地区 |
| RemoteIp | string | IP |
| 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() | 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() | 华为 |
用户信息
下表介绍了用户对象的字段。
| Key | Type | Description |
|---|---|---|
| Id | string | 玩家唯一ID |
| SocialId | string | 社交ID |
| Name | string | 姓名(如有提供) |
| string | 邮件(如有提供) | |
| Token | string | Token |
| 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,请使用下列代码。
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() 方法将使用上次的登录认证方式自动登录。
回调信息
下表介绍了通过自动登录回调传递的值。
| Key | Type | Description |
|---|---|---|
| user | User | 登录成功时为用户信息 |
| error | Error | 登录失败时为错误消息 |
退出登录
如要使用SDK退出登录功能,请运用下列代码。
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());
// 成功退出登录后的处理逻辑
}
});
回调信息
下表介绍了通过退出登录回调传递的值。
| Key | Type | Description |
|---|---|---|
| status | Boolean | 是否成功 |
注销会员
如要使用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());
// 成功注销会员后的处理逻辑
}
});
参数
下表介绍了在会员注销时必须传递的参数。
| Key | Type | Description | Required |
|---|---|---|---|
| providerId | String | 登录的Provider类型(例:Provider.google.ToString()、Provider.anonymous.ToString()等) | O |
回调信息
下表介绍了会员注销回调值。
| Key | Type | Description |
|---|---|---|
| status | Boolean | 是否成功 |
使用ID和密码自行认证(可选)
这是允许用户使用邮件地址和密码登录的认证方法。
系统根据用户的邮件地址和密码进行用户身份验证,该功能在基于邮件/密码的传统身份验证系统中起着重要的作用。
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());
}
});
参数
下表介绍了凭证登录时所需的参数。
| Key | Type | Description | Required |
|---|---|---|---|
| provider | String | Provider ID(例:Provider.google.ToString()、Provider.facebook.ToString()等) | O |
| providerToken | String | 社交账户的Access Token | O |
回调信息
下表介绍了凭证登录回调值。
| Key | Type | Description |
|---|---|---|
| user | User | 登录成功时为用户信息 |
| error | Error | 登录失败时为错误消息 |
外部账户关联功能
本节介绍在GAMEPOT用户账户中关联和管理外部社交账户的功能。
使用外部账户关联功能
如要将其他社交账户与当前GAMEPOT用户账户关联,请使用下列代码。
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);
// 账户关联成功后的处理逻辑
}
});
参数
下表介绍了账户关联所需的参数。
| Key | Type | Description | Required |
|---|---|---|---|
| providerId | String | 拟联动的Provider类型(例:Provider.google.ToString()、Provider.facebook.ToString()等) | O |
回调信息
下表介绍了账户关联回调值。
| Key | Type | Description |
|---|---|---|
| linkingId | String | 关联成功时返回的关联ID |
确认关联列表
如要查看与当前GAMEPOT用户账户相关联的社交账户列表,请使用下列代码。
C# 示例:
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());
// 确认关联列表后的处理逻辑
}
});
回调信息
下表介绍了在确认账户关联列表时提供的值。
| Key | Type | Description |
|---|---|---|
| linkings | List |
关联的账户列表 |
Linking对象
下表介绍了Linking对象的字段。
| Key | Type | Description |
|---|---|---|
| id | String | 关联ID(取消账户关联时使用) |
| username | String | 社交ID |
| provider | String | 社交provider类型 |
解除关联
若要在当前GAMEPOT用户账户中取消与特定社交账户的关联,请使用下列代码。
C# 示例:
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());
// 成功取消关联后的处理逻辑
}
});
参数
下表介绍了解除账户关联所需的参数。
| Key | Type | Description | Required |
|---|---|---|---|
| linkingId | String | 拟取消的关联ID(通过createLinking或getLinkedLists获取) | O |
回调信息
下表介绍了解除账户关联回调值。
| Key | Type | Description |
|---|---|---|
| status | Boolean | 是否成功 |
确认应用状态
若要确认当前客户端的维护或更新状态,请使用下列代码。
C# 示例:
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介绍
Standalone指用于Mac、Windows和Linux的构建版本。
虽然GAMEPOT SDK支持跨平台,但由于移动端和Standalone支持的功能有所不同,请参考下表制定开发计划。
| Service | Android | iOS | Web | PC | 备注 |
|---|---|---|---|---|---|
| 登录 | O | O | O | PC登录后验证Token | |
| 结算 | 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 |
Web版本是GamePot 3.0 Typescript版本才有的功能。
Newtonsoft.Json冲突
NBase Unity SDK使用Unity的Newtonsoft JSON包来解析API请求。由于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. 此问题是由于Google身份验证密钥值不匹配导致的,请参阅Google Play Store指南输入正确的密钥。
Q. 除ONE Store或GAMEPOT Beta等官方Maven地址以外,Maven或jitpack.io中均不提供下载。
Unity中出现了以下错误。
文本示例:
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
没有使用官方公共Maven的模块必须按如下方式输入Maven地址。配置NBaseSDKDependencies文件时,请一并输入Maven地址。
XML示例:
<!-- # 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 仓库 -->
<androidPackage spec="io.nbase:nbasesdk:3.0.84"/>
<repositories>
<repository>https://repo.nbase.io/repository/nbase-releases/</repository>
</repositories>
</androidPackage>
还可以添加jitpack.io地址。
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:7.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选项的位置。
