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"
]
}
]
}
导入插件
- 将给到的 Vuplex 4.5 的 UnityPackage 导入项目。
- 将 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.接口名 形式调用。