跳到主要内容
版本:v7

Android

版本概述

变更类型说明
包名变更根包名由 com.xd.intl 变更为 com.xd.sdk
模块整合Share / ShareCN 模块移除,请使用为 Sharing 模块
初始化方式入口类由 XDGSDK 变更为 XDGCommon

包名迁移

v7 版本采用全新的包名结构:

v6 包名v7 包名
com.xd.intl.commoncom.xd.sdk.common
com.xd.intl.accountcom.xd.sdk.account
com.xd.intl.paymentcom.xd.sdk.payment
com.xd.sharing.mixcom.xd.sdk.sharing

基础模块

类变更

v6v7
com.xd.intl.common.XDGSDKcom.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() 接口,如有需求请联系技术支持

账户模块

类变更

v6v7
com.xd.intl.account.XDGAccountcom.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() 接口

支付模块

类变更

v6v7
com.xd.intl.payment.XDGPaymentcom.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 接口,payWithProductpayWithWeb 接口已删除。

// 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 & ProductSkuInfoXDGProductInfo

游戏不再需要自行拼接货币符号和价格数值,可使用XDGProductInfodisplayPrice 属性。


分享模块

类变更

v7 将原有的 XDGShare(海外)和 XDGShareCN(国内)合并为统一的 XDGSharing 模块。

v6v7
com.xd.share.XDGSharecom.xd.sdk.sharing.XDGSharing
com.xd.share.cn.XDSharecom.xd.sdk.sharing.XDGSharing
com.xd.sharing.mix.XDGSharingcom.xd.sdk.sharing.XDGSharing

分享接口

XDGCommon.share 接口已删除,请改用新版 XDGSharing 接口。详细用法请参考 分享文档