跳到主要内容

XDSDK v7 Unity 快速接入

· 阅读需 7 分钟

配置

添加依赖

参考下面内容,在 manifest.json 中添加 SDK 依赖。代码示例为所有模块,具体使用哪些请和平台同事确认。

{
"dependencies": {
"com.xd.sdk.foundation": "7.1.0",
"com.xd.sdk.common": "7.1.0",
"com.xd.sdk.account": "7.1.0",
"com.xd.sdk.payment": "7.1.0",
"com.xd.sdk.mainland": "7.1.0",
"com.xd.sdk.announcement": "7.1.0",
"com.xd.sdk.tap": "4.8.1-xd.2",
"com.xd.sdk.tap.plus": "4.8.1-xd.2"
},
"scopedRegistries": [
{
"name": "NPMJS",
"url": "https://registry.npmmirror.com",
"scopes": [
"com.xd.sdk"
]
}
]
}

导入插件

  1. 将给到的 Vuplex 4.5 的 UnityPackage 导入项目。
  2. 将 asmdef 文件拷贝到 Vuplex/WebView/Core/Scripts/Vuplex.WebView.asmdef

参数文件

将给到的参数配置文件名改为XDConfig.json,放到 Assets/ 目录下。

初始化

打印日志

using XD.SDK.Common;
XDGLogger.LogDelegate = (level, info) =>
{
// 自行打印到控制台或文件
};

初始化SDK

  • 请将初始化代码放在尽可能靠前的位置,在初始化成功前请不要绘制登录相关的界面。
  • 如果初始化失败一般为配置问题,请根据错误信息检查配置是否正确或者咨询平台。
  • 初始化成功前大部分接口都不可使用。
using XD.SDK.Common;

// 渠道和语言根据实际情况修改
// PackageType 规则
// 国内 TapTap PC 平台请使用 PackageTypePCTapTap,
// 海外 Google Play Android 平台请使用 PackageTypeAndroidGooglePlay
// 其他平台请使用 PackageTypeDefault

XDGInitParam initParam = XDGInitParam.CreateToXDSDK("your_channel", LangType.ZH_CN, XDGPackageType.PackageTypePCTapTap);
XDGCommon.InitSDK(initParam,
(success, msg) =>
{
if (success)
{
// 初始化成功
}
else
{
// 初始化失败
}
});

// 判断是否初始化完成
bool isInitialized = XDGCommon.IsInitialized();

修改多语言

在初始化后可根据需要修改SDK语言。

using XD.SDK.Common;
XDGCommon.SetLanguage(LangType.EN);

登录

  • 在初始化成功后可以进入登录页面但暂时先不要绘制登录按钮,先设置好用户状态回调并调用自动登录,如果自动登录失败再绘制登录按钮。
  • 登录按钮点击后调用手动登录接口,需要传入对应的登录类型。登录失败后需要继续展示登录按钮让用户重新登录。
  • 自动登录在每次打开游戏时只能触发一次,失败后只能调用手动登录接口。
  • 收到用户退出登录的回调时需要回到登录页面并展示登录按钮。此时不要再调用自动登录接口。

状态回调

  • 需要在初始化前设置好
using XD.SDK.Account;   

// 设置用户状态回调
XDGAccount.AddUserStatusChangeCallback((code, message) =>
{
switch (code)
{
case XDGUserStatusCodeType.BIND:
// 绑定成功,没有更多登录方式可不处理
break;
case XDGUserStatusCodeType.UNBIND:
// 解绑成功,没有更多登录方式可不处理
break;
case XDGUserStatusCodeType.LOGOUT:
// 退出登录,回到登录页面,展示登录按钮
break;
case XDGUserStatusCodeType.ProtocolAgreedAfterLogout:
// 退出登录后同意协议,可不处理
break;
case XDGUserStatusCodeType.SupportHasUnRead:
// 客服有未读消息,未开通服务可以不处理
break;
case XDGUserStatusCodeType.SupportNoUnRead:
// 客服没有未读消息,未开通服务可以不处理
break;
default:
// 未知 Code,不需要处理
break;
}
});

发起登录

using XD.SDK.Account;

// 自动登录,在初始化成功后可以调用该方法,每次打开游戏只触发一次。失败之后只能调用其他登录方式。
XDGAccount.LoginByType(LoginType.Default,
user =>
{
// 自动登录成功,进入游戏
String userId = user.UserId;
},
error =>
{
// 自动登录失败,展示 TapTap 登录按钮
});

// 手动登录
XDGAccount.LoginByType(LoginType.TapTap,
user =>
{
// TapTap登录成功,进入游戏
String userId = user.UserId;
},
error =>
{
// TapTap 登录失败,展示 TapTap 登录按钮
});

// 登录后获取用户信息
XDGUser currentUser = XDGAccount.GetCurrentUser();

用户中心

using XD.SDK.Account;

XDGAccount.OpenUserCenter(null);

退出登录

using XD.SDK.Account;

XDGAccount.Logout();

账号注销

using XD.SDK.Account;

XDGAccount.OpenAccountDeletion();

打开客服

using XD.SDK.Account;

// 角色信息
XDGRoleInfo role = new XDGRoleInfo()
{
RoleId = "role_id",
RoleLevel = 10,
RoleName = "role_name",
ServerId = "server_id"
};
// 透传参数
var paramsMap = new Dictionary<string, object>
{
{ "key1", "value1" },
{ "key2", true },
{ "key3", 1234567890 }
};
XDGAccount.OpenCustomerService(role, "", paramsMap);

个人信息页

仅限国内可使用

using XD.SDK.Account;

XDGRoleInfo role = new XDGRoleInfo()
{
RoleId = "role_id",
RoleLevel = 10,
RoleName = "role_name",
ServerId = "server_id"
};
XDGAccount.OpenUserDashboard(role);

内购

查询商品价格

  • 在查询商品价格前请在后台配置好对应的商品信息。
  • Apple、Google Play 平台查询价格需要使用对应平台的商品 ID。
  • 其他平台查询价格使用 XD 平台的商品 ID。
using XD.SDK.Payment;

string[] productIdList = { "com.xd.demo.sku1", "com.xd.demo.sku2" };
XDGPayment.QueryWithProductIds(productIdList,
list =>
{
foreach (var product in list)
{
// 商品 ID
var productId = product.ProductId;
// 商品价格,带货币符号,可直接使用
var productPrice = product.DisplayPrice;
}
},
error =>
{
// 查询失败
});

发起内购

using XD.SDK.Payment;

var paymentParams = new XDGPaymentParams(
"game_order_id", // 游戏订单号
"product_id", // 商品 ID
"role_id", // 当前角色 ID
"server_id", // 当前服务器 ID
"extra", // 透传参数
1);// 商品数量,仅 Apple 购买可用
XDGPayment.PayWithParams(paymentParams,
orderInfo =>
{
// 购买完成,发货请等待服务端回调
String orderId = orderInfo.GameOrderId;
String productId = orderInfo.ProductId;
String roleId = orderInfo.RoleId;
String serverId = orderInfo.ServerId;
String extra = orderInfo.Extra;
},
error =>
{
// 购买失败
});

查询 Apple 未消费订单

  • 仅 Apple 平台可用,其他平台调用该接口会直接返回空列表。
  • 查询到的订单可能是用户之前购买成功但未成功消费的订单,也可能是 App Store 中兑换的礼包码订单。
using XD.SDK.Payment;

XDGPayment.QueryPendingPurchases(
list =>
{
// 查询成功
foreach (var purchase in list)
{
// 商品 ID
String productId = purchase.ProductId;
// 订单 token
String purchaseToken = purchase.PurchaseToken;
}
},
error =>
{
// 查询失败
});

消费 Apple 未消费订单

using XD.SDK.Payment;

var paymentParams = new XDGPaymentParams(
"game_order_id", // 游戏订单号
"product_id", // 商品 ID
"role_id", // 当前角色 ID
"server_id", // 当前服务器 ID
"extra", // 透传参数
1);// 商品数量,仅 Apple 购买可用

// 传入查询到的未消费订单 token
paymentParams.PendingPurchaseToken = "purchase_token";

XDGPayment.PayWithParams(paymentParams,
orderInfo =>
{
// 购买完成,发货请等待服务端回调
String orderId = orderInfo.GameOrderId;
String productId = orderInfo.ProductId;
String roleId = orderInfo.RoleId;
String serverId = orderInfo.ServerId;
String extra = orderInfo.Extra;
},
error =>
{
// 购买失败
});

工具

事件上报

using XD.SDK.Common;

// 事件上报
XDGCommon.TrackEvent("event_name", new Dictionary<string, object>()
{
{ "key1", "value1" },
{ "key2", "value2" }
});

// 角色信息上报
XDGRoleInfo role = new XDGRoleInfo()
{
RoleId = "role_id",
RoleLevel = 10,
RoleName = "role_name",
ServerId = "server_id"
};
XDGCommon.TrackRole(role);

商店评价

商店评价仅支持 Apple 和 Google Play 平台。

using XD.SDK.Common;

XDGCommon.StoreReview();

打开网页

using XD.SDK.Common;

XDGCommon.OpenWebPage("url", (actionType, objects) =>
{
// objects 是透传数据,在各个事件中均可能携带
if (actionType == WebActionEnum.CLOSE)
{
// 关闭网页
} else if (actionType == WebActionEnum.MESSAGE)
{
// 透传数据,具体数据内容根据和网页的约定而定
}
});

公告

展示公告

展示公告 UI,由 SDK 处理公告的获取和展示。可以在公告后台进行样式自定义。

using XD.SDK.Announcement;

XDGAnnouncementConfig config = new XDGAnnouncementConfig();
config.Channel = "渠道配置"; // 对应公告后台的 Google iOS PC 等
config.ServerCode = "服务器 code"; // 对应公告后台配置服务器时对应的 code

// 展示公告面板
XDGAnnouncementManager.OpenAnnouncementPage(config, (actionType, objects) =>
{
// objects 是透传数据,在各个事件中均可能携带
if (actionType == WebActionEnum.CLOSE)
{
// 关闭公告
} else if (actionType == WebActionEnum.MESSAGE)
{
// 透传数据
}
});

检查未读公告

检查是否有未读公告,请不要频繁调用该接口,可能影响性能。

using XD.SDK.Announcement;

XDGAnnouncementConfig config = new XDGAnnouncementConfig();
config.Channel = "渠道配置"; // 对应公告后台的 Google iOS PC 等
config.ServerCode = "服务器 code"; // 对应公告后台配置服务器时对应的 code

XDGAnnouncementManager.RequestAnnouncementUnread(config, hasUnread =>
{
if (hasUnread)
{
// 有未读公告
}
else
{
// 没有未读公告
}
});

TapSDK

  • TapSDK 内的功能模块均由 XDSDK 进行初始化和调用,游戏无需重复初始化 TapSDK。
  • 接口功能使用说明请参考 TapSDK 文档,但接口使用时请注意替换成 XDSDK 中的对应接口,一般在 XDGTapSDK 和 XDGTapPlusSDK 两个类中,函数名一般保持不变。

XDGTapSDK

using XD.SDK.Tap;

该模块下所有模块使用时需要替换成 XDGTapSDK.接口名 形式调用。

XDGTapPlusSDK

using XD.SDK.Tap.Plus;

该模块下所有模块使用时需要替换成 XDGTapPlusSDK.接口名 形式调用。