服务器时间

Yandex Games SDK 允许获取与服务器同步的时间。这个方法对于以下场景非常有用:

  • 防止作弊:用户无法通过更改设备上的时间来影响游戏过程。
  • 游戏事件:您可以基于此添加活动和奖励,对于这些活动和奖励,一个可靠的时间来源非常重要,例如:每日或每周奖励、季节性事件和任务。

ysdk.serverTime()

该方法返回一个 timestamp,即以毫秒为单位的服务器时间,对所有设备来说都是一致的。它类似于 Date.now() 的结果格式,但后者返回的是用户设备的时间,可能与服务器时间不同,且不能防止玩家的作弊行为。ysdk.serverTime() 方法能够有效防止设备系统时间被人为篡改,因此更加可靠。

每当您需要获取当前时间时,就调用它。

const ysdk = await YaGames.init();

  // 返回与服务器同步的毫秒时间。
  ysdk.serverTime(); // 例如,1720613073778。

  // 一段时间后再次调用。
  ysdk.serverTime(); // 例如,1720613132635。
YaGames.init().then(ysdk => {

    // 返回与服务器同步的时间(以毫秒为单位)。
    ysdk.serverTime(); // 例如,1720613073778。

    // 一段时间后再次调用。
    ysdk.serverTime(); // 例如,1720613132635。
});

每日奖励实现示例

  • 使用 ysdk.serverTime() 获取可靠的服务器时间。
  • 通过 player.setData() 保存数据。
  • 实现了防止重复领取奖励的保护机制。
  • 以安全的方式对时间进行比较。

重要

示例中的 giveReward() 函数是你自行实现的,负责发放玩家奖励。

距上次登录游戏后24小时获得奖励

YaGames.init().then(async ysdk => {
    // 初始化玩家。
    const player = await ysdk.getPlayer();

    // 获取已保存的数据。
    const data = await player.getData();

    // 当前服务器时间。
    const currentTime = ysdk.serverTime();

    // 上次领取奖励的时间(如果没有,则使用0)。
    const lastRewardTime = data.lastRewardTime || 0;

    // 24小时的毫秒数。
    const DAY_IN_MS = 24 * 60 * 60 * 1000;

    if (currentTime - lastRewardTime >= DAY_IN_MS) {
        // 已经过了24小时,可以发放奖励。
        await giveReward(); // 您的奖励发放函数。

        // 保存新的领奖时间。
        await player.setData({
            lastRewardTime: currentTime
        });
    }
});

奖励每天(UTC时间午夜重置一次)

YaGames.init().then(async ysdk => {
    // 初始化玩家。
    const player = await ysdk.getPlayer();

    // 获取已保存的数据。
    const data = await player.getData();

    // 当前服务器时间。
    const currentTime = ysdk.serverTime();

    // 获取上次领奖日期,格式为 "YYYY-MM-DD"。
    const lastRewardDate = data.lastRewardDate || '';

    // 获取当前日期,格式为 "YYYY-MM-DD"。
    const currentDate = new Date(currentTime).toISOString().split('T')[0];

    if (currentDate !== lastRewardDate) {
        // 今天还没有领取奖励。
        await giveReward(); // 您的奖励发放函数。

        // 保存领奖日期。
        await player.setData({
            lastRewardDate: currentDate
        });
    }
});

备注

技术支持团队将协助您将已完成的游戏发布到 Yandex 游戏平台。关于开发和测试方面的具体问题,其他开发人员将在Discord 频道中进行回答。

如果您遇到 Yandex Games SDK 方面的问题或有其他问题想要咨询,请联系支持部门:

发送电子邮件
上一篇
下一篇