서버 시간
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 사용과 관련하여 문제가 발생하거나 질문이 있는 경우 다음 방법으로 지원팀에 문의하세요.
Copied