2013-11-26 101 views
0

我將切換到Facebook Scores API爲我的手機遊戲的高分。像this問題,其答案是不太滿意的,我想知道如何單獨之間:Facebook評分API高分

  • 分數(玩家完成遊戲並獲得低於他的實際高分分數)
  • 榜(高分一個特定的播放器)的

我與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 想象一下用戶用Score 100完成了遊戲,但是他目前的高分是500.當我將這個新分數發佈到facebook API時,隨後獲得分數比較的呼叫返回100作爲分數,而不是500,這應該是他的實際高分。

我應該如何解決這個問題?只發布到Facebook的高分數意味着我無法將遊戲結束屏幕的實際分數與用戶朋友進行比較。另一方面,發佈實際分數會使得將高分存儲在除Facebook之外的其他地方是必要的,或者拒絕向用戶顯示他的高分,這對我來說似乎不是一個好的解決方案。

回答

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

在Facebook的Scores API只存儲一個每個用戶和應用程序在任何時間(高)的分數 - 如果你想跟蹤其他遊戲的分數你需要實現自己

+0

我不想跟蹤其他遊戲的得分。括號中的「高」是什麼意思?它顯然不存儲高分,正如我在文章中已經提到的那樣。 – Jonas

+0

我的意思是API的意圖是存儲高分;它爲每個用戶/應用程序組合存儲一個值,並將「高」視爲「更好」,以便在玩家擁有其他玩家的得分時將故事插入新聞Feed中。 – Igy

+0

好吧,它可以嗎?所以它必須保持高分在某個地方,對吧?但是,使用GET API請求時,它僅返回最後提交的分數。所以我的問題的答案是:「如果你想要顯示當前分數,你必須實現你自己的高分商店,否則你應該只提交你的高分並手動創建一個列表,將當前分數編織成朋友得分「? – Jonas