You need to enable JavaScript to run this app.
导航
SDK集成场景实践
最近更新时间:2025.05.28 11:39:25首次发布时间:2025.05.28 11:39:25
我的收藏
有用
有用
无用
无用

user_unique_id相关

用户登录态设置

比如业务有账号体系,并希望SDK同步用户状态。就可以考虑在用户登录后立即对SDK设置user_unique_id,在用户登出后立即对SDK清除user_unique_id。

说明

提示:用户登录态概念是站在业务角度的一个说法,SDK本身是没有用户登录/登出概念的,SDK只关心user_unique_id是否有被主动设置。

import $$sdk from '@datarangers/sdk-qg';
$$sdk.init({
    // ...
});
$$sdk.send();

// 用户登录后立即设置user_unique_id
$$sdk.config({
    user_unique_id: '{{uuid}}', // 值可以考虑为能关联到用户的一些属性
});

// 用户登出后立即清除user_unique_id
$$sdk.config({
    user_unique_id: '',
});

使用openid/unionid设置为登录用户

此场景下,您需要先获取openid/unionid(通常这些id需为业务的服务端携带code向小游戏开放平台接口,比如code2Session,发起请求,换取openid、unionid、session_key等信息),然后使用config或setUserUniqueID方法设置给SDK。
下面以微信小游戏平台举例:

import Main from './js/main';
import $$sdk from '@datarangers/sdk-qg';
$$sdk.init({
    // ...
});
$$sdk.send();

wx.login({
    success(res) {
        if (res.code) {
            wx.request({
                url: 'https://xxxxxx.com/', // 业务自身的服务端接口,去请求小游戏开放平台接口换取openid/unionid的
                data: {
                    code: res.code,
                },
                success(res) {
                    // 希望使用openid设置user_unique_id
                    if(res.openid) {
                        $$sdk.config({
                            user_unique_id: res.openid,
                        });
                    }
                    
                    // 或者希望使用unionid设置user_unique_id
                    if(res.unionid) {
                        $$sdk.config({
                            user_unique_id: res.unionid,
                        });
                    }
                }
            });
        }
    }
});

new Main();

web_id、ssid相关

获取SDK默认生成的web_id、ssid

SDK会为您自动生成web_id、ssid,如果您希望获取SDK默认生成的这些id,可参考以下方式。
获取web_id

import $$sdk from '@datarangers/sdk-qg';
$$sdk.init({
    // ...
});
$$sdk.send();

$$sdk.on($$sdk.types.Ready, () => {
    const webid = $$sdk.getConfig('web_id');
    console.log('web_id', webid);
});

获取ssid

注意:获取ssid时,实际需要调用getToken获取到ssid,该方法会发起请求去DataFinder的数据流服务中获取ssid,ssid不在SDK侧进行管理。

import $$sdk from '@datarangers/sdk-qg';
$$sdk.init({
    // ...
});
$$sdk.send();

$$sdk.getToken().then((ids) => {
    const ssid = ids.ssid;
    console.log('ssid', ssid);
});

事件公共属性

设置事件公共属性

使用config方法可以设置公共属性,这些公共属性会在后续所有事件上报都携带上。

import $$sdk from '@datarangers/sdk-qg';
$$sdk.init({
    // ...
});
$$sdk.send();

// 设置事件公共属性,这些公共属性会在后续所有事件上报时都携带上
$$sdk.config({
    city: '南京',
    nick_name: 'vikings',
});

SDK内部预设了一些公共属性字段,这些字段预定义好了字段名,如下表所列,其中部分字段,SDK在初始化完成后会自动尝试获取,而其他字段需要业务方设置,比如nick_namegenderavatar_url这些SDK无法自动获取到的,就需要您主动进行设置。

字段

类型

说明

是否自动设置

举例

device_brand

string

设备品牌

自动

"iPhone"

device_model

string

设备型号

自动

"iPhone 7"

os_name

string

客户端系统

自动

"ios"

os_version

string

客户端/操作系统版本

自动

"iOS 10.0.1"

screen_width

number

屏幕宽度

自动

375

screen_height

number

屏幕高度

自动

812

resolution

string

屏幕分辨率

自动

"375x812"

access

string

网络类型

自动

"wifi"

language

string

系统语言

自动

"zh_CN"

app_version

string

业务小游戏版本

自动

"2.5.0"

device_id

number

设备id

业务方设置

67834512

nick_name

string

昵称

业务方设置

"张三"

gender

string

性别

业务方设置

"male"

avatar_url

string

头像

业务方设置

"https://xxx"

timezone

number

时区

业务方设置

8

tz_offset

number

时区偏移

业务方设置

-28800

应用实例相关

使用多实例

使用多实例,需要导入SDK类,即SDK构造器,位于SDK包中的esm目录下的sdk文件。

import SDK from '@datarangers/sdk-qg/esm/sdk';

提示,如下方式导入的是SDK的默认实例,非SDK构造器。注意观察导入的文件是不一样的。

import $$sdk from '@datarangers/sdk-qg';

示例:

import SDK from '@datarangers/sdk-qg/esm/sdk';

// 对构造器使用new操作产生实例1
$$sdk1 = new SDK();
$$sdk1.init({
    app_id: 1,
    // ...
});
$$sdk1.send();

// 对构造器使用new操作产生实例2
$$sdk2 = new SDK();
$$sdk2.init({
    app_id: 2, // app_id不能与其他实例相同
    // ...
});
$$sdk2.send();

说明

提示:

  • 不同实例的app_id要求不能相同。
  • 当前仅SaaS-云原生环境、私有化环境支持多应用能力,SaaS-非云原生环境不支持。使用前,您需联系火山引擎技术支持人员开启功能开关并在DataFinder的项目中绑定多个应用,多应用的端到端操作指导请参见使用多应用

自定义选择内部插件

SDK默认导出的实例包含了尽可能多的插件功能。使用自定义选择插件后,比起默认导出的实例在构建后的体积上会少一些。如果业务希望自定义选择使用哪些插件,可以考虑如下使用方式。

  1. 首先导入SDK基础类文件:esm/base.js
  2. 再根据需要导入相应的插件文件:esm/plugin/xxx.js
  3. 将插件注册到SDK基础类:使用SDK类的usePlugin静态方法
  4. 然后实例化SDK,接着再进行初始化设置
// 导入基础类
import BaseSDK from '@datarangers/sdk-qg/esm/base';

// 导入所需插件,比如AB实验插件
import Ab from '@datarangers/sdk-qg/esm/plugin/ab';
BaseSDK.usePlugin(Ab);

// 实例化SDK
const $$sdk = new BaseSDK();
$$sdk.init({
    app_id: 1, // 替换成申请的app_id
    enable_ab_test: true,//开启ab实验
});
$$sdk.send();

说明

提示:
import $$sdk from '@datarangers/sdk-qg'$$sdk是默认生成的一个实例。
import SDK from '@datarangers/sdk-qg/esm/sdk'SDK是类构造器,包含几乎全部功能,上面的$$sdk本质上就是执行new SDK()
import BaseSDK from '@datarangers/sdk-qg/esm/base'BaseSDK也是类构造器,包含最基本功能,其他一些功能需要配合相应插件才可以,插件需要使用usePlugin进行注册。上面SDK相比BaseSDK本质上就是默认注册了几乎大部分插件。

小游戏单一平台使用方式

SDK默认导出的实例尽可能的兼容目前主流的小游戏平台,比如微信、抖音、百度、QQ、快游戏等。如果业务明确自己的小游戏应用只会发布到某一平台,比如微信,可以考虑使用如下方式,明确选择哪个平台的入口文件。需要注意的是,单一的平台入口文件只包含基础的功能,使用更多能力需要主动导入相应插件并注册。

// 导入明确的某个小游戏平台入口文件
import WXSDK from '@datarangers/sdk-mp/esm/wx';

// 导入所需插件,比如AB实验插件
import Ab from '@datarangers/sdk-mp/esm/plugin/ab';
WXSDK.usePlugin(Ab);

// 实例化SDK
const $$sdk = new WXSDK();
$$sdk.init({
    app_id: 1, // 替换成申请的app_id
    enable_ab_test: true,//开启ab实验
});
$$sdk.send();

说明

提示:
在SDK包内,esm这个目录下有wx.js、tt.js、qq.js等等这些文件,代表的就是某一平台入口

UTM相关

UTM追踪

SDK默认会尝试从小游戏启动参数上获取utm相关参数:utm_sourceutm_mediumutm_campaignutm_termutm_content。如果获取到了,就将这些参数放入事件公共属性中,后续所有事件上报时都会携带上。该能力自动开启,业务不需要做任何处理。

其他场景实践

在特殊环境下使用方式

如果业务项目由于一些原因不支持使用npm包、或第三方依赖、甚至没有构建打包处理过程,可以考虑使用SDK提供的umd模块文件。

  • 复制SDK包内的index.umd.js文件到项目下
const $$sdk = require('{{相对路径}}/index.umd.js');
$$sdk.init({
    // ...
});
$$sdk.send();