플레이어 데이터
게임 상태 데이터(완료한 레벨, 경험치, 게임 내 구매 포함)를 Yandex 서버에 저장하거나 내 서버로 전송할 수 있습니다. 사용자의 이름과 같은 Yandex 프로필의 데이터를 사용하여 게임을 개인화할 수도 있습니다.
Player
객체는 사용자 데이터 작업에 사용됩니다.
초기화
Player
객체를 초기화하려면 ysdk.getPlayer()
메서드를 사용합니다.
var player;
ysdk.getPlayer().then(_player => {
player = _player;
}).catch(err => {
// 플레이어 객체를 초기화하는 동안 오류가 발생했습니다.
});
Player
객체를 초기화할 때 다음과 같은 정보가 전달됩니다:
- 모든 사용자에게 — 사용자 ID
- 인증된 플레이어에게 — 아바타와 이름
- 러시아 연방의 플레이어이며 인앱 구매가 있는 게임의 경우 — 플랫폼에서의 구매 내역
사용자 데이터 접근 권한은 프로필 설정에 따라 달라집니다. 사용자가 개인 데이터 접근을 차단한 경우 응답에는 ID만 포함됩니다.
선택적 signed: true
파라미터와 fetch
메서드를 사용하여 사용자를 로그인하고 게임 상태 데이터를 서버에 저장할 수 있습니다. 이렇게 하면 서명을 사용하여 플레이어를 인증하고 사기 가능성을 방지할 수 있습니다.
var player;
ysdk.getPlayer({ signed: true }).then(_player => {
player = _player;
// 서버에서 인증을 위해 player.signature를 사용하세요.
fetch('https://your.game.server?auth', {
method: 'POST',
headers: { 'Content-Type': 'text/plain' },
body: player.signature
});
}).catch(err => {
// 플레이어 객체를 초기화하는 동안 오류가 발생했습니다.
});
서버로 전송되는 요청의 signature
파라미터에는 Yandex 프로필의 사용자 데이터와 서명이 포함됩니다. 두 개의 Base64로 인코딩된 문자열로 구성됩니다:
<signature>.<profile data>
자세한 내용은 사기 방지를 참조하세요.
참고
요청은 5분에 20번을 초과하여 보낼 수 없으며, 그렇지 않으면 오류와 함께 거부됩니다.
사용자 로그인
사용자 로그인 여부 확인하기
플레이어가 Yandex Games에 로그인했는지 확인하려면 Player
객체의 메서드인 player.isAuthorized()
를 사용하세요. 이 메서드는 true
또는 false
를 반환합니다.
제한
player.getMode(): 'lite' | ''
메서드는 더 이상 사용되지 않으며 향후 인터페이스에서 제거될 예정입니다.
로그인 대화 상자 호출
플레이어가 로그인하지 않은 경우 ysdk.auth.openAuthDialog()
메서드를 사용하여 로그인 대화 상자를 열 수 있습니다.
팁
사용자에게 로그인 시 얻을 수 있는 혜택에 대해 알려주세요. 혜택을 모르는 사용자는 로그인을 건너뛰고 게임을 종료할 가능성이 높습니다.
var player;
function initPlayer() {
return ysdk.getPlayer().then(_player => {
player = _player;
return player;
});
}
initPlayer().then(_player => {
if (_player.isAuthorized() === false) {
// 플레이어가 로그인하지 않았습니다.
ysdk.auth.openAuthDialog().then(() => {
// 플레이어가 로그인했습니다
initPlayer().catch(err => {
// 플레이어 객체를 초기화하는 동안 오류가 발생했습니다.
});
}).catch(() => {
// 플레이어가 로그인하지 않았습니다.
});
}
}).catch(err => {
// 플레이어 객체를 초기화하는 동안 오류가 발생했습니다.
});
게임 내 데이터
사용자의 게임 내 데이터로 작업하려면 Player
객체 메서드를 사용합니다.
-
player.setData(data, flush)
: 사용자 데이터를 저장합니다. 최대 데이터 크기는 200KB를 넘지 않아야 합니다.data
: 객체, 키-값 쌍을 포함하는 객체.flush
: 부울, 주문 데이터가 전송되는 시점을 지정합니다. 값이 "true"이면 데이터가 즉시 서버로 전송됩니다. 값이 "false"(기본값)이면 데이터 전송 요청이 큐에 대기합니다.
이 메서드는 데이터가 저장되었는지 여부를 나타내는
Promise
를 반환합니다.파라미터 값이
flush: false
인 경우, 반환된 결과에는 데이터 유효성만 표시됩니다(데이터는 나중에 전송하기 위해 대기열에 대기 중). 하지만 지금player.getData()
를 사용하면 현재 데이터가 아직 전송되지 않았더라도player.setData()
가 설정한 최신 데이터를 반환합니다.player.setData({ achievements: ['trophy1', 'trophy2', 'trophy3'], }).then(() => { console.log('data is set'); });
-
player.getData(keys)
: Yandex 데이터베이스에 저장된 게임 내 사용자 데이터를 비동기적으로 반환합니다.keys
: array, 반환할 키 목록입니다. keys
파라미터가 누락된 경우, 메서드는 모든 게임 내 사용자 데이터를 반환합니다.
메서드는 키-값 쌍을 포함하는 객체와 함께
Promise<Object>
를 반환합니다. -
player.setStats(stats)
: 사용자의 숫자 데이터를 저장합니다. 최대 데이터 크기는 10KB를 넘지 않아야 합니다.stats
: 객체, 각 값이 숫자인 키-값 쌍을 포함하는 객체입니다.
이 메서드는 데이터가 저장되었는지 여부를 나타내는
Promise
를 반환합니다.팁
포인트, 경험치, 게임 내 화폐 등 자주 변경되는 숫자 값의 경우 player.setData() 대신 이 메서드를 사용하세요.
-
player.incrementStats(increments)
: 게임 내 사용자 데이터 변경. 최대 데이터 크기는 10KB를 넘지 않아야 합니다.increments
: 객체, 각 값이 숫자인 키-값 쌍을 포함하는 객체입니다.
이 메서드는 변경 및 추가된 키-값 쌍이 포함된 객체와 함께
Promise<Object>
를 반환합니다. -
player.getStats(keys)
: 사용자의 숫자 데이터를 비동기적으로 반환합니다.keys
: array, 반환할 키 목록입니다. keys
파라미터가 누락된 경우, 메서드는 모든 게임 내 사용자 데이터를 반환합니다.
메서드는 키-값 쌍을 포함하는 객체와 함께
Promise<Object>
를 반환합니다.
참고
요청 빈도에는 제한이 있습니다. 제한을 초과하는 경우 요청은 오류와 함께 거부됩니다.
사용자 프로필 데이터
Yandex 사용자 프로필에서 데이터를 가져오려면 Player
객체 메서드를 사용합니다.
-
player.getUniqueID()
: 사용자의 고유 영구 ID를 반환합니다(유형: 문자열).참고
이전에 사용되던
player.getID()
메서드는 이제 더 이상 사용되지 않지만 오류 콘솔에 경고를 표시하면서 잠시 동안 계속 작동합니다.player.getID()
와player.getUniqueID()
의 값은 일반적으로 주어진Player
객체에 대해 동일하지 않지만, 일부 사용자에게는 동일할 수 있습니다. 값이 다르고 게임 자체에서 이미 일부 데이터를player.getID()
값에 링크한 경우, 이 데이터를 마이그레이션하여player.getUniqueID()
값에 링크해야 합니다. 모든 사용자의 데이터를 한 번에 마이그레이션하려면 지원팀에 문의하세요. -
player.getIDsPerGame()
: 사용자가 개인 데이터 전송에 명시적으로 동의한 모든 개발자 게임에서 사용자 ID가 지정된Promise<Array>
를 반환합니다. 예시:[ { appID: 103915, userID: "tOpLpSh7i8QG8Voh/SuPbeS4NKTj1OxATCTKQF92H4c=" }, { appID: 103993, userID: "bviQCIAAuVmNMP66bZzC4x+4oSFzRKpteZ/euP/Jwv4=" } ]
알림
이 요청은 로그인한 사용자만 사용할 수 있습니다. 필요한 경우 인증을 사용합니다.
사용자가 메서드를 사용할 수 있는지 확인하려면
ysdk.isAvailableMethod('player.getIDsPerGame')
메서드를 사용할 수 있습니다. 이 메서드는Promise<Boolean>
을 반환하며, 여기서 부울 값은 메서드의 사용 가능 여부를 나타냅니다. -
player.getName()
: 사용자의 이름을 반환합니다(유형: 문자열). -
player.getPhoto(size)
: 사용자 아바타의 URL을 반환합니다(유형: 문자열).size
: 문자열, 필요한 크기. 가능한 값은 다음과 같습니다.small
,medium
,large
.
메소드 제한
메소드 |
설명 |
제한 |
|
5분 동안 20번의 요청 |
|
|
5분 동안 100번의 요청 |
|
|
||
|
1분 동안 60번의 요청 |
|
|
||
|
iOS에서 진행률 손실
게임이 iframe
을 통해 통합된 경우, 새 iOS 버전에서 localStorage
가 초기화되어 플레이어의 진행 상황이 손실될 수 있습니다. 이를 방지하려면 localStorage
와 동일한 인터페이스를 가진 safeStorage
를 사용하세요.
ysdk.getStorage().then(safeStorage => {
safeStorage.setItem('key', 'safe storage is working');
console.log(safeStorage.getItem('key'))
})
코드를 수동으로 변경하지 않으려면 localStorage
를 전역적으로 재정의하세요.
알림
재정의하기 전에 localStorage
가 사용되지 않는지 확인하세요.
ysdk.getStorage().then(safeStorage => Object.defineProperty(window, 'localStorage', { get: () => safeStorage }))
.then(() => {
localStorage.setItem('key', 'safe storage is working');
console.log(localStorage.getItem('key'))
})
소스 코드를 아카이브로 다운로드하면 SDK의 특수 래퍼가 자동으로 localStorage
를 안정적으로 만들므로 아무 작업도 할 필요가 없습니다.
참고
지원팀은 완성된 게임을 Yandex Games에 게시하는 데 도움을 드릴 수 있습니다. 개발이나 테스트에 대해 궁금한 점이 있다면, Discord 채널에서 질문해 주세요.
지원 서비스는 얀덱스 게임에서 완성 된 게임을 게시 할 수 있습니다. 개발 또는 테스트에 대한 질문이 있는 경우
Yandex Games SDK 사용과 관련하여 문제가 발생하거나 질문이 있는 경우 다음 방법으로 지원팀에 문의하세요.