教你構(gòu)建多樣化的Facebook應(yīng)用程序
使用Flash Platform,您可以構(gòu)建豐富的用戶體驗(yàn)。使用Facebook Platform,您可以構(gòu)建豐富的社交體驗(yàn)。將兩者結(jié)合使用,您可以構(gòu)建出納入更具交互性、表現(xiàn)力和響應(yīng)性應(yīng)用程序社交功能的殺手級(jí)應(yīng)用程序。
您可以構(gòu)建與Facebook相整合的三種類型的Flash Platform應(yīng)用程序:Facebook上的應(yīng)用程序、外部Web應(yīng)用程序和桌面應(yīng)用程序。
◆Facebook上的應(yīng)用程序是托管在您自己服務(wù)器上的Web應(yīng)用程序,但是用戶可用從Facebook網(wǎng)站上進(jìn)行訪問。用戶可以看到內(nèi)部嵌入您的應(yīng)用程序的Facebook chrome。您可以在Facebook上訪問應(yīng)用程序(通常通過響應(yīng)朋友的邀請(qǐng)或通過搜索應(yīng)用程序時(shí)跟蹤一個(gè)鏈接),而且 Facebook 服務(wù)器代理向您的服務(wù)器發(fā)出的請(qǐng)求并檢索應(yīng)用程序頁面(包括嵌入Flash Platform應(yīng)用程序的 HTML 和 JavaScript),以在 Facebook 網(wǎng)站上顯示。
這可以為Facebook網(wǎng)站上的用戶提供無縫體驗(yàn);用戶從不離開Facebook網(wǎng)站。Flash Platform應(yīng)用程序使用Adobe ActionScript 3 SDK for Facebook Platform(Facebook Graph API 的包裝)反復(fù)檢索和/或發(fā)送數(shù)據(jù)至Facebook。
◆外部Web應(yīng)用程序同樣托管在您自己的服務(wù)器上,但是用戶通過您的 URL 而不是 Facebook 網(wǎng)絡(luò)進(jìn)行訪問。您可以通過結(jié)合使用 Adobe ActionScript 3 SDK for Facebook Platform 和 Facebook JavaScript SDK 為應(yīng)用程序添加單點(diǎn)登錄和注銷功能,將 Facebook 社交特性添加到應(yīng)用程序。您可以將登錄和注銷按鈕添加到應(yīng)用程序,而且當(dāng)用戶登錄時(shí),她在彈出窗口中適合位置看到 Facebook 登錄和/或應(yīng)用程序授權(quán)對(duì)話框。彈出窗口對(duì)于安全性是必要的,這樣用戶知道她正在登錄 Facebook。這種單點(diǎn)登錄 Facebook 功能可以簡化您的應(yīng)用程序的登錄流程,使其可以訪問用戶的個(gè)人資料,從而讓您個(gè)性化網(wǎng)頁(通過顯示用戶的姓名、照片等)和用戶體驗(yàn)(通過顯示朋友購買的產(chǎn)品、朋友評(píng)論或意見,向用戶的墻或朋友的新提要發(fā)布評(píng)論或意見等方式)。對(duì)于 Facebook.com 上的應(yīng)用程序,F(xiàn)lash Platform 應(yīng)用程序使用 Adobe ActionScript 3 SDK for Facebook Platform(Facebook Graph API 的包裝)反復(fù)檢索和/或發(fā)送數(shù)據(jù)至 Facebook。示例網(wǎng)站包括 Ben and Jerry's、RedBull Connect 和 City Search。
◆桌面應(yīng)用程序與外部Web應(yīng)用程序相似,但是您將 Flash Platform 應(yīng)用程序作為一個(gè) AIR 應(yīng)用程序部署到桌面,而不是將其托管到一個(gè) web 服務(wù)器。與外部網(wǎng)站一樣,桌面應(yīng)用程序使用 Adobe ActionScript 3 SDK for Facebook Platform 添加了 Facebook 中的登錄功能和社交功能。
Facebook.com 上的非 Flash Platform 應(yīng)用程序
當(dāng)用戶在Facebook上向一個(gè)應(yīng)用程序發(fā)出請(qǐng)求時(shí),F(xiàn)acebook 將一個(gè) Facebook 網(wǎng)頁返回到包含一個(gè) iFrame(您的應(yīng)用程序被加載到該 iFrame)的 Facebook chrome(參見圖 1)。
注:這時(shí),您可以在 Facebook.com 上創(chuàng)建 iFrame 或 FBML 應(yīng)用程序。您應(yīng)該僅創(chuàng)建 iFrame 應(yīng)用程序,因?yàn)?Facebook 正在逐步淘汰使用 FBML 應(yīng)用程序,并打算在 2010 年底停止創(chuàng)建這種應(yīng)用程序。這種對(duì)應(yīng)用程序創(chuàng)建流程的簡化是 Facebook 為了消除開發(fā) Facebook.com 應(yīng)用程序和非 Facebook.com 應(yīng)用程序之間的差別所做出的部分努力。
圖 1. Facebook.com 上的應(yīng)用程序的架構(gòu)
中文注釋:
1. 網(wǎng)頁請(qǐng)求;
2. HTML/JS 網(wǎng)頁;
3. 網(wǎng)頁請(qǐng)求;
4. HTTP 請(qǐng)求 API;
5. JSON;
6. 在 Facebook 網(wǎng)頁的 iFrame 中顯示的 HTML/JS 網(wǎng)頁;
7. JS 調(diào)用您的服務(wù)器;
8. HTTP 請(qǐng)求 API;
9. JSON;
10. JSON;
11. JS 調(diào)用 API;
12. JSON。
◆用戶在 Facebook 網(wǎng)站上向您的應(yīng)用程序發(fā)出請(qǐng)求;瀏覽器向 Facebook 發(fā)出 HTTP 請(qǐng)求。
◆iFrame HTML 標(biāo)記的 HTML/JavaScript (JS) 網(wǎng)頁。
◆用戶的瀏覽器向您的服務(wù)器發(fā)出在 iFrame 中顯示網(wǎng)頁的請(qǐng)求。通常情況是一個(gè)應(yīng)用程序服務(wù)器頁面(如,PHP、ColdFusion 或 JSP),但是也可能是一個(gè) HTML 頁面。該頁面應(yīng)該包含邏輯檢查,以查看用戶是否登錄了 Facebook。當(dāng)用戶登錄 Facebook 時(shí),會(huì)話數(shù)據(jù)被存儲(chǔ)到一個(gè)名為 fbs_applicationID 的 cookie 中,其中應(yīng)用程序 ID 就是注冊(cè)到 Facebook Developer 應(yīng)用程序時(shí)分配給應(yīng)用程序的 ID。cookie 包含一個(gè)名為 access_token 的變量,您可以對(duì)其進(jìn)行檢索,然后隨著向 Facebook Graph API 發(fā)出的所有后續(xù)調(diào)用進(jìn)行傳遞。如果用戶沒有登錄 Facebook,如 cookie 無 access_token 屬性,應(yīng)將瀏覽器重定向至合適的 Facebook 登錄頁面。
◆應(yīng)用程序服務(wù)器頁面被執(zhí)行,根據(jù)需求對(duì)數(shù)據(jù)庫或其他服務(wù)器進(jìn)行任何調(diào)用,包括使用其 Graph API 對(duì) Facebook 進(jìn)行的調(diào)用。每個(gè) API 都必須包含從會(huì)話 cookie 中檢索的訪問記號(hào)。
◆Facebook將請(qǐng)求的數(shù)據(jù)作為JSON格式化數(shù)據(jù)返回至您的服務(wù)器。
◆您的服務(wù)器將 HTML/JS 頁面返回至在 iFrame 中顯示的用戶瀏覽器。
當(dāng)用戶與您的應(yīng)用程序進(jìn)行交互時(shí),可能發(fā)生下面的情況:
◆如果您的應(yīng)用程序包含新服務(wù)器端頁面鏈接,重復(fù) 3-6 步。
◆或者,如果您的應(yīng)用程序包含對(duì)您的服務(wù)器的異步 JavaScript 調(diào)用。這種情況下,執(zhí)行圖 1 中的步驟 7-10,其中唯一區(qū)別是 JSON 被返回至需由頁面的 JavaScript 處理的用戶瀏覽器。
◆另一種情況是您的頁面中的 JavaScript 代碼使用 Facebook JavaScript SDK 直接對(duì) Facebook 服務(wù)器進(jìn)行調(diào)用,而不必通過您的應(yīng)用程序服務(wù)器(圖 1 中的步驟 11-12)。
注:您也可以將一個(gè)小 FBML 標(biāo)記集放到您的應(yīng)用程序中,與 JavaScript SDK 結(jié)合使用,JavaScript SDK 掃描 DOM 以獲取標(biāo)記,然后向 Facebook 發(fā)送 API 請(qǐng)求。
#p#
Facebook.com 上的 Flash Platform 應(yīng)用程序
我們已經(jīng)了解了 Facebook.com 上非 Flash Platform 應(yīng)用程序的基礎(chǔ)知識(shí),現(xiàn)在讓我們看看如何將 Flash Platform 內(nèi)容整合到您的應(yīng)用程序中(參見圖 2)。
圖 2. Facebook.com 上的 Flash Platform 應(yīng)用程序
1. 網(wǎng)頁請(qǐng)求;
2. HTML/JS 網(wǎng)頁;
3. 網(wǎng)頁請(qǐng)求;
4. 在 Facebook 網(wǎng)頁的 iFrame 中顯示的 HTML/JS 網(wǎng)頁;
5. Flash Platform 應(yīng)用程序請(qǐng)求(SWF);
6. SWF;
7. ActionScript 調(diào)用 API;
8. JSON;
9. ActionScript 調(diào)用您的應(yīng)用程序服務(wù)器;
10. HTTP 請(qǐng)求 API;
11. JSON;
12. AMF(或 XML、JSON 或 SOAP)
◆用戶在 Facebook 網(wǎng)站上對(duì)您的應(yīng)用程序發(fā)出請(qǐng)求;瀏覽器向 Facebook 服務(wù)器發(fā)出 HTTP 請(qǐng)求。
◆Facebook 服務(wù)器返回一個(gè)包含 Facebook 網(wǎng)站 chrome 和一個(gè) iFrame HTML 標(biāo)記的 HTML/JS 網(wǎng)頁。
◆用戶的瀏覽器向您的服務(wù)器發(fā)出在 iFrame 中顯示網(wǎng)頁的請(qǐng)求。向之前一樣,這是一個(gè) HTML 頁面或應(yīng)用程序服務(wù)器頁面,但是現(xiàn)在該頁面還嵌入了一個(gè) SWF 文件,F(xiàn)lash Platform 應(yīng)用程序。
◆您的服務(wù)器向用戶的瀏覽器返回一個(gè)在 iFrame 中顯示的 HTML/JS 頁面。該頁面必須包含邏輯檢查,以查看用戶是否登錄 Facebook,但是現(xiàn)在該檢查可以使用 Adobe ActionScript 3 SDK for Facebook Platform 在嵌入的 SWF 中完成。該應(yīng)用程序包含可以檢查訪問記號(hào)是否存在的代碼。如果無訪問記號(hào),您必須像以前一樣添加代碼,以將用戶重定向至 Facebook 登錄頁面。
◆用戶的瀏覽器向您的服務(wù)器發(fā)送另一個(gè)請(qǐng)求,這次是將 SWF 嵌入到 iFrame 中的 HTML 頁面。
◆您的服務(wù)器返回 SWF 文件。
◆當(dāng)用戶與應(yīng)用程序進(jìn)行交互時(shí),它使用 Adobe ActionScript 3 SDK for Facebook Platform 向 Facebook 發(fā)出異步調(diào)用。每個(gè) API 調(diào)用必須包含訪問記號(hào);這是由 SDK 自動(dòng)處理的。
由于 Flash Player 的安全限制,SWF 文件僅可以對(duì) SWF 文件被服務(wù)的服務(wù)器或具有一個(gè)列出 SWF 文件出處的跨域策略文件的服務(wù)器(也就是,您的服務(wù)器)進(jìn)行數(shù)據(jù)調(diào)用。這意味著,為了使 SWF 文件可以直接向 Facebook 服務(wù)器發(fā)出調(diào)用請(qǐng)求,F(xiàn)acebook 服務(wù)器必須具有一個(gè)列出您服務(wù)器訪問中的 SWF 文件的跨域策略文件。如果您查看 Facebook 跨域策略文件,會(huì)看到一個(gè)通配符項(xiàng),授權(quán)從所有服務(wù)器訪問 SWF 文件。
◆Facebook 將 JSON 數(shù)據(jù)返回應(yīng)用程序。
當(dāng)用戶與應(yīng)用程序進(jìn)行交互時(shí),它也可以使用典型的遠(yuǎn)程程序調(diào)用方法對(duì)您的服務(wù)器(以保存您的服務(wù)器上的任何數(shù)據(jù)或進(jìn)行任何其他服務(wù)器端處理)進(jìn)行異步調(diào)用。對(duì)于采用 Flex 構(gòu)建的 Flash Platform 應(yīng)用程序,這包括 HTTP、web 服務(wù)和 Flash Remoting 請(qǐng)求。最快速和最小的調(diào)用是使用 Flash Remoting 而產(chǎn)生的,F(xiàn)lash Remoting 使用開放源二進(jìn)制協(xié)議 Action Message Format (AMF) 在服務(wù)器和 Flash Player 之間交換數(shù)據(jù)。
◆如果服務(wù)器出于任何原因需要與 Facebook 對(duì)話,它可以進(jìn)行。
◆您的服務(wù)器端代碼處理來自 Facebook 的結(jié)果。
◆您的服務(wù)器將任何數(shù)據(jù)返回至用戶瀏覽器中您的 Flash Platform 應(yīng)用程序。
#p#
外部 Flash 和 Facebook Platform web 應(yīng)用程序
外部 Flash 和 Facebook Platform web 應(yīng)用程序(參見圖 3)與 Facebook.com 上的 web 應(yīng)用程序非常相似。兩者的主要區(qū)別是如何處理用戶登錄和應(yīng)用程序授權(quán)。不是簡單地將瀏覽器重定向至 Facebook 登錄和/或授權(quán)頁面,您可以結(jié)合使用 Facebook JavaScript SDK 和 Adobe ActionScript 3 SDK for Facebook Platform,以在彈出窗口中展示 Facebook 登錄和/或授權(quán)頁面。盡管 Facebook 登錄是用 JavaScript 處理的,您通常無須寫任何 JavaScript 代碼;您僅調(diào)用 Adobe ActionScript 3 SDK for Facebook Platform 中的類方法即可。內(nèi)部發(fā)生的事情是 ActionScript SDK 中的代碼調(diào)用包裝頁面中包含的 JavaScript 方法,包裝頁面反過來調(diào)用 Facebook JavaScript SDK 中的方法。Adobe ActionScript 3 SDK for Facebook Platform 包含一個(gè)名為FBJSBridge.js 的文件,該文件包含這些需要包含到您的應(yīng)用程序的包裝頁面中的 JavaScript 方法。應(yīng)用程序的包裝頁面必須包含該 JavaScript 文件以及 Facebook JavaScript SDK。
外部 Flash 和 Facebook Platform web 應(yīng)用程序
1. 網(wǎng)頁請(qǐng)求;
2. HTML/JS 網(wǎng)頁;
3. Flash Platform 應(yīng)用程序請(qǐng)求(SWF);
4. SWF;
5. ActionScript 調(diào)用 API;
6. JSON
7. ActionScript 調(diào)用您的應(yīng)用程序服務(wù)器;
8. HTTP 請(qǐng)求 API;
9. JSON;
10. AMF(或 XML、JSON 或 SOAP)
◆用戶在您的網(wǎng)站上向您的應(yīng)用程序發(fā)出請(qǐng)求;瀏覽器向您的服務(wù)器發(fā)出 HTTP 請(qǐng)求。該請(qǐng)求可以是 HTML 頁面或者任何應(yīng)用程序服務(wù)器頁面,但是下面的內(nèi)容僅針對(duì) HTML 頁面。
◆您的服務(wù)器返回一個(gè)嵌入您的 SWF 文件的 HTML/JS 頁面。該包裝頁面必須包含 Facebook JavaScript SDK 和 Adobe ActionScript 3 SDK for Facebook Platform 使用的 FBJSBridge。
◆用戶瀏覽器向您的服務(wù)器發(fā)出將 SWF 文件嵌入 HTML 頁面的請(qǐng)求。
◆您的服務(wù)器返回 SWF 文件。應(yīng)用程序使用 Adobe ActionScript 3 SDK for Facebook Platform 代碼(使用 FBJSBridge 和 Facebook JavaScript SDK)檢查和查看該用戶和應(yīng)用程序是否有一個(gè)當(dāng)前訪問記號(hào)。如果沒有,它將在一個(gè)彈出瀏覽器窗口中呈現(xiàn) Facebook 登錄和/或授權(quán)網(wǎng)頁。
◆當(dāng)用戶與應(yīng)用程序交互時(shí),它使用 Adobe ActionScript 3 SDK for Facebook Platform 對(duì) Facebook 進(jìn)行異步調(diào)用。每個(gè) API 都必須包含訪問記號(hào)(這是由 SDK 自動(dòng)處理的)且 Facebook 服務(wù)器必須由一個(gè)列出您的服務(wù)器訪問中的 SWF 文件的跨域策略文件。
◆Facebook 將 JSON 格式化數(shù)據(jù)返回至您的應(yīng)用程序,您的應(yīng)用程序處理數(shù)據(jù)。
◆如果您希望保存您服務(wù)器上的任何數(shù)據(jù)或進(jìn)行任何其他服務(wù)器端處理,您的 ActionScript 代碼可以使用典型的遠(yuǎn)程程序調(diào)用方法對(duì)您的服務(wù)器進(jìn)行調(diào)用(HTTP、web 服務(wù)和 Flash Remoting 請(qǐng)求)。
◆如果您的服務(wù)器出于任何原因需要與 Facebook 對(duì)話,它可以進(jìn)行。
◆您的服務(wù)器端代碼處理來自 Facebook 的結(jié)果。
◆您的服務(wù)器將任何數(shù)據(jù)返回至用戶瀏覽器中您的 Flash Platform 應(yīng)用程序。
#p#
Flash 和 Facebook Platform 桌面應(yīng)用程序
***,讓我們看一下 Flash 和 Facebook Platform 桌面應(yīng)用程序的架構(gòu)(參見圖 4)。桌面應(yīng)用程序與外部 Flash 和 Facebook Platform web 應(yīng)用程序非常相似,區(qū)別是用戶安裝應(yīng)用程序后 SWF 文件保存在用戶的電腦上,而且 Adobe ActionScript 3 SDK for Facebook Platform 獨(dú)立處理登錄。為了將 Flash Platform 應(yīng)用程序部署為桌面應(yīng)用程序,您需要?jiǎng)?chuàng)建一個(gè)用戶可以安裝的 AIR 應(yīng)用程序。
圖 4. Flash 和 Facebook Platform 桌面應(yīng)用程序
1. 安裝 AIR 運(yùn)行時(shí)和您的 AIR 應(yīng)用程序;
2. ActionScript 調(diào)用 API;
3. JSON;
4. ActionScript 調(diào)用您的應(yīng)用程序服務(wù)器;
5. HTTP 請(qǐng)求 API;
6. JSON;
7. AMF(或 XML、JSON 或 SOAP)
◆用戶安裝并打開您的 AIR 桌面應(yīng)用程序。應(yīng)用程序使用 Adobe ActionScript 3 SDK for Facebook Platform 代碼檢查和查看該用戶和應(yīng)用程序是否有一個(gè)當(dāng)前訪問記號(hào)。如果沒有,它將在新操作系統(tǒng)窗口呈現(xiàn) Facebook 登錄和/或授權(quán)網(wǎng)頁。
◆您的 SWF 文件中的 ActionScript 代碼使用 Adobe ActionScript 3 SDK for Facebook Platform 對(duì) Facebook 直接進(jìn)行異步調(diào)用。訪問記號(hào)自動(dòng)隨每個(gè) API 調(diào)用被傳遞。
◆Facebook 將 JSON 格式化數(shù)據(jù)返回至您的應(yīng)用程序,您的應(yīng)用程序處理數(shù)據(jù)。
◆如果您希望保存您的服務(wù)器上的任何數(shù)據(jù)或者進(jìn)行任何其他服務(wù)器端處理,您的 ActionScript 代碼可以使用典型的遠(yuǎn)程程序調(diào)用方法對(duì)您的服務(wù)器進(jìn)行調(diào)用(HTTP、web 服務(wù)和 Flash Remoting 請(qǐng)求)。
◆如果您的服務(wù)器出于任何原因需要與 Facebook 對(duì)話,它可以進(jìn)行。
◆您的服務(wù)器處理來自 Facebook 的結(jié)果。
◆您的服務(wù)器將任何數(shù)據(jù)返回至 Flash Platform 桌面應(yīng)用程序。
后續(xù)工作
本文呈現(xiàn)了Facebook.com 上的非 Flash Platform 應(yīng)用程序、Facebook.com 上的 Flash Platform 應(yīng)用程序、外部 Flash 和 Facebook Platform web 應(yīng)用程序,以及 Flash 和 Facebook Platform 桌面應(yīng)用程序的架構(gòu)圖和處理流程。
【編輯推薦】