主题
游戏引擎-LayaAir(多实例) 
信息
LayaAir SDK 支持平台:Web、微信小游戏、字节跳动小游戏、OPPO 小游戏、华为快游戏、vivo 小游戏、小米快游戏、QQ 小游戏、百度小游戏、B 站小游戏。
一、集成 SDK 
下载并解压 LayaAir SDK
1.1、TypeScript 集成步骤如下 
信息
a、将声明文件 YXDataMoreSDK.laya.d.ts 放入 libs 目录
b、将 SDK 文件 YXDataMoreSDK.laya.min.js 放入 bin/js 目录中
javascript
// 在加载 bundle.js 之前加载 YXData SDK
loadLib("js/YXDataMoreSDK.laya.min.js");
loadLib("js/bundle.js");1.2、JavaScript 集成步骤如下 
如果您的项目是 JavaScript 工程,您可以直接将 SDK 文件 YXDataMoreSDK.laya.min.js 放入 您的工程中,在源码中引用:
javascript
import YXDataMoreSDK from "./YXDataMoreSDK.laya.min";二、设置或获取设备号 
信息
为了做到设备号唯一,在初始化之前接入方可以从 YXDataSDK 设置或获取设备号,如果不需要则可可以忽略设置,初始化 SDK 之前如果没有设置设备号,那么 SDK 会自动生成设备号用于后期埋点事件上报
2.1、设置设备号 
javascript
YXDataMoreSDK.getInstance("YOUR_APPID").setDeviceId("YOUR_DEVICEID");2.3、从 YXDataMoreSDK 获取设备号 
javascript
const device_id = YXDataMoreSDK.getInstance("YOUR_APPID").getSDKDeviceId();三、SDK 初始化操作 
3.1、SDK 初始化 
javascript
var config = {
  appid: "YOUR_APPID", //项目APP ID
  app_server: "YOUR_SERVER", //服务器标识
};
//sdk初始化
//模式一:
YXDataSDK.getInstance("YOUR_APPID").init(config);
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .init(config)
  .then(() => {
    //初始化成功
  })
  .catch((err) => {
    //console.log("初始化失败:",err);
  });| 参数名 | 类型 | 是否必传 | 描述 | 
|---|---|---|---|
| appid | string | 项目 APP ID(YXData平台申请) | |
| app_server | string | 否 | 服务器标识,单一服可传空值 | 
危险
 
四、常用功能 
4.1、设置账号 ID 
在用户产生登录行为时,可调用 login 来设置用户的账号 ID. YXData 平台优先以账号 ID 作为身份标识,设置后的账号 ID 将会被保存,多次调用 login 将会覆盖先前的账号 ID.
示例:
javascript
// 用户的登录唯一标识.
// 此数据对应上报数据里的 ys_account_id,此时ys_account_id的值为YXData
//模式一:
YXDataSDK.getInstance("YOUR_APPID").login("YXData"); //传值字符串类型,非空值
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .login("YXData")
  .then(() => {
    //设置成功
  })
  .catch((err) => {
    //console.log("设置失败:",err);
  });4.2、自定义公共事件属性 
信息
公共事件属性指的就是每个事件都会带有的属性,您可以调用 setSuperProperties 来设置公共事件属性,我们推荐您在发送事件前,先设置公共事件属性。对于一些重要的属性,譬如用户的会员等级等,这些属性需要设置在每个事件中,此时您可以将这些属性设置为公共事件属性。
1、如果调用 setSuperProperties 上传了先前已设置过的公共事件属性,则会覆盖之前的属性 
 2、Key 为该属性的名称,为字符串类型,规定只能以字母开头包含(数字/字母/下划线 "_"),长度最大为 50 个字符
 3、Value 为该属性的值,支持字符串、数字、布尔、对象、对象组、数组
4.2.1、设置公共事件属性 
示例:
javascript
var superProperties = {
  str: "str", //字符串
  age: 1, //数字
  isSuccess: true, //布尔
  object: { key: "value" }, //对象
  object_arr: [{ key: "value" }], //对象组
  arr: ["value"], //数组
};
//模式一:
YXDataSDK.getInstance("YOUR_APPID").setSuperProperties(superProperties); //设置公共事件属性
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .setSuperProperties(superProperties)
  .then(() => {
    //设置成功
  })
  .catch((err) => {
    //console.log("设置失败:",err);
  });4.2.2、删除公共事件属性 
示例:
javascript
var key_name = "str"; //需要删除的键名称
//模式一:
YXDataSDK.getInstance("YOUR_APPID").delSuperPropertyByName(key_name); //删除单个公共事件属性
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .delSuperPropertyByName(key_name)
  .then(() => {
    //成功
  })
  .catch((err) => {
    //console.log("失败:",err);
  });4.3、发送事件 
在 SDK 初始化完成之后,您就可以进行数据埋点,收集用户的的行为信息。一般情况下普通事件即可满足业务场景需求,您也可以根据自己的实际业务场景使用首次、可更新等事件。
4.3.1、普通事件 
信息
- 事件的名称(eventname)是字符串类型,只能以字母开头,可包含数字,字母和下划线 "",长度最大为 50 个字符。
- 自定义属性(properties)是 json 对象类型,对象里面的属性值支持字符串、数字、布尔、对象、对象组、数组 类型
您可以直接调用 eventReport 上传自定义事件,建议您根据先前梳理的埋点文档来设置事件的属性以及发送信息的条件,此处以用户选择服务器作为范例:
javascript
var data_json = {
  event_name: "select_server", //事件名称
  properties: {
    guid: 1000, //自定义属性,选择的大区ID
  },
};
//模式一:
YXDataSDK.getInstance("YOUR_APPID").eventReport(data_json);
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .eventReport(data_json)
  .then(() => {
    //成功
  })
  .catch((err) => {
    //console.log("失败:",err);
  });4.3.2、首次事件 
首次事件是指针对某个设备或者其他维度的 ID,只会记录一次的事件。您可以使用属性赋值进行控制,例如在一些场景下,您可能希望记录在某个设备上的激活事件。示例如下:
javascript
var data_json = {
  event_name: "active", //事件名称
  is_first_event: true, //是否首次事件,true=首次事件
  properties: {
    //自定义事件属性(可选)
    guid: 1000, //自定义属性,选择的大区ID
  },
};
//模式一:
YXDataSDK.getInstance("YOUR_APPID").eventReport(data_json);
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .eventReport(data_json)
  .then(() => {
    //成功
  })
  .catch((err) => {
    //console.log("失败:",err);
  });提示
4.4、设置用户属性及修改属性值 
您可以使用接口进行设置、修改用户属性、或有值存在时忽略设置。
用户属性名称(name)允许字符:英文字母及下划线,长度为最大 50 个字符 属性值(value)允许类型:数值、字符串、布尔、列表、浮点数、对象、对象组
以下为设置用户属性“金币”值是 100(数值类型)为例如下:
javascript
var set_json = {
  name: "amount",
  value: 100,
};
//模式一:
YXDataSDK.getInstance("YOUR_APPID").configAccountProperty(set_json);
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .configAccountProperty(set_json)
  .then(() => {
    //成功
  })
  .catch((err) => {
    //console.log("失败:",err);
  });| 参数名 | 类型 | 是否必传 | 描述 | 
|---|---|---|---|
| name | string | 属性名称 | |
| value | any | 属性值(允许类型:数值、字符串、布尔、列表、浮点数、对象、对象组) | |
| opt | number | 否 | 1:设置属性(默认)、2:修改值、3:属性值存在则忽略 | 
若需要忽略操作有值的用户属性您可以使用赋值进行控制;比如我们希望用户首次登录时间只记录第一次上报的时间,后期不在改变为例如下:
javascript
var set_json = {
  name: "first_login_time",
  value: "2025-02-01 10:32:00",
  opt: 3, //此时opt为必传值3,入库时有值则忽略本次操作
};
//模式一:
YXDataSDK.getInstance("YOUR_APPID").configAccountProperty(set_json);
//模式二:
YXDataSDK.getInstance("YOUR_APPID")
  .configAccountProperty(set_json)
  .then(() => {
    //成功
  })
  .catch((err) => {
    //console.log("失败:",err);
  });五、最佳实践 
javascript
const sdk1 = YXDataMoreSDK.getInstance("YOUR_APPID_1");
const sdk2 = YXDataMoreSDK.getInstance("YOUR_APPID_2");
//初始化示例:
// sdk1.init({ appid: "YOUR_APPID_1" });
// sdk2.init({ appid: "YOUR_APPID_2" });
sdk1.init({ appid: "APPID1", app_secret: "secret_key1" });
sdk2.init({ appid: "APPID2", app_secret: "secret_key2" });
//发送事件示例:
sdk1.eventReport({
  event_name: "select_server", //事件名称
  properties: {
    guid: 1000, //自定义属性,选择的大区ID
  },
});
sdk2.eventReport({
  event_name: "select_server", //事件名称
  properties: {
    guid: 1000, //自定义属性,选择的大区ID
  },
});