开发指南
初始化
- XDSDK 的初始化流程中会自动处理第三方 SDK 的初始化工作,包括 TapSDK。
- 请不要在初始化完成前调用其他接口。
- Android
- iOS
- Unity
// 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);
}
}
});
}
#import <XDCommonSDK/XDCommonSDK.h>
XDGInitParam *initParam = [XDGInitParam new];
// 语言和渠道根据实际情况设置
initParam.lang = XDGLanguageLocaleEnglish;
initParam.channel = @"AP";
// db 参数可透传给 TapDB 的 device_login/user_login 事件
NSMutableDictionary *dbProperties = [NSMutableDictionary dictionary];
[dbProperties setValue:@"demo_extra_value" forKey:@"demo_extra_key"];
initParam.dbProperties = dbProperties;
[XDGSDK initSDK:initParam
handler:^(BOOL success, NSString *msg) {
if (success) {
NSLog(@"初始化成功");
} else {
NSLog(@"初始化失败:%@", msg);
}
}];
// 判断是否初始化完成
BOOL isInitialized = [XDGSDK isInitialized];
using XD.SDK.Common;
// 渠道和语言根据实际情况修改
// PackageType 规则
// 国内 TapTap PC 平台请使用 PackageTypePCTapTap,
// 海外 Google Play Android 平台请使用 PackageTypeAndroidGooglePlay
// 其他平台请使用 PackageTypeDefault
// db 参数可透传给 TapDB 的 device_login/user_login 事件
var dbProperties = new Dictionary<string, object>
{
{ "test_init_device_login_key", "test_init_device_login_value" }
};
XDGInitParam initParam = XDGInitParam.CreateToXDSDK("your_channel", LangType.ZH_CN, XDGPackageType.PackageTypePCTapTap, dbProperties);
XDGCommon.InitSDK(initParam,
(success, msg) =>
{
if (success)
{
// 初始化成功
}
else
{
// 初始化失败
}
});
// 判断是否初始化完成
bool isInitialized = XDGCommon.IsInitialized();
多语言
可以在初始化时直接设置语言,或者在初始化后调用该接口更改当前语言。如果未设置或者设置自动,则 SDK 会自动尝试匹配系统语言。目前支持如下语言类型。
| 类型 | 简体中文 | 繁体中文 | 英文 | 泰文 | 印尼文 | 韩语 | 日语 | 德语 | 法语 | 葡萄牙语 | 西班牙语 | 土耳其语 | 俄罗斯语 | 越南语 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 枚举 | ZH_CN | ZH_TW | EN | TH | ID | KR | JP | DE | FR | PT | ES | TR | RU | VI |
- Android
- iOS
- Unity
// MainActivity.java
import com.xd.sdk.common.XDGCommon;
import com.xd.sdk.common.base.Lang;
// ...
private void setLanguage() {
XDGCommon.setLanguage(Lang.ZH_CN);
}
#import <XDCommonSDK/XDCommonSDK.h>
/** 设置 SDK 显示语言
* @param locale 语言,在 XDGLanguageLocale 枚举中查看
*/
[XDGSDK setLanguage:XDGLanguageLocaleSimplifiedChinese];
using XD.SDK.Common;
XDGCommon.SetLanguage(LangType.EN);
埋点
目前已集成 TapDB、Appsflyer、Firebase、Facebook 几个第三方数据统计 SDK,游戏可通过统一的埋点接口上报自定义事件和角色信息,SDK 会自动将数据传递给各个第三方 SDK 进行处理。
提示
- SDK 内部针对 「支付成功」 事件有做统一的事件埋点处理,一般无需接入方自行上报。
- v7 版本中,将默认不再自带 AdjustSDK,如有需要请联系平台获取接入方式。
- Android
- iOS
- Unity
// MainActivity.java
import com.xd.sdk.common.XDGCommon;
import java.util.HashMap;
import java.util.Map;
// ...
private void trackEvent() {
XDGCommon.trackEvent("自定义事件名称");
Map<String, Object> params = new HashMap<>();
params.put("key", "value");
XDGCommon.trackEvent("自定义带参数的事件名称", params);
}
#import <XDCommonSDK/XDCommonSDK.h>
/** 跟踪自定义事件
* @param eventName 事件名称
*/
NSString *eventName = @"custom_event_name";
[XDGSDK trackEvent:eventName];
/** 跟踪自定义事件
* @param eventName 事件名称
* @param properties 自定义属性
*/
NSString *eventName2 = @"custom_event_name";
NSMutableDictionary *properties = [NSMutableDictionary dictionary];
[XDGSDK trackEvent:eventName2 properties:properties];
// 跟踪角色信息
XDGRoleInfo *role = [XDGRoleInfo new];
role.roleId = @"your_role_id";
role.roleName = @"your_role_name";
role.roleLevel = 11;
role.serverId = @"your_server_id";
[XDGSDK trackRole:role];
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);
商店评分
- Android
- iOS
- Unity
// MainActivity.java
import com.xd.sdk.common.XDGCommon;
// ...
private void storeReview() {
XDGCommon.storeReview(MainActivity.this);
}
#import <XDCommonSDK/XDCommonSDK.h>
[XDGSDK storeReview];
using XD.SDK.Common;
XDGCommon.StoreReview();
Web 活动页面
提前静默预载资源
想加快玩家打开网页的加载速度且网页制作方提供了匹配的页面预载地址时,游戏可以在适当的时机提前调用该接口进行页面预载。预载过程不可见,只在后台静默完成。
预载会加载各平台的 webview 内核,会提高内存占用,预载结束后 SDK 会进行相关资源回收,但系统不一定会及时回收内存,请游戏按需使用该接口。
- Android
- iOS
- Unity
// MainActivity.java
import com.xd.sdk.common.XDGCommon;
// ...
private void preloadWebPage() {
String preloadUrl = "https://www.xindong.com";
XDGCommon.preloadWebPage(MainActivity.this, preloadUrl);
}
#import <XDCommonSDK/XDCommonSDK.h>
[XDGSDK preloadWebPageWithURL:@"https://预载页面地址"];
using XD.SDK.Common;
XDGCommon.PreloadWebPage("https://预载页面地址");
打开活动页面
该接口能打开一个活动网页,并支持一些类型的回调,比如网页想要传递数据给游戏或者网页已经被关闭了,方便游戏处理相关事项。
和预载一样,网页关闭后 SDK 会进行相关资源回收,但系统不一定会及时回收内存。
- Android
- iOS
- Unity
// PaymentActivity.java
import com.xd.sdk.common.XDGCommon;
import com.xd.sdk.common.callback.WebActionCallback;
import com.xd.sdk.common.entities.WebActionType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
// ...
private void openWebPage() {
String activityUrl = "https://www.xindong.com";
XDGCommon.openWebPage(PaymentActivity.this, activityUrl, new WebActionCallback() {
@Override
public void onAction(int type, @Nullable Map<@NotNull String, ?> data) {
if (type == WebActionType.CLOSE) {
// 网页关闭
} else if (type == WebActionType.MESSAGE) {
// 网页透传信息
if (data != null) {
Object value = data.get("key");
}
}
}
});
}
#import <XDCommonSDK/XDCommonSDK.h>
[XDGSDK openWebPageWithURL:@"https://活动页面地址" handler:^(XDGWebAction actionType, NSDictionary * _Nullable data) {
if (actionType == XDGWebActionCloseWeb) {
// 网页关闭
} else if (actionType == XDGWebActionMessage) {
// 网页透传消息
NSLog(@"网页透传消息 %@", data);
}
}];
using XD.SDK.Common;
XDGCommon.OpenWebPage("url", (actionType, objects) =>
{
// objects 是透传数据,在各个事件中均可能携带
if (actionType == WebActionEnum.CLOSE)
{
// 关闭网页
} else if (actionType == WebActionEnum.MESSAGE)
{
// 透传数据,具体数据内容根据和网页的约定而定
}
});
启用 Apple Game Center
-
开启 entitlements 配置
- iOS 原生接入请在 XCode 工程中 App Targets 的 Signing & Capabilities 下添加 Game Center 权限。
- Unity SDK 请参考接入配置 添加 Game Center 权限。
-
确认接入情况
更新并配置完成后运行时 SDK 完成初始化后会自动弹出 Game Center 登录页面或者顶部提示 “欢迎回来 xxx” 的冒泡提示即表示接入成功。如果没有提示请在系统设置的 Game Center 页面确认是否启用并已登录有效账户。如若开启后仍然无法使用,请联系平台同事确认日志。