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
相关产品推荐
相关产品推荐

