You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook Instant Games无法提交排行榜分数:求指导捕获setScoreAsync错误

嘿,我明白作为JavaScript新手遇到异步API错误捕获的问题有多头疼,别担心,我来一步步帮你搞定Facebook Instant Games里的setScoreAsync分数提交和错误捕获问题!

第一步:用try/catch捕获setScoreAsync的错误

setScoreAsync是一个异步函数,我们需要结合async/await和try/catch来捕获它抛出的错误,这是最适合新手理解的方式。下面是完整的代码示例,我加了详细注释:

// 先确保你已经完成了Facebook Instant Games SDK的初始化
async function submitScore(leaderboardId, userScore) {
  try {
    // 1. 获取目标排行榜的实例
    const leaderboard = await FBInstant.getLeaderboardAsync(leaderboardId);
    // 2. 尝试提交分数
    await leaderboard.setScoreAsync(userScore);
    
    // 如果走到这里,说明提交成功了
    console.log("分数提交成功!");
    alert("你的分数已经成功上传到排行榜啦~");
  } catch (error) {
    // 这里会捕获所有提交过程中出现的错误
    console.error("提交失败详情:", error);
    
    // 可以根据错误码给用户更友好的提示(常见错误码示例)
    switch(error.code) {
      case "NOT_AUTHORIZED":
        alert("请先登录Facebook账号,才能提交分数哦!");
        break;
      case "INVALID_PARAM":
        alert("分数格式不对,请检查是否是有效的正整数!");
        break;
      case "LEADERBOARD_NOT_FOUND":
        alert("找不到对应的排行榜,请检查排行榜ID是否正确!");
        break;
      default:
        alert(`提交失败:${error.message}`);
    }
  }
}

// 调用示例:替换成你的排行榜ID和用户实际分数
submitScore("my-game-main-leaderboard", 2300);
第二步:常见的提交失败排查点

除了捕获错误,你还可以提前检查这些常见问题,避免踩坑:

  • SDK未初始化完成:一定要在调用任何排行榜API前,确保FBInstant.initializeAsync()已经执行完成,比如把提交分数的逻辑放在初始化成功的回调里。
  • 用户未登录:Facebook Instant Games要求用户登录才能操作排行榜,你可以先用FBInstant.player.isLoggedIn()检查状态,未登录时调用FBInstant.player.loginAsync()引导用户登录。
  • 排行榜ID错误:确保你传入的排行榜ID和Facebook开发者后台创建的完全一致(大小写、拼写都不能错)。
  • 分数格式错误:setScoreAsync只接受正整数作为分数,不能是字符串、负数或者小数。
新手小提醒

async/await是JavaScript处理异步操作的语法糖,它让异步代码看起来像同步代码一样好读;而try/catch就像一个“安全网”,能接住代码执行过程中抛出的所有错误,帮你定位问题根源——以后遇到其他异步API,也可以用同样的方式捕获错误哦!

内容的提问来源于stack exchange,提问作者wardaddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:48:06