现在我们开始开发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.
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的值相同.
<%
...
@ 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就行了.
母版页页面代码:
<% ... @ 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:
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的功能了.
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了.
(待续...)