排行榜

您可以在游戏页面上显示个性化的排行榜,展示顶级玩家的成绩以及登录用户的排名。

要让以下请求生效,请确保:

注意

如果开发者仪表板中的技术排行榜名称字段中没有该名称的排行榜,请求将返回 404 错误。

初始化

如需直接调用排行榜方法,请访问 ysdk.leaderboards

注意

通过 ysdk.getLeaderboards() 方法初始化 lb 对象的方式已弃用。

旧方法
var lb;

ysdk.getLeaderboards()
  .then(_lb => lb = _lb);

  // 通过旧方式调用排行榜方法:
  // lb.getLeaderboardDescription() → ysdk.leaderboards.getDescription()
  // lb.setLeaderboardScore() → ysdk.leaderboards.setScore()
  // lb.getLeaderboardPlayerEntry() → ysdk.leaderboards.getPlayerEntry()
  // lb.getLeaderboardEntries() → ysdk.leaderboards.getEntries()

排行榜描述

要通过名称获取排行榜的描述,请使用 ysdk.leaderboards.getDescription()

getDescription(
  leaderboardName: string
)

参数

描述

leaderboardName

排行榜名称。

ysdk.leaderboards.getDescription('leaderboard2021')
  .then(res => console.log(res));
const work = async () => {
  const res = await ysdk.leaderboards.getDescription('leaderboard2021');
  console.log(res);
}

work();

响应格式

{
  appID: string,
  default: boolean,
  description: {
    invert_sort_order: boolean,
    score_format: {
      options: {
        decimal_offset: integer
      },
      type: string
    }
  },
  name: string,
  title: {
    en: string,
    ru: string
  }
}

参数

描述

appID

应用 ID。

default

如果为 true,则是主排行榜。

invert_sort_order

排列顺序:

  • false:排名按降序排列。
  • true:排名按升序排列。

decimal_offset

得分偏移量。例如,当设置为 decimal_offset: 2 时,1234 将显示为 12.34。

type

排行榜结果类型。可用参数:numeric(数字)、time(秒)。

name

排行榜名称。

title

本地化名称。合法数组参数:ruenbeukkkuztr

最新得分

注意

请求仅适用于已授权用户。如有需要,请使用授权

要检查用户是否有权访问某个方法,您可以使用 ysdk.isAvailableMethod('leaderboards.setScore') 方法,该方法返回一个 Promise<Boolean>,逻辑值表示方法是否可用。

为了确保结果对所有用户进行保存,无论其是否已授权,建议在应用程序代码中自定义设置排行榜。技术选择不受限制。

要为玩家设置最新得分,请使用 ysdk.leaderboards.setScore()

setScore(
  leaderboardName: string,
  score: number,
  extraData?: string
)

参数

描述

leaderboardName

排行榜名称。

score

得分。只接受 integer 类型。必须大于 0。如果排行榜类型time,则必须在几毫秒内传递值。

extraData

用户描述。可选。

备注

请求的发送频率不能超过每秒一次。否则,请求会被拒绝并引发错误。

// 不包含 extraData
ysdk.leaderboards.setScore('leaderboard2021', 120);
// 包含 extraData
ysdk.leaderboards.setScore('leaderboard2021', 120, 'My favourite player!');
const work = async () => {
  // 不包含 extraData
  await ysdk.leaderboards.setScore('leaderboard2021', 120);
  // 包含 extraData
  await ysdk.leaderboards.setScore('leaderboard2021', 120, 'My favourite player!');
}

work();

获取排名

注意

请求仅供授权用户使用。必要时,请使用授权

要检查用户对该方法的可用性,您可以使用ysdk.isAvailableMethod('leaderboards.getPlayerEntry')方法,它返回一个Promise<Boolean>,逻辑值表示方法的可用性。

为了确保结果被保存并对所有用户可见,无论其是否已授权,建议在应用程序代码中自行设置自定义排行榜。技术选择并无限制。

要获取用户排名,请使用 ysdk.leaderboards.getPlayerEntry()

getPlayerEntry(
  leaderboardName: string
)

参数

描述

leaderboardName

排行榜名称。

备注

每5分钟最多发送60次请求。否则请求将被拒绝并显示错误信息。

ysdk.leaderboards.getPlayerEntry('leaderboard2021')
  .then(res => console.log(res))
  .catch(err => {
    if (err.code === 'LEADERBOARD_PLAYER_NOT_PRESENT') {
      // 在排行榜不包含玩家条目的情况下触发
    }
  });
const work = async () => {
  try {
    const res = await ysdk.leaderboards.getPlayerEntry('leaderboard2021');
    console.log(res);
  } catch (err) {
    if (err.code === 'LEADERBOARD_PLAYER_NOT_PRESENT') {
      // 在排行榜不包含玩家条目的情况下触发
    }
  }
}

work();

响应格式

{
  score: integer,
  extraData: string,
  rank: integer,
  player: {
    getAvatarSrc: (size: string) => string,
    getAvatarSrcSet: (size: string) => string,
    lang: string,
    publicName: string,
    scopePermissions: {
      avatar: string,
      public_name: string
    },
    uniqueID: string,
  },
  formattedScore: string
}

参数

描述

score

得分。只接受 integer 类型。必须大于 0。如果排行榜类型time,则必须在几毫秒内传递值。

extraData

用户描述。可选。

getAvatarSrc

返回用户头像的 URL。Size 的可用值:Smallmediumlarge

getAvatarSrcSet

返回适合 Retina 显示屏的用户头像的 srcset。Size 的可用值:Smallmediumlarge

排行榜条目

要显示用户排名,请使用 ysdk.leaderboards.getEntries()

getEntries(
  leaderboardName: string,
  {
    includeUser: boolean,
    quantityAround: integer,
    quantityTop: integer
  }
)

参数

描述

leaderboardName

排行榜名称。

includeUser

定义是否在响应中包括登录用户:

  • true:在响应中包括。
  • false(默认):不包括。

quantityAround

返回在排行榜中低于和高于该用户排名的条目数。最小值为 1,最大值为 10。默认值为 5。

quantityTop

排行榜前列的条目数。最小值为 1,最大值为 20。默认值为 5。

备注

每5分钟最多可发送请求20次。否则请求将被拒绝并出现错误。

// 使用所有默认值
ysdk.leaderboards.getEntries('leaderboard2021')
  .then(res => console.log(res));
// 返回排名前 10 的条目
ysdk.leaderboards.getEntries('leaderboard2021', { quantityTop: 10 })
  .then(res => console.log(res));
// 返回排名前 10 的条目和排在用户前后的 3 个条目
ysdk.leaderboards.getEntries('leaderboard2021', { quantityTop: 10, includeUser: true, quantityAround: 3 })
  .then(res => console.log(res));
const work = async () => {
  let res;
  // 使用所有默认值
  res = await ysdk.leaderboards.getEntries('leaderboard2021');
  console.log(res);
  // 获取排名前 10 的条目
  res = await ysdk.leaderboards.getEntries('leaderboard2021', { quantityTop: 10 });
  console.log(res);
  // 返回排名前 10 的条目和排在用户前后的 3 个条目
  res = await ysdk.leaderboards.getEntries('leaderboard2021', { quantityTop: 10, includeUser: true, quantityAround: 3 });
  console.log(res);
}

work();

响应格式

{
  leaderboard: {
    ...
  },
  ranges: [
    {
      start: integer,
      size: integer
    }
  ],
  userRank: integer,
  entries: [
    {
      score: integer,
      extraData: string,
      rank: integer,
      player: {
        getAvatarSrc: (size: string) => string,
        getAvatarSrcSet: (size: string) => string,
        lang: string,
        publicName: string,
        scopePermissions: {
          avatar: string,
          public_name: string
        },
        uniqueID: string,
      },
    formattedScore: string
    },
    ...
  ]
}

参数

描述

leaderboard

排行榜描述

ranges

响应中的排名范围。

start

排名中的位置。计数从 0 开始,因此将第 1 名视为第 0 个元素。

size

请求的条目数。如果没有足够的数据,则返回的数量可能不是所请求的数量。

userRank

用户的排名。如果没有排名,或者请求是针对表中排名前列的用户而不包括该用户,则返回 0。

entries

请求的条目。

score

得分。只接受 integer 类型。必须大于 0。如果排行榜类型time,则必须在几毫秒内传递值。

extraData

用户描述。可选。

getAvatarSrc

返回用户头像的 URL。Size 的可用值:Smallmediumlarge

getAvatarSrcSet

返回适合 Retina 显示屏的用户头像的 srcset。Size 的可用值:Smallmediumlarge

方法限制

方法

描述

限制

用户授权

ysdk.leaderboards.setScore()

设置玩家新得分

每秒1次请求

必需

ysdk.leaderboards.getPlayerEntry()

显示单个用户排行

5分钟内每秒最多60次请求

必需

ysdk.leaderboards.getEntries()

获取多个用户排行

5分钟内每5分钟最多20次请求

可选

其他请求的限制:5分钟内最多20次请求。

与排行榜相关的问题

提示

当使用 ysdk.isAvailableMethod()ysdk.leaderboards.setScore() 方法组合时,未经授权的用户不会出现在排行榜中,也看不到自己的进度。我们建议在代码中创建一个单独的排行榜表,记录任何用户的成绩,并向所有用户显示其结果。您可以自行在应用程序中创建自定义排行榜,技术选择没有限制。

对象已存在

尝试使用已存在的排行榜名称创建新排行榜时会出现此错误。请使用之前未使用过的名称。

用户已隐藏

如果玩家未授权使用其头像和名称,则会显示"用户已隐藏"字样。访问用户数据取决于其个人资料中的设置。详见初始化章节。

错误404

尝试调用排行榜SDK方法时出现404错误,请检查开发者控制台中 Technical leaderboard name 字段中是否存在相应名称的排行榜。


备注

技术支持团队将协助您将已完成的游戏发布到 Yandex 游戏平台。关于开发和测试方面的具体问题,其他开发人员将在Discord 频道中进行回答。

如果您遇到 Yandex Games SDK 方面的问题或有其他问题想要咨询,请联系支持部门:

发送电子邮件

排行榜名称。

应用 ID。

如果为 true,则是主排行榜。

排列顺序 :

  • false:排名按降序排列。
  • true:排名按升序排列。

得分偏移量。 例如,当设置为 decimal_offset: 2 时,1234 将显示为 12.34。

排行榜结果类型 。可用参数:numeric(数字)、time(秒)。

本地化名称 。合法数组参数:ruenbeukkkuztr

得分。只接受 integer 类型。必须大于 0。如果排行榜类型为 time,则必须在几毫秒内传递值。

用户描述。可选。

排行榜结果类型 。可用参数:numeric(数字)、time(秒)。

返回用户头像的 URL。Size 的可用值:Smallmediumlarge

返回适合 Retina 显示屏的用户头像的 srcset。Size 的可用值:Smallmediumlarge

定义是否在响应中包括登录用户 :

  • true:在响应中包括。
  • false(默认):不包括。

返回在排行榜中低于和高于该用户排名的条目数。最小值为 1,最大值为 10。默认值为 5。

排行榜前列的条目数。最小值为 1,最大值为 20。默认值为 5。

排行版描述

响应中的排名范围。

排名中的位置 。计数从 0 开始,因此将第 1 名视为第 0 个元素。

请求的条目数 。如果没有足够的数据,则返回的数量可能不是所请求的数量。

用户的排名。如果没有排名,或者请求是针对表中排名前列的用户而不包括该用户,则返回 0。

请求的条目。