Facebook Score API Highscores

时间:2013-11-26 19:59:06

标签: facebook facebook-graph-api

我正在为我的手机游戏的高分切换到Facebook Scores API。就像在this问题中一样,他的回答并不令人满意,我想知道如何分开:

  • 得分(玩家完成了一场比赛并得分低于他的实际高分)
  • 高分(特定球员的高分)

我目前使用Spring Social Facebook的解决方案是:

MultiValueMap<String, String> data = new LinkedMultiValueMap<String, String>();
data.add("score", Integer.toString(score));
facebook.post("me", "scores", data);

这种方法的问题是:

我在游戏完成屏幕上显示用户的排名,通过HTTP GET将他的得分与他的朋友得分进行比较GRAPH_API/APP_ID/scores 想象一下,用户完成了一个得分为100的游戏,但他目前的得分为500.当我将这个新得分发布到facebook API时,随后获得得分比较的调用返回100作为分数,而不是500,这应该是他的实际高分

我该如何解决这个问题?仅向Facebook发布高分意味着我无法将游戏完成屏幕的实际得分与用户朋友进行比较。另一方面,发布实际分数将使得将高分存储在Facebook以外的其他地方是必要的,或者不向用户显示他的高分,这对我来说似乎不是一个好的解决方案。

2 个答案:

答案 0 :(得分:2)

我最终检查当前得分是否实际高于Facebook上的得分,并且只有在此检查成功时才发布新得分。将每个分数发布到Facebook都不起作用,因为Facebook只保存已发布的分数,而不检查它是否高于当前上传的分数。

FacebookTemplate facebook = new FacebookTemplate(userAccessToken);
int highscore = queryScoreFromFacebook(facebook);
if (score > highscore) {
    MultiValueMap<String, String> data = new LinkedMultiValueMap<String, String>();
    data.add("score", Integer.toString(score));
    facebook.post("me", "scores", data);
}

// querying all scores for that player and his friends
List<Map<String, Object>> players = (List<Map<String, Object>>) facebook.fetchObject("/" + APP_ID + "/scores", Map.class).get("data");

答案 1 :(得分:1)

Facebook Scores API仅在每个用户和应用中存储一个(高)分数 - 如果您想跟踪自己需要实施的其他游戏的分数