Android
版本概述
| 变更类型 | 说明 |
|---|---|
| 包名变更 | 根包名由 com.xd.intl 变更为 com.xd.sdk |
| 模块整合 | Share / ShareCN 模块移除,请使用为 Sharing 模块 |
| 初始化方式 | 入口类由 XDGSDK 变更为 XDGCommon |
包名迁移
v7 版本采用全新的包名结构:
| v6 包名 | v7 包名 |
|---|---|
com.xd.intl.common | com.xd.sdk.common |
com.xd.intl.account | com.xd.sdk.account |
com.xd.intl.payment | com.xd.sdk.payment |
com.xd.sharing.mix | com.xd.sdk.sharing |
基础模块
类变更
| v6 | v7 |
|---|---|
com.xd.intl.common.XDGSDK | com.xd.sdk.common.XDGCommon |
初始化
- 初始化时需指定包体类型和当前语言。
- 初始化支持设定渠道信息,优先级高于
XDConfig.json中的配置。若需保留配置文件中的渠道信息,请传入空字符串。
// MainActivity.java
import com.xd.sdk.common.XDGCommon;
import com.xd.sdk.common.base.Lang;
import com.xd.sdk.common.callback.XDGInitCallback;
import com.xd.sdk.common.data.model.InitParams;
import com.xd.sdk.common.data.model.PackageType;
import org.json.JSONObject;
// ...
private void init() {
InitParams initParams = InitParams.newBuilder()
.setPackageType(PackageType.GooglePlay) // 默认: PackageType.Normal
.setLanguage(Lang.EN) // 初始化语言
.setChannelName("GooglePlay") // 初始化渠道,默认为空,SDK 内部会按照读取顺序获取渠道顺序,这里是保留字段,在非广告渠道的自定义。读取广告包配置(仅国内) -> this -> XDConfig.json 配置
.setDBProperties(new JSONObject().put("custom_key", "custom_value")) // db 参数可透传给 TapDB 的 device_login/user_login 事件
.build();
XDGCommon.initSDK(MainActivity.this, initParams, new XDGInitCallback() {
@Override
public void initCallback(boolean success, String message) {
if (success) {
// Success
} else {
// Failure
Log.e("MainActivity", "XDSDK Init failed: " + message);
}
}
});
}
埋点
- 不再需要调用
XDGCommon.trackUser方法,SDK 会自动上报用户信息。若之前上报的 userid 不是 XDID,请联系技术支持。 - 预置事件类型已移除,如有需求,请联系技术支持。
其他
- 移除
XDGSDK.getRegionInfo()接口,请使用查询 IP 信息接口 - 移除
XDGSDK.showDetailAgreement()接口,请使用打开网页接口 - 移除
XDGSDK.disableAgreementUI()接口,如有需求请联系技术支持 - 移除
XDGSDK.validateWithCaptcha()接口,如有需求请联系技术支持
账户模块
类变更
| v6 | v7 |
|---|---|
com.xd.intl.account.XDGAccount | com.xd.sdk.account.XDGAccount |
获取用户
移除 XDGAccount.getUser 接口,请使用同步接口 XDGAccount.getCurrentUser 。
// LoginActivity.java
import com.xd.sdk.account.XDGAccount;
import com.xd.sdk.common.bean.XDGUser;
// ...
private void getCurrentUser() {
XDGUser currentUser = XDGAccount.getCurrentUser();
if (currentUser != null) {
String userId = currentUser.getId(); // 用户在 XD 账户系统的 XD User ID(用户唯一标识)
String userName = currentUser.getName();
String nickname = currentUser.getNickName();
String avatar = currentUser.getAvatar();
}
}
打开用户中心
XDGAccount.openUserCenter 接口保持不变。
// LoginActivity.java
import com.xd.sdk.account.XDGAccount;
// ...
private void openUserCenter() {
XDGAccount.openUserCenter(LoginActivity.this);
}
打开注销页面
移除 XDGAccount.openUnregister 接口,请使用 XDGAccount.openAccountDeletion 。
// LoginActivity.java
import com.xd.sdk.account.XDGAccount;
// ...
private void openAccountDeletion() {
XDGAccount.openAccountDeletion(LoginActivity.this);
}
客服
原有的 XDGCommon.report 接口及自行接入的 TapSupportSDK 均不再支持,请改用新版内置的客服接口 XDGAccount.openCustomerService。
客服未读消息状态会通过 XDGUserStatusChangeCallback 回调,有未读消息时返回 XDGUserStatusChangeCallback.UserStatus.CUSTOMER_HAS_UNREAD_MESSAGE,无未读消息时返回 XDGUserStatusChangeCallback.UserStatus.CUSTOMER_NO_UNREAD_MESSAGE。
// MainActivity.java
import com.xd.sdk.account.XDGAccount;
import com.xd.sdk.common.entities.RoleInfo;
import java.util.HashMap;
import java.util.Map;
// ...
private void openCustomerService() {
RoleInfo roleInfo = RoleInfo.newBuilder()
.setRoleId("game_role_id") // 必填
.setRoleName("game_role_name") // 必填
.setRoleLevel(100)// 必填
.setServerId("game_server_id") // 必填
.setExtra("extra_info")
.build();
String path = ""; // 客服内的相对路径,一般留空即可
Map<String, Object> extrasMap = new HashMap<>();
extrasMap.put("key", "value");
XDGAccount.openCustomerService(MainActivity.this, roleInfo, path, extrasMap);
}
其他
- 移除
XDGAccount.isTokenActiveWithType()接口
支付模块
类变更
| v6 | v7 |
|---|---|
com.xd.intl.payment.XDGPayment | com.xd.sdk.payment.XDGPayment |
查询商品
保留 XDGPayment.queryWithProductIds 接口,queryProductList 接口已删除。SDK 会根据初始化时的包体类型自动处理查询逻辑,但需注意商品 ID 列表应匹配当前平台。
// PaymentActivity.java
import com.xd.sdk.common.base.XDGError;
import com.xd.sdk.payment.XDGPayment;
import com.xd.sdk.payment.callback.PaymentResultCallback;
import com.xd.sdk.payment.entities.XDGProductInfo;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
// ...
private void queryProducts() {
// 当 XDConfig.json 配置的 regionType 为 Global 且初始化参数指定的 packageType 为 PackageType.GooglePlay 时查询的是 Google 的商品;
// 其他情况查询的是在平台配置的商品
List<String> productIdList = new ArrayList<>();
productIdList.add("product_id_1");
XDGPayment.queryWithProductIds(productIdList, new PaymentResultCallback<List<XDGProductInfo>>() {
@Override
public void onSuccess(@NotNull List<XDGProductInfo> xdgProductInfos) {
if (xdgProductInfos.isEmpty()) {
// 查询商品为空
} else {
// 查询成功
for (XDGProductInfo info : xdgProductInfos) {
String productId = info.getProductId();
String displayPrice = info.getDisplayPrice();
String title = info.getTitle();
String description = info.getDescription();
}
}
}
@Override
public void onError(@NotNull XDGError xdgError) {
}
});
}
发起支付
仅保留 XDGPayment.payWithParams 接口,payWithProduct 和 payWithWeb 接口已删除。
// PaymentActivity.java
import android.util.Log;
import com.xd.sdk.common.base.XDGError;
import com.xd.sdk.payment.XDGPayment;
import com.xd.sdk.payment.api.XDGPaymentParams;
import com.xd.sdk.payment.callback.PaymentResultCallback;
import com.xd.sdk.payment.entities.XDGOrderInfo;
import org.jetbrains.annotations.NotNull;
// ...
private void payWithParams() {
// 当 XDConfig.json 配置的 regionType 为 CN 发起的是国内支付宝&微信支付;
// regionType 为 Global 时:
// - 初始化参数指定的 packageType 为 PackageType.GooglePlay 时发起的是 Google 结算库购买
// - 其他,发起网页支付
XDGPaymentParams params = XDGPaymentParams.newBuilder()
.setGameOrderId("game_order_id") // 订单 ID
.setProductId("product_id") // 商品 ID
.setRoleId("game_role_id") // 角色 ID
.setServerId("game_server_id") // 服务器 ID
.setExt("extra_info") // 附加信息
.build();
XDGPayment.payWithParams(PaymentActivity.this, params, new PaymentResultCallback<XDGOrderInfo>() {
@Override
public void onSuccess(@NotNull XDGOrderInfo xdgOrderInfo) {
// 支付成功
Log.i("PaymentActivity", "支付订单数据: " + xdgOrderInfo);
}
@Override
public void onError(@NotNull XDGError xdgError) {
// 支付失败
int code = xdgError.getCode();
String message = xdgError.getMessage();
}
});
}
数据类型变更
| 功能 | v6 类型 | v7 类型 |
|---|---|---|
| 商品信息 | GoogleProductDetails & ProductSkuInfo | XDGProductInfo |
游戏不再需要自行拼接货币符号和价格数值,可使用XDGProductInfo 的 displayPrice 属性。
分享模块
类变更
v7 将原有的 XDGShare(海外)和 XDGShareCN(国内)合并为统一的 XDGSharing 模块。
| v6 | v7 |
|---|---|
com.xd.share.XDGShare | com.xd.sdk.sharing.XDGSharing |
com.xd.share.cn.XDShare | com.xd.sdk.sharing.XDGSharing |
com.xd.sharing.mix.XDGSharing | com.xd.sdk.sharing.XDGSharing |
分享接口
XDGCommon.share 接口已删除,请改用新版 XDGSharing 接口。详细用法请参考 分享文档。