facebook架构:基于Facebook和Flash平台的应用架构解析( 2)

  Flash iFrame Facebook应用

  至此我们已经介绍了iFrame和FBML情况接下来开始讨论在应用中如何集成Flash内容问题虽然你完全可以构建个包含了 HTML/JavaScript/ActionScript混合应用但为了介绍说明方便我们还是将注意力集中在基本Flash应用层面——其全部视 觉效果和功能都封装在SWF文件(Flash Player可识别并渲染、编译后字节码格式)中 在上述混合应用中可以使用到多种API比如服务端API、前面已讨论过客户端JavaScript API以及这里将讨论客户端ActionScript API 你可将SWF文件集成到iFrame或FBML应用中图3介绍说明了在iFrame应用中简单实现思路方法

基于Facebook和Flash平台<img src='/icons/67602de.gif' />应用架构解析( 2)

  图3 Flash iFrame Facebook应用

  用户在Facebook站点上访问你应用时浏览器向Facebook服务器发出个HTTP请求

  Facebook服务器返回个HTML/JS页面其中包含Facebook站点容器和个iFrame HTML标签

  用户浏览器向你服务器请求包含在iFrame中页面和前面讨论过情况区别这个页面不再是个服务端页面而是个简单 HTML页面(内含SWF文件)此时Session信息仍通过GET请求URL参数传递;你服务器解析这些参数并转换为内嵌SWF所需 flash参数这样在SWF中ActionScript代码就可以根据这些参数直接向Facebook服务器发出请求了

  你服务器将HTML/JS页面返回给用户浏览器并在iFrame中展示

  用户浏览器向你服务器发出其他请求即请求展示在iFrame中HTML页面中内嵌SWF文件

  你服务器返回SWF文件

  当用户和你应用交互时SWF可向Facebook服务器、或你服务器发送异步请求

  SWF文件中ActionScript脚本直接访问Facebook服务器(步骤7-8)你可以使用Google代码中ActionScript 3.0 Library for Facebook Platform

  出于Flash Player安全性考虑SWF文件只能从两类服务器获取数据:(1)提供SWF文件服务器(这里即你服务器);(2)有跨域策略文件(在文件中列 出了SWF来源服务器)服务器也就是说若要你SWF能直接访问Facebook服务器Facebook服务器必须在跨域策略文件中开放了访问权 限如果看过Facebook跨域策略文件你会发现它通过个通配符授予了来自任何服务器SWF文件访问权:

<cross-do-policy> 
   <site-control permitted-cross-do-policies="master-only"/> 
   <allow-access-from do="*"/> 
 </cross-do-policy>


  你ActionScript访问Facebook服务器时必须像前面非FlashiFrame和FBML应用部分讲到那样传送应用API Key和用于介绍说明访问来自何处签名信息利用ActionScript 3.0 Library for Facebook Platform中类可自动生成签名;为此你只需向ActionScript session类构造传入应用API Key和密钥

  但是你不应在SWF文件以硬编码方式写入上述数据SWF文件可用多种软件Software反编译相反SWF应该在运行时向你服务器发出请求(可 HTTP或Flash Remoting方式)从而获得应用密钥接下来再传给ActionScript session类构造从而生成访问Facebook服务器时所需签名

  记住此签名由下列信息组成:传递给Facebook服务器URL参数、Session Key(用户访问你应用时分配)MD5哈希串、应用密钥等

  若需实现任何服务端处理功能(如在你服务器上保存某些数据)可在ActionScript代码中通过远程过程思路方法实现(见步骤 9-10)对于利用Flex构建Flash平台应用而言这些思路方法包括HTTP、Web Service和Flash Remoting请求技术其中最便捷思路方法当属Flash Remoting——它通过开源 2进制Action Message Format (AMF)实现服务器和Flash Player间数据交换当然服务端代码在向客户端返回数据的前可根据需要访问Facebook服务器(此点未包含在图3中)

  Flash FBML Facebook应用

  除了在iFrame中集成你Flash应用还可以通过FBML标签<fb:swf>将其植入到FBML应用中在这种情况中应用会由或多个服务端页面组成;这些页面包含FBML(用于获取或展示Facebook形式可视化内 容、对话框和小Control控件)、不能通过简单FBML标签实现服务端API以及包纳了你Flash内容<fb:swf>标签FBML应用好处是在访问Facebook提供社会化特性时非常简单向Facebook传送FBML标签就可自动渲染为HTML内容 而其不足则是此处在多个地方编写表现层和逻辑层代码更为复杂:SWF文件中、服务端页面中以及发向Facebook服务器FBML代码中(见图 4)有关iFrame和FBML应用区别更详细信息请参看iFrame、FBML Flash Facebook应用比较

基于Facebook和Flash平台<img src='/icons/67602de.gif' />应用架构解析( 2)

  图4 Flash FBML Facebook应用

  用户通过Facebook站点访问你应用时浏览器向Facebook服务器发送HTTP请求

  Facebook服务器向你服务器发出请求——般请求是PHP、JSP或ColdFusion式服务端页面在这种情况 下Session信息通过POST请求(而非iFrame中GET请求)中URL参数传递那么应用服务器就知道该请求来自 Facebook、是哪个用户发出请求了

  服务端页面执行时可根据需要访问数据库和其他服务器当然包括利用REST API访问Facebook服务器

  API必须包含认证信息——包括在Facebook上注册应用时获得API Key、该签名(通过传给Facebook思路方法参数、用户请求你应用时指定SessionMD5哈希串生成)、应用密钥和其他信息

  对于非FlashiFrame和FBML应用来说服务端页面通常可利用现成代码库实现对Facebook访问以及生成签名因此对于所有FBML应用而言用户浏览器所有请求都是通过Facebook代理应用在请求Facebook服务器时就没必要每次单独个API;同时诸如获得用户姓名、图片、生成对话框等等都可以利用FBML 标签实现

  Facebook服务器在将页面返回给用户浏览器前会自动将FBML转换为HTML和JavaScript代码当然不是所有功能都有标签支持比如要取得朋友生日信息还是得从你服务器向Facebook发送对应API请求

  Facebook服务器将被请求数据返回给你服务器格式可为XML或JSON

  你服务器向Facebook服务器返回包括HTML/JS和FBML内容页面

  Facebook服务器向用户浏览器返回HTML/JS页面该页面包括了(用标签<fb:swf>指定)对你服务器上SWF文件引用



  用户浏览器向你服务器请求内嵌在HTML页面中SWF文件

  你服务器返回SWF文件

  在用户和你应用交互过程中SWF可向Facebook服务器或你服务器发出异步

  SWF中ActionScript代码直接访问Facebook服务器(见步骤9-10)这可利用宿主在Google代码上 官方支持ActionScript 3.0 Library for Facebook Platform实现当然Facebook必须通过跨域策略文件开放了访问权限且API中传送了所需参数有关这部分详细问题前面 Flash iFrame应用中已有讨论

  若需实现任何服务端处理功能(如在你服务器上保存某些数据)可在ActionScript代码中通过远程过程思路方法实现(见 步骤11-12)对于利用Flex构建Flash平台应用而言这些思路方法包括HTTP、Web Service和Flash Remoting请求技术其中最便捷思路方法当属Flash Remoting——它通过开源 2进制Action Message Format (AMF)实现服务器和Flash Player间数据交换当然服务端代码在向客户端返回数据的前可根据需要访问Facebook服务器(此点未包含在图4中)

  阅读英文原文:Understanding the architecture of applications built on the Facebook and Flash Platforms



Tags:  facebook.com facebook facebook开放平台 facebook架构

延伸阅读

最新评论

发表评论