서버 시간

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 Games에 게시하는 데 도움을 드릴 수 있습니다. 개발이나 테스트에 대해 궁금한 점이 있다면, Discord 채널에서 질문해 주세요.

지원 서비스는 얀덱스 게임에서 완성 된 게임을 게시 할 수 있습니다. 개발 또는 테스트에 대한 질문이 있는 경우

Yandex Games SDK 사용과 관련하여 문제가 발생하거나 질문이 있는 경우 다음 방법으로 지원팀에 문의하세요.

채팅 상담