플레이어 데이터

게임 상태 데이터(완료한 레벨, 경험치, 게임 내 구매 포함)를 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.

메소드 제한

메소드

설명

제한

ysdk.getPlayer()

Player 객체를 초기화합니다

5분 동안 20번의 요청

player.setData()

사용자 데이터를 저장합니다

5분 동안 100번의 요청

player.getData()

사용자의 게임 내 데이터를 비동기적으로 반환합니다

player.setStats()

사용자의 숫자 데이터를 저장합니다

1분 동안 60번의 요청

player.getStats()

사용자의 숫자 데이터를 비동기적으로 반환합니다

player.incrementStats()

게임 내 사용자 데이터 변경

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

채팅 상담