代管 Facebook 遊戲

The Web Games on Facebook and Facebook Gameroom platforms are no longer available for new submissions. This documentation is intended solely for developers with existing games. To learn more, read our blog post.

Facebook 遊戲平台是作為入口網站代管,實際的遊戲內容是來由您本身的網頁伺服器代管。透過配置 Facebook 網頁遊戲網址,您可以在 Facebook.com 上提供遊戲,有關遊戲會在 iframe 內顯示。您可以在 Facebook 上發揮應用程式中心和遊戲推薦的最大效用,讓用戶發掘您的內容;您亦可使用 Facebook 平台的社交功能,來為遊戲帶來更多社交元素。

Facebook 上遊戲的顯示方式

您應用程式的設定中有 Facebook 網頁遊戲網址的欄位。玩家載入您的遊戲時,此欄位會配置載入的 iframe。這讓您能夠全盤控制自己的遊戲,而您亦可以按照自己的發佈周期隨心更新版本和內容。在此查看您的「應用程式設定」。

玩家在 Facebook.com 載入您的遊戲時,Facebook 會向「應用程式設定」之下提供的 Facebook 網頁遊戲網址發出 HTTP POST 要求。這個要求的回覆應為包含您遊戲用戶端的完整 HTML 回覆。您可以使用 Facebook JavaScript SDK 來驗證用戶、與框架互動和存取遊戲內的對話框,因此請確保遊戲的 HTML 有包含相關內容。查看此處以進一步了解 Facebook 遊戲平台登入。

在 Facebook.com 上,您的遊戲會在以上 iframe 中顯示

向 Facebook 網頁遊戲網址發出的 HTTP POST 要求會包含其他參數,其中包括 signed_request 參數,此參數包含已向您應用程式授予基本權限的玩家之 Facebook 身分。如果是新玩家,signed_request 參數值可以有效驗證此要求確實來自 Facebook。閱讀 Facebook 遊戲平台登入指南,進一步了解登入要求。

網域和 SSL 要求

瀏覽 Facebook.com 時需要使用 HTTPS,而這項要求亦同樣適用於遊戲內容。因此在提供遊戲內容時,必須具備有效 SSL 證書。在您配置網絡伺服器以代管遊戲時,您需要確保伺服器位於由您擁有的有效網域上,而且您擁有此網域的有效 SSL 證書。

內部連結

您可以將自己的自訂參數傳送給遊戲啟動查詢。這可以有效追蹤 OG 動態的成效、轉介網站或分享連結的成效。

您可採用 2 種做法:

  1. 在分享連結的最尾附加查詢參數
  2. 在遊戲的網址路徑加入相關連結

查詢參數

您 Facebook 遊戲的網址一律會顯示為 https://apps.facebook.com/{namespace}/。在應用程式頁面或互聯網上其他地方提供推廣活動連結時,您可在此附加查詢參數,例如:

https://apps.facebook.com/{namespace}/?source=mysourceid

這些查詢參數會在遊戲啟動時保留,並會和 signed_request 一同傳送到您的伺服器。

您亦可以分享連結來直接將玩家帶到您遊戲的部分內容。如果您正在使用 PHP 或有啟動指令碼,這可有助玩家跳脫標準流程,直接在某些遊戲部分中開始。完整路徑會保留在傳送給您伺服器的要求中。舉例來說,如果您向以下網址傳送連結:

https://apps.facebook.com/{namespace}/special_launch.php

Facebook 便會向以下網址發出要求:

https://{your_web_games_url}/special_launch.php

有關要求會在為您的遊戲載入 iframe 時發出。

了解遊戲啟動

玩家在 Facebook 啟動您的遊戲時,附加了查詢參數 signed_request 的 HTTP 要求會傳送至您的伺服器。您可將此 signed_request 解碼以取得用戶資訊,以及用於驗證此資料安全和真偽的簽名。您可以用以下方式剖析這項參數:

  1. 使用「.」字元來將簽署要求分隔為 2 個部分(例如:238fsdfsd.oijdoifjsidf899
  2. 從 base64url 解碼第一部分(經編碼的簽名)
  3. 從 base64url 解碼第二部分(裝載),然後將所得的 JSON 物件解碼

如果沒有 user_id 欄位,則代表玩家尚未向您的遊戲授予 public_profile 權限。

新用戶流程

如您剖析 signed_request 後發現用戶為新玩家,且尚未向您的遊戲授予基本權限,您可經由 Javascript SDK,在載入時向相關玩家要求取得這些權限。

FB.login(function(response){
  // Handle the response
});

您可將所需的權限加為第二參數,以此選擇要求取得更多權限,例如 email

FB.login(function(response) {
  // Handle the response
}, {scope: 'email'});

此裝載內的其他重要資訊包括玩家的年齡設定和地區偏好設定。詳情請查看 Facebook 遊戲平台登入

最佳操作實例

在本機上開發

開發遊戲時,您可能想在本機上執行的網頁伺服器代管遊戲,以加快編輯、編譯和測試程序的速度。最普遍的做法是設定一個類似 XAMPP 的伺服器堆疊。您亦會需要建立和安裝本地 SSL 證書,讓此伺服器支援 HTTPS。

轉移至正式版伺服器

一旦您準備好上架遊戲供公眾暢玩,便需要安排在向公眾提供的網頁伺服器上代管遊戲的事宜。

以內容傳遞網絡改善代管成效

隨著流量增加,您可能需要考慮使用 AkamaiCDNetworks 等內容傳遞網絡,以減少代管成本並改善成效。內容傳遞網絡的運作模式是在互聯網上不同地點快取您遊戲的內容。換言之,玩家會收到從較近地點送達至其用戶端的遊戲素材。這樣玩家的遊戲載入時間便會較短,而您的伺服器亦不會受到過多流量的影響。