排行榜奇怪的行为和问题

Leaderboard strange behavior and issues

我们有几个关于排行榜的问题:

1) 我们的排行榜设置为全球排行榜。当我在游戏中列出所有条目时,我得到这个:

这里是相同的 table,但可读性更好:

Table 有 5 个条目,但缺少排名 1 和排名 5。第一个记录是排名 2 的 "Jiří"。但是,从 FB 页面我知道有排名 1 的人(Jamie皮查多·加西亚):

所以,第一个问题是,为什么这个人不在 table 中?

2) 调用 getEntriesAsync 有 2 个参数:return 的条目数和距 table 顶部的偏移量。这是我们在调用 getEntriesAsync(1, x) 时得到的 table 个结果,其中 x 是从 0 到 7 的数字:

调用偏移量 0 不会 return 任何条目(应该 return "Jiří" 因为他是 table 中的第一个?)。也没有调用偏移量 4 returns。事实上,它看起来是 returns 记录,等级 = 偏移量 + 1。如果 table 中缺少这样的等级,它 returns 没有条目(或拒绝 - 见第 3 点))

那么,第二个问题是:这是预期的行为还是错误?对于偏移量 0,我希望第一个条目在 table 中,第二个条目偏移量为 1 ...

3) 未找到条目时存在不一致行为。在我的 PC 和许多设备上,promise 是用空的条目数组解决的。在 Android 4.4 上的 Messenger 中,相同的承诺被拒绝(不谈论那里的其他承诺问题)。 如果我们以更高的计数调用 getEntriesAsync()(例如:return 2 个条目),如果至少找不到一个条目(例如在列出的 [=55 上调用 getEntriesAsync(2, 4)),承诺也会被拒绝=]) - 它 return 是 PC 上的一个条目。

那么,第三个问题是:是bug吗? promise 应该总是用空数组解析吗?如果只有一个条目丢失,它肯定不应该拒绝...

4) 最后,我们想要实现的和似乎不太奏效的。对于我们想要获得对手的玩家,谁在全球排行榜中的位置更好。不幸的是,您可能会不小心进入跳过的排名,然后没有对手 returned(或者您甚至会被拒绝)。例如,如果玩家排名 6("Jirka" in table),我们要求输入偏移量 4(4 = 6 - 1 - 1;-1 因为排名是 1...n,而偏移 0...n-1 和 -1 以获得更好的分数)。如果调用 getEntriesAsync(1, 4),您的承诺要么以零条目解析,要么拒绝 (Messenger + Android 4.4).

那么,第四个问题:有什么方法可以让玩家在全球排行榜中获得更好的位置?

Facebook 被限制从 activity 返回过去 90 天内未发生的用户信息。因此,这些用户的一些分数将不会出现在排行榜中。

我们正在研究在下一个 SDK 版本中解决这个问题的方法。

第 (3) 点中的承诺拒绝很奇怪,我们正在调查导致这些的原因。 API 跨平台应该完全一致。

要获得下一个玩家,您应该能够获取当前排名并获得下一个 X 分数,返回下一个非空排行榜条目。