现在我们开始开发Facebook Application, 要开发一个可以在Facebook平台上运行的Application, 那就必须能够与Facebook进行一些数据交换, 如获取身份, Session处理等, Facebook本身提供了很多API供用户使用, 具体可参考http://wiki.developers.facebook.com/index.php/API. 只是这些API比较复杂, 使用起来有点难度. 现在网上有很多比较好的第三方控件, 这些控件对这些API进行了处理和封装, 可以很方便的进行Facebook数据处理. 目前针对.NET环境下开发Facebook Application比较好的第三方控件主要有两个: Facebook Developer Toolkit和Facebook.NET, 前者是将API封装到类库中, 并针对不同模式的Application提供了对应的Base Page, 当用户开发的页面继承了这些Base Page后, 就可以使用这些API了, 而后者是提供了一个用户控件, 只要在页面上放置了该控件, 并设置了Application的API Key和Secret, 就可以使用该控件提供的方法进行Facebook API操作了. 这两个控件都是开源的, 大家可以从以下地址下载使用:

        Facebook Developer Toolkit: http://www.codeplex.com/FacebookToolkit

        Facebook.NET: http://www.codeplex.com/FacebookNET

相比较而言, Facebook.NET的使用比较简单方便一些, 所以我选择它作为项目的开发用第三方控件.

        我的开发环境是VS 2005, 开发语言是C#.NET, 现在我们正式开始开发过程. 首先, 我们新建一个Website项目, 引用下载到的Facebook.NET的DLL, 并将Facebook.NET提供的用户控件添加到工具箱中.

添加用户控件的方法: 打开工具箱, 在工具箱的空白区域点击鼠标右键, 选择弹出菜单中的"选择项...", 在弹出窗口中点击窗口下半部分的浏览按钮, 选择FacebookNET.Web.dll, 并点击确定按钮完成添加过程.

        添加完用户控件后, 工具箱中会增加三个控件, 分别是FacebookApplication, FacebookHyperLink和FqlDataSource.

       

facebook android app facebook android application_server

        1. FacebookApplication: 这是Facebook.NET的核心控件, 所有Facebook的API操作都包含在内;

        2. FacebookHyperLink: 这是控件是ASP.NET中HyperLink控件的扩展, 在项目中如果需要在页面上使用导航功能, 请务必使用此控件或直接使用脚本, 如果使用Menu, HyperLink等原ASP.NET的控件, 页面跳转后Session将丢失;

        3. FqlDataSource: 类似与ASP.NET中的DataSource控件.

         现在我们选择FacebookApplication控件, 并将其拖动到需要的页面上, 并设置其中的一些属性, 其中API Key和Secret是必须的, 而且值必须与之前获得的Application的值相同.




facebook android app facebook android application_facebook_02

facebook android app facebook android application_facebook_03

<% 
  ... 
  @ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"  
  %> 
  

 
  <% 
  ... 
  @ Register Assembly="FacebookNET.Web" Namespace="Facebook.Web" TagPrefix="fb"  
  %> 
  

 
  <! 
  DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
  > 
  

 
  < 
  html  
  xmlns 
  ="http://www.w3.org/1999/xhtml" 
    
  > 
  
 
  < 
  head  
  runat 
  ="server" 
  > 
  
     
  < 
  title 
  > 
  Untitled Page 
  </ 
  title 
  > 
  
 
  </ 
  head 
  > 
  
 
  < 
  body 
  > 
  
     
  < 
  form  
  id 
  ="form1" 
   runat 
  ="server" 
  > 
  
     
  < 
  div 
  > 
  
         
  < 
  fb:FacebookApplication  
  ID 
  ="FacebookApplication1" 
   runat 
  ="server" 
   ApplicationKey 
  ="xxxxxxxx" 
   Secret 
  ="eeeeeeee" 
  > 
  
         
  </ 
  fb:FacebookApplication 
  > 
  
    
     
  </ 
  div 
  > 
  
     
  </ 
  form 
  > 
  
 
  </ 
  body 
  > 
  
 
  </ 
  html 
  >


        此时就可以在后台代码中使用该控件的方法了. 



public     
  partial 
    
  class 
   _Default : System.Web.UI.Page
   ... 
  {
    protected void Page_Load(object sender, EventArgs e)
    ...{
        if (!IsPostBack)
        ...{
            Response.Write(FacebookApplication1.Service.UserID);
        }
    }
}

        这样虽然可以实现要求, 但是每一页都需要放置一个FacebookApplication控件, 而且当需要将项目更换到其他Application时, 还需要到页面上修改FacebookApplication的属性, 很是不便. 我们需要找到一个变通的方法.

        现在, 我们建立一个母版页, 将FacebookApplication控件放到该母版页上, 这样, 只要是使用该母版页的页面, 都不需要再次添加该控件了, 同时将需要设置的属性值放在web.config中, 在页面加载时动态加载其属性值, 这样在更换Application时, 只需要修改web.config就行了.

        母版页页面代码: 



facebook android app facebook android application_facebook_02

facebook android app facebook android application_facebook_03

<%   ...   @ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage"  
  %> 
  
   <%   ... 
  @ Register Assembly="FacebookNET.Web" Namespace="Facebook.Web" TagPrefix="fb"  
  %> 
  

   <!   DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
  > 
  

   <   html  
  xmlns 
  ="http://www.w3.org/1999/xhtml" 
    
  > 
  
   <   head  
  runat 
  ="server" 
  > 
  
       <   title 
  > 
  Untitled Page 
  </ 
  title 
  > 
  
   </   head 
  > 
  
   <   body 
  > 
  
       <   form  
  id 
  ="form1" 
   runat 
  ="server" 
  > 
  
       <   div 
  > 
  
           <   fb:FacebookApplication  
  ID 
  ="fbTest" 
   runat 
  ="server" 
   ApplicationKey 
  ="dfdddddddd" 
  
            Secret   ="eeefasdfef"   > 
  
           </   fb:FacebookApplication 
  > 
  
        
           <   asp:contentplaceholder  
  id 
  ="ContentPlaceHolder1" 
   runat 
  ="server" 
  > 
  
        
        
           </   asp:contentplaceholder 
  > 
  
       </   div 
  > 
  
       </   form 
  > 
  
   </   body 
  > 
  
   </   html 
  > 
  
 
        web.config代码: 
 
   
<   appSettings   >   
           <   add    key 
  ="APIKey" 
   value 
  ="ddfefdfdfsdf..." 
  /> 
  
           <   add    key 
  ="Secret" 
   value 
  ="dafefsdfadg..." 
  /> 
  
   </   appSettings   >


        页面动态加载FacebookApplication参数的操作我们放在OnPreInit的重载方法里进行, 为方便起见, 我们建立一个BasePage, 以免每个页面都要写一遍代码:

        BasePage.cs:



facebook android app facebook android application_asp.net_06

using    System;
   using    System.Data;
   using    System.Configuration;
   using    System.Web;
   using    System.Web.Security;
   using    System.Web.UI;
   using    System.Web.UI.WebControls;
   using    System.Web.UI.WebControls.WebParts;
   using    System.Web.UI.HtmlControls;
   using    Facebook.Web;

   public       abstract     
  class 
   BasePage : System.Web.UI.Page
   ...   {
    public BasePage()
    ...{
        //
        // TODO: Add constructor logic here
        //
    }

    protected FacebookApplication CurrentApplication
    ...{
        get
        ...{
            return Master.FindControl("fbTest") as FacebookApplication;
        }
    }

    protected override void OnPreInit(EventArgs e)
    ...{
        
        CurrentApplication.ApplicationKey = System.Configuration.ConfigurationSettings.AppSettings["ApiKey"];
        CurrentApplication.Secret = System.Configuration.ConfigurationSettings.AppSettings["Secret"];
        
    }
}


        如此, 只需将使用母版页的页面继承BasePage, 就可以方便的使用FacebookApplication的功能了.



facebook android app facebook android application_asp.net_06

public       partial       class    Default3 : BasePage
   ...   {
    protected void Page_Load(object sender, EventArgs e)
    ...{
        if (!IsPostBack)
        ...{
            Response.Write(CurrentApplication.Service.UserID);
        }
    }
}


        只要按照正常的ASP.NET项目的开发步骤, 同时在需要与Facebook交互的地方使用上述的方法进行处理, 就可以开发出简单的, IFrame模式的Facebook Application了.

(待续...)