使用facebook instant game API getLeaderboardAsync获取排行榜失败

  • Creator 版本:1.9.0

  • 目标平台: Web

  • 详细报错信息,包含调用堆栈:

  • 重现方式:必现

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:

第一步:在facebook开发者后台创建排行榜,如图

第二步:在creator里面创建一个按钮,通过点击按钮触发函数调用:

第三步:运行测试,控制台打印的log如下,无法获取到排行榜的名字,一直提示异常无法找到此排行榜

求大神解答!!!!无限感激!!!

1赞

我也遇到同样的问题。始终无法正确的获取排行榜,并且在后台建立的排行榜似乎无法删除呀。

1赞

问题已经找到方法了:

1,尝试将排行榜的is Context Scroped改为No。

2,获取排行榜时,只获取排行榜的名字,后面不加FBInstant.context.getID();

这两个步骤改好了,应该就能正确获取了。

这是官方API的bug,我已经反馈上去了,链接如下
https://developers.facebook.com/bugs/365711980601684/

嗯,干的漂亮。

排行榜的is Context Scroped改为No 之后, 这个排行榜是游戏的所有玩家的排行榜,还是该玩家所有的好友的排行榜?

最后怎么解决的?是将排行榜的is Context Scroped改为No吗?

你好,有一个问题想请教一下,我用下面的代码上传了自己的分数:

FBInstant
.getLeaderboardAsync(‘myRank1’)
.then(leaderboard => {
console.log(leaderboard.getName());
return leaderboard.setScoreAsync(30, ‘全局排行榜’);
})
.then(() => console.log(‘Score saved’))
.catch(error => console.error(error));

但是,当我想要获取排行榜信息的时候,却没有给我返回任何信息,代码如下:

FBInstant.getLeaderboardAsync(‘myRank1’)
.then(function (leaderboard) {
return leaderboard.getConnectedPlayerEntriesAsync(5, 3);
})
.then(function (entries) {
console.log(entries.length); // 5
for (var i = 0; i < entries.length; i++) {
console.log(entries[i].getRank()); // 4
console.log(entries[i].getScore()); // 34
console.log(entries[i].getExtraData()); // 34
}

        });

有人一到过这个问题吗?

leaderboard.getConnectedPlayerEntriesAsync(5, 3); 你的排行榜里面数据记录大于3条吗?
你这样(5,3)应该是取4到8名。

is Context Scroped改为No。表示世界排行榜

哦,原来这个5,3是这个意思啊,我一直以为是分页,每页显示5条,显示第3页,尴尬尴尬:sweat:

我改成了(0,10),想取出前10名的排行榜,但是还是不管用啊…

(10,0)也完全不管用的

哦,找到原因了,creator1.9.1对应的FBInstant版本是6.0,然而,6.0没有我上面调用的那个方法,那个方法是6.2的,对应creator1.9.2版本

当改为yes的时候是表示自己的好友排行榜吗?但是改成yes后,获取不到排行榜,提示找不到。另外getConnectedPlayerEntriesAsync()表示的又是什么意思?

getConnectedPlayerEntriesAsync(5, 3)这个函数表示取到的是什么意思,取到的是什么数据?

请问,你的排行榜配置的时候 是全球排行榜还是社交排行榜?

第一个问题: yes的话,是社交排行榜,no为全球排行榜.
第二个问题:getConnectedPlayerEntriesAsync方法表示从全球排行榜中,找到自己的好友的排行,也就是说,从全球排行榜中,找到自己的好友的分数,得到一个排行榜,返回给我们.
第三个问题:2个参数分别代表什么,暂时用(5,3)来表示吧.官方文档对这两个数字的定义为count和offset,一个是想要获得的排行榜数据的条目,另一个也就是偏移量,所谓的偏移量,也就是index,从0开始算起,也就是说,从数组的第3位开始,取出5条数据.

对第三个问题进行说明,这里只是取出来一部分的排行榜,估计可鞥是为了做类似排行榜分页的功能,所以提供了这个接口,防止数据量太大,而客户端要一次都取出来造成的网络问题

1赞

我在配置的时候,配置的是全球排行榜,全球排行榜和社交排行榜在取数据的时候是有去别的:
假如排行榜名字叫做 myRank

  1. 如果是全球排行榜,排行榜的名字的字符串就是 ‘myRank’
  2. 如果排行榜是社交排行榜,那么排行榜名字的字符串是 ‘myRank.’ + FBInstant.context.getID() ;注意,这里面有一个点号 ‘.’ ,这个是必须要有的,否则会报错,其实在排行榜页面也能够区分出来什么是全球排行榜,什么是社交排行榜,
    如下图,很明显,社交排行榜后面会带上 ‘.<context_id>’ ,这也就是为什么社交排行榜名字字符串要带上FBInstant.context.getID() ;

1,我也是这样理解的,如果这样的话那getPlayerEntryAsync()这个函数代表的是自身的排名,如果是全球排行的话,是不是就代表的是在全球的排名?
2,其实就是想获得自己所有好友的排行榜,刚开始用的社交排行榜,但是总获取不到排行榜,提示找不到该排行榜,你用的是社交排行榜还是全球排行榜?