2011-10-19 100 views
3

我正在寫一個我想與Facebook分數整合的javascript遊戲庫。使用我的庫創建的遊戲通常運行在靜態文件服務器上(即,只有普通的HTML + JS,沒有服務器端腳本)。爲什麼不能通過Javascript中的評分API發佈評分?

我一直在尋找scores documentation,並且遇到this problem:您只能使用應用訪問令牌提交分數。

爲什麼?

糾正我,如果我錯了,但似乎,除非我有應用程序的祕密我不能讓一個應用程序訪問令牌,它似乎很明顯我不應該把應用程序祕密的JavaScript。對於大多數這些遊戲來說,服務器端腳本不存在問題。所以我無法獲得應用程序訪問令牌,所以這些遊戲都不能提交分數。

看起來尤其愚蠢的是,如果用戶授予應用「publish_stream」權限,那麼您可以自動創建一個符合「我剛剛在MySuperGame中取得77777!」的帖子。你可以用純HTML + JS做到這一點。但是你不能發佈分數。

我是否錯過了一些東西,或者API對此有點愚蠢?

+0

難道你不需要一個'應用祕密'張貼到別人的牆上? – thedaian

+0

不!只需要用戶登錄並點擊允許發佈權限即可。 – AshleysBrain

回答

1

因爲客戶端可以發送就是了服務器的任何信息,這是不信任是一個好主意。由於分數通常是客觀地確定玩家技能的一種方式,因此讓玩家確定自己的分數會直接破壞分數的功能。所以這個分數是由一個獨立的派對決定的;服務器。

如果Facebook沒有需要的access_token,這將是非常困難的其他遊戲,以確保分數。您可以要求Facebook SDK開發人員爲Facebook SDK添加一個不安全的替代方案,但調整您的遊戲以使用安全方法可能更容易。

我會建議建立由地方作出的玩家選擇是發送到服務器,在那裏它們被檢查的系統,並在計算分數,併發送至Facebook。對於簡單的測驗來說,這些選擇只是選擇的答案,在複雜的3D遊戲中,它們可能包括所有移動和與世界的交互。

如果大量服務器的腳本是真的出了問題,你可以將其降低到一個腳本,轉發客戶端發送到Facebook的得分服務器上。

1

如果你可以從JavaScript做到這一點,那麼只要通過控制檯運行一些命令,任何人都可以僞造他們的分數。

我不知道這是我們不支持它的原因,但它似乎是一個可能的一個。

+2

因此,如果解決方法是將得分發布到服務器端腳本中,那麼您可以欺騙該服務器端腳本。在javascript遊戲中嘗試並確保分數是徒勞的。 TBH我不在乎是否有人侵入它,對他們有好處 - 只有他們和他們的朋友才能看到它......所以沒有什麼可以做到的呢?對於休閒玩家來說,分數只是一個有趣的遊戲,我並不十分擔心它周圍的安全。不安全的分數比沒有分數好。 – AshleysBrain