lagged-js-sdk

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Lagged JavaScript SDK

Lagged JavaScript SDK

window.LaggedAPI
is exposed after its loader script finishes. Initialization, player lookup, ads, leaderboards and achievements all hang off
LaggedAPI
.
加载脚本执行完毕后,系统会公开
window.LaggedAPI
。初始化、玩家查询、广告、排行榜和成就均通过
LaggedAPI
提供。

Overview

概览

Supported features: initialization handshake, player profile lookup, interstitial ads, rewarded ads, leaderboard score submission, and achievement unlocks.
支持的功能:初始化握手、玩家资料查询、插页广告、激励广告、排行榜分数提交和成就解锁。

Integration Checklist

集成检查清单

  1. Load SDK — inject
    lagged.js
    and wait for
    window.LaggedAPI
  2. Init with credentials — call
    sdk.init(devId, publisherId)
    with ids from the Lagged dashboard
  3. Check player auth — call
    sdk.User.get
    ;
    id > 0
    means signed-in,
    id = 0
    means guest
  4. Wire ads at scene transitions — show interstitials between levels; gate rewarded ads on player action
  5. Submit scores on game over — call
    sdk.Scores.save
    with the board id and final score
  6. Unlock achievements — call
    sdk.Achievements.save
    when criteria are met
  1. 加载 SDK——注入
    lagged.js
    并等待
    window.LaggedAPI
  2. 使用凭据初始化——使用 Lagged 控制台中的 id 调用
    sdk.init(devId, publisherId)
  3. 检查玩家身份验证——调用
    sdk.User.get
    ;
    id > 0
    表示已登录,
    id = 0
    表示访客
  4. 在场景切换时接入广告——在关卡之间展示插页广告;由玩家操作触发激励广告
  5. 在游戏结束时提交分数——使用榜单 id 和最终分数调用
    sdk.Scores.save
  6. 解锁成就——满足条件时调用
    sdk.Achievements.save

Installation

安装

The SDK URL is
https://lagged.com/api/rev-share/lagged.js
. Dynamically inject the script tag, then poll for
window.LaggedAPI
before proceeding.
javascript
const SDK_URL = 'https://lagged.com/api/rev-share/lagged.js';

async function loadLaggedSDK(timeoutMs = 10000) {
    await new Promise((resolve, reject) => {
        const s = Object.assign(document.createElement('script'), {
            src: SDK_URL,
            async: true,
            onload: resolve,
            onerror: () => reject(new Error('Failed to load Lagged SDK'))
        });
        document.head.appendChild(s);
    });
    const started = Date.now();
    while (typeof window.LaggedAPI === 'undefined') {
        if (Date.now() - started > timeoutMs)
            throw new Error('LaggedAPI did not appear within ' + timeoutMs + 'ms');
        await new Promise((r) => setTimeout(r, 50));
    }
    return window.LaggedAPI;
}
SDK URL 为
https://lagged.com/api/rev-share/lagged.js
。动态注入 script 标签,然后轮询
window.LaggedAPI
,待其可用后再继续操作。
javascript
const SDK_URL = 'https://lagged.com/api/rev-share/lagged.js';

async function loadLaggedSDK(timeoutMs = 10000) {
    await new Promise((resolve, reject) => {
        const s = Object.assign(document.createElement('script'), {
            src: SDK_URL,
            async: true,
            onload: resolve,
            onerror: () => reject(new Error('Failed to load Lagged SDK'))
        });
        document.head.appendChild(s);
    });
    const started = Date.now();
    while (typeof window.LaggedAPI === 'undefined') {
        if (Date.now() - started > timeoutMs)
            throw new Error('LaggedAPI did not appear within ' + timeoutMs + 'ms');
        await new Promise((r) => setTimeout(r, 50));
    }
    return window.LaggedAPI;
}

Initialization

初始化

LaggedAPI.init
requires both a developer id and a publisher id from the Lagged dashboard. Right after
init
, query the current player to read their id, name and avatar.
Wrap
initLagged
in a try/catch at the call site — on failure, disable leaderboard, achievement and ad calls so the game remains playable without SDK support.
javascript
async function initLagged(devId, publisherId) {
    if (!devId || !publisherId) throw new Error('devId and publisherId are required');

    const sdk = await loadLaggedSDK();
    sdk.init(devId, publisherId);

    const player = await new Promise((resolve) => {
        sdk.User.get((response) => {
            resolve(response && response.user ? response.user : {});
        });
    });

    // id > 0 = signed-in player; id = 0 = guest
    const profile = {
        isAuthorized: player.id > 0,
        id: player.id || null,
        name: player.name || null,
        avatar: player.avatar || null
    };

    console.debug('[Lagged] init complete', profile);
    return { sdk, profile };
}
LaggedAPI.init
需要提供 Lagged 控制台中的 developer id 和 publisher id。执行
init
后,立即查询当前玩家以读取其 id、name 和 avatar。
在调用处使用 try/catch 包裹
initLagged
——失败时,禁用排行榜、成就和广告调用,确保游戏在没有 SDK 支持的情况下仍可正常游玩。
javascript
async function initLagged(devId, publisherId) {
    if (!devId || !publisherId) throw new Error('devId and publisherId are required');

    const sdk = await loadLaggedSDK();
    sdk.init(devId, publisherId);

    const player = await new Promise((resolve) => {
        sdk.User.get((response) => {
            resolve(response && response.user ? response.user : {});
        });
    });

    // id > 0 = signed-in player; id = 0 = guest
    const profile = {
        isAuthorized: player.id > 0,
        id: player.id || null,
        name: player.name || null,
        avatar: player.avatar || null
    };

    console.debug('[Lagged] init complete', profile);
    return { sdk, profile };
}

Player

玩家

Player data is read once during initialization via
LaggedAPI.User.get(callback)
. The callback receives
{ user: { id, name, avatar } }
. The full retrieval logic is demonstrated in the
initLagged
function above. If you need a guest fallback, generate a local id and persist it in
localStorage
.
玩家数据在初始化期间通过
LaggedAPI.User.get(callback)
读取一次。回调接收
{ user: { id, name, avatar } }
。上述
initLagged
函数演示了完整的数据获取逻辑。如果需要为访客提供回退方案,请生成本地 id 并将其持久化到
localStorage
中。

Advertisement

广告

Interstitial

插页广告

LaggedAPI.APIAds.show(onClosed)
displays an interstitial. Pause simulation and mute audio before the call; resume in
onClosed
.
javascript
function showInterstitial(sdk, { onOpened, onClosed } = {}) {
    onOpened?.();
    sdk.APIAds.show(() => {
        onClosed?.();
    });
}
LaggedAPI.APIAds.show(onClosed)
用于显示插页广告。调用前应暂停模拟并静音;在
onClosed
中恢复。
javascript
function showInterstitial(sdk, { onOpened, onClosed } = {}) {
    onOpened?.();
    sdk.APIAds.show(() => {
        onClosed?.();
    });
}

Rewarded

激励广告

LaggedAPI.GEvents.reward(canShowReward, rewardSuccess)
runs a two-phase rewarded ad:
  1. canShowReward(success, showAdFn)
    — if
    success
    is
    true
    , call
    showAdFn()
    to display the ad; otherwise surface a fallback.
  2. rewardSuccess(success)
    —
    true
    means the player earned the reward;
    false
    means dismissed early or failed.
javascript
function showRewarded(sdk, { onOpened, onRewarded, onClosed, onFailed } = {}) {
    onOpened?.();
    sdk.GEvents.reward(
        (success, showAdFn) => {
            if (success) showAdFn();
            else onFailed?.('unavailable');
        },
        (success) => {
            if (success) {
                onRewarded?.();
                onClosed?.();
            } else onFailed?.('not_completed');
        }
    );
}
LaggedAPI.GEvents.reward(canShowReward, rewardSuccess)
用于运行两阶段激励广告:
  1. canShowReward(success, showAdFn)
    ——如果
    success
    为
    true
    ,调用
    showAdFn()
    展示广告;否则提供回退方案。
  2. rewardSuccess(success)
    ——
    true
    表示玩家已获得奖励;
    false
    表示玩家提前关闭广告或广告播放失败。
javascript
function showRewarded(sdk, { onOpened, onRewarded, onClosed, onFailed } = {}) {
    onOpened?.();
    sdk.GEvents.reward(
        (success, showAdFn) => {
            if (success) showAdFn();
            else onFailed?.('unavailable');
        },
        (success) => {
            if (success) {
                onRewarded?.();
                onClosed?.();
            } else onFailed?.('not_completed');
        }
    );
}

Leaderboards

排行榜

Each board is identified by a string id configured on the Lagged dashboard. There is no API to fetch entries or open a native popup.
javascript
function submitScore(sdk, boardId, score) {
    return new Promise((resolve, reject) => {
        sdk.Scores.save({ score, board: boardId }, (response) => {
            if (response && response.success) resolve(response);
            else reject((response && response.errormsg) || 'leaderboard_failed');
        });
    });
}
每个榜单均由 Lagged 控制台中配置的字符串 id 标识。没有可用于获取榜单条目或打开原生弹窗的 API。
javascript
function submitScore(sdk, boardId, score) {
    return new Promise((resolve, reject) => {
        sdk.Scores.save({ score, board: boardId }, (response) => {
            if (response && response.success) resolve(response);
            else reject((response && response.errormsg) || 'leaderboard_failed');
        });
    });
}

Achievements

成就

LaggedAPI.Achievements.save(achievements, callback)
unlocks one or many achievements in a single call. Display state is owned by Lagged — there is no list/get API.
javascript
function unlockAchievement(sdk, achievement) {
    if (!achievement) return Promise.reject(new Error('achievement is required'));
    return new Promise((resolve, reject) => {
        const payload = Array.isArray(achievement) ? achievement : [achievement];
        sdk.Achievements.save(payload, (response) => {
            if (response && response.success) resolve(response);
            else reject((response && response.errormsg) || 'achievement_failed');
        });
    });
}
LaggedAPI.Achievements.save(achievements, callback)
可在一次调用中解锁一个或多个成就。显示状态由 Lagged 管理——没有 list/get API。
javascript
function unlockAchievement(sdk, achievement) {
    if (!achievement) return Promise.reject(new Error('achievement is required'));
    return new Promise((resolve, reject) => {
        const payload = Array.isArray(achievement) ? achievement : [achievement];
        sdk.Achievements.save(payload, (response) => {
            if (response && response.success) resolve(response);
            else reject((response && response.errormsg) || 'achievement_failed');
        });
    });
}