서버 시간
Yandex Games SDK는 서버와 동기화된 시간을 얻을 수 있는 기능을 제공합니다. 이 방법은 다음과 같은 경우에 유용합니다:
- 조작 방지: 사용자가 자신의 기기에서 시간을 변경하여 게임 과정에 영향을 미치는 것을 방지합니다.
- 게임 이벤트: 신뢰할 수 있는 시간 출처가 중요한 활동과 보상을 추가할 수 있습니다. 예를 들어: 매일 또는 매주 보너스, 계절 이벤트 및 퀘스트 등입니다.
ysdk.serverTime()
이 메서드는 timestamp, 즉 모든 기기에서 동일한 서버 시간(밀리초 단위)을 반환합니다. 이는 Date.now() 결과 형식과 비슷하지만 후자는 사용자 기기의 시간을 반환하며, 이는 서버 시간과 다를 수 있고 플레이어의 조작으로부터 보호되지 않습니다. ysdk.serverTime() 메서드는 코드를 통해 재정의하거나 변경할 수 없으므로 더 신뢰성이 높습니다.
항상 정확한 시간이 필요할 때 이를 호출하십시오.
await 사용
await 없는 버전
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 사용과 관련하여 문제가 발생하거나 질문이 있는 경우 다음 방법으로 지원팀에 문의하세요.