在Azure上构建一个基于Facebook的营销式应用程序(中)(1)

本文接如何将基于Facebook营销式应用程序创建在Azure

基于Facebook营销式应用程序在Canvas页面上,会映射到这个应用程序。在Azure上的base URL(例如:http://azurefacebooksample.cloudapp.net/)这是一个展示初始的联系信息的窗体。下面就是如何展示联系信息的步骤:

Listing 1

[CanvasAuthorize(Perms = "user_birthday")]

public ActionResult Index()

{

FacebookApp app = new FacebookApp();

dynamic response = app.Api("me");

Contact contact = new Contact();

contact.FirstName = response.first_name;

contact.LastName = response.last_name;

string query = "select birthday_date from user where uid = me()";

response = app.Fql(query);

if (response.Count > 0)

contact.DateOfBirth = response[0].birthday_date;

return View(contact);

}

这个程序已经相对的得到简便,这主要得益于FacebookC# SDK。这个SDK通过“CanvasAuthorize”特性处理了Facebook OAuth身份验证和应用程序的授权,并且提供了一个“FacebookApp”对象。你应该还记得,在一个新用户运行“AzureSample”以前,他们必须要给这个应用程序授予可以访问这个用户的出生日期的特殊权限。为了达到这个目的,我们需要做的所有事情就是,使用“CanvasAuthorize”特性,对任何一个需要授权的控制器操作进行标记,指定需要请求的扩展权限是可选的(在这里,我们指定了“user_birthday”权限)。

“FacebookApp”对象可以访问经过签名的请求信息,也可以访问Facebook的Graph API和REST API。在这个控制器中,我们使用“FacebookApp”调用一个Graph API(“me”),来返回当前用户的信息(其中包括第一个名字和最后一个名字)。我们不能使用这个Graph API来获取这个用户的出生日期,但是,我们可以求助于Facebook FQL,创建一个查询来找到当前用户的出生日期。我们可以通过“FacebookApp”来使用FQL(Formal Query Language) 。我们把这个用户的信息添加到一个新的“Contact”对象中,这是一个来自于域对象的数据模型对象。然后,我们把这个“contact”放到一个视图中。

这是这个索引视图的完整代码:

Listing 2

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage<AzureFacebookSample.Domain.Models.Contact>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

Home

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<div>Please provide the following information. All fields are required.</div>

<% using (Html.BeginForm())

{%>

<%: Html.ValidationSummary(true)%>

<div class="editor-label">

<%: Html.LabelFor(model => model.FirstName)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.FirstName)%>

<%: Html.ValidationMessageFor(model => model.FirstName)%>

</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.LastName)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.LastName)%>

<%: Html.ValidationMessageFor(model => model.LastName)%>

</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.Email)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.Email)%>

<%: Html.ValidationMessageFor(model => model.Email)%>

</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.DateOfBirth)%>

</div>

<div class="editor-field">

<%: Html.EditorFor(model => model.DateOfBirth)%>

<%: Html.ValidationMessageFor(model => model.DateOfBirth)%>

</div>

<div>You must be 18 or older to participate.</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.Zip)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.Zip)%>

<%: Html.ValidationMessageFor(model => model.Zip)%>

</div>

<p>

<input type="submit" value="Next"/>

</p>

<%} %>

</aspContent>

这个视图指定了用于收集联系信息的窗体字段。验证是通过“Contact”数据模型上的特定注解来实现的。当用户点击“next”按钮的时候,这些窗体字段会被发送到控制器的post操作中:

Listing 3

[HttpPost]

[CanvasAuthorize]

Public ActionResult Index(Contact contact)

{

FacebookApp app = new FacebookApp();

contact.PartitionKey = app.UserId.ToString();

if (ModelState.IsValid)

{

contactRepository.Save(contact);

return this.CanvasRedirectToAction("SelectStore");

}

Return View(contact);

}

除了从窗体返回的联系信息之外,我们还会通过“FacebookApp”对象来抓取用户的Facebook ID,然后放到“Contact”中,以便于我们可以跟踪将来对这个应用程序的访问(客户只可以注册一次,领取一次奖品)。

时间: 2024-07-29 03:16:16

在Azure上构建一个基于Facebook的营销式应用程序(中)(1)的相关文章

在Azure上创建一个营销式应用程序,用以媲美Facebook

本文承接<在Azure上构建一个基于Facebook的营销式应用程序(上) > 和<在Azure上构建一个基于Facebook的营销式应用程序(中)> 选择一个商店 当我们通过了在联系信息上的验证时,用户就可以通过自己的喜好选择一个适合自己的商店.与此同时,这个应用程序会给用户提供一个包含三个商店的列表(这三个商店都在这个用户的邮政编码所在地方圆50英里之内,是按照从最近到最远的顺序来排序的).这三个商店列表要想被快速地显示出来,并且减少Web角色上的负载,提前计算距离,不仅如此,

如何将基于Facebook营销式应用程序创建在Azure上

Facebook,大家都不陌生的一个交流平台,每天都会有将近上万人进行注册,每个人将自己的生活点滴记录在这里,与别人分享自己的喜怒哀乐,不过我们是否考虑过,当你的Facebook应用程序点击率上升的时候,它如何进行扩展呢?如果你运用Windows Azure构建的这个应用程序,并且是按横向扩展的思想设计的这个应用程序,那将是很大的一个进步. 以下是如何使用Windows Azure Toolkit和FacebookC# SDK(这两个工具包可以在CodePlex上找到),在Azure上创建一个简

在Windows Azure上构建可高度伸缩的网站

Windows http://www.aliyun.com/zixun/aggregation/13357.html">Azure 网站 (WAWS) 允许您在 Windows Azure 上构建可高度伸缩的网站.下面概述了 WAWS 的优势: •有效的资源利用:随着客户群增长,您的应用程序的使用率也会相应增加.您可以基于网站的流量模式主动伸缩您的网站. •基于使用率的成本计算:在按需选择基于云的策略方面,成本起着关键的作用.Azure 网站提供了基于使用率的模型(按增长付费)和 6 或

云效公有云如何构建一个基于Composer的PHP项目

最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了云效公有云团队大量的帮助,分享这篇内容希望能让更多的人了解和用好这个产品. 我会把我最近3个月的使用体会分成5个部分:使用云效公有云的动机.PHP项目集成.JS项目集成.JAVA项目集成.Docker类项目集成这5个分支来写. 因为近期公有云的迭代比较频繁,所以我的分享会比较的浅,点到为止,仅供参考,目录: 1.云效公有云如何耦合进我们的业务 2.如何构建一个基于Composer的PHP项目 3.如何构建一个基于NodeJS的前后端项目

云效(原RDC)如何构建一个基于Composer的PHP项目

最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机.PHP项目集成.JS项目集成.JAVA项目集成.Docker类项目集成这5个分支来写 因为近期RDC的迭代比较频繁,所以我的分享会比较的浅,点到为止,仅供参考,目录: 1.RDC如何耦合进我们的业务 2.如何构建一个基于Composer的PHP项目 3.如何构建一个基于Nod

云效(原RDC)如何构建一个基于NodeJS的前后端项目

最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机.PHP项目集成.JS项目集成.JAVA项目集成.Docker类项目集成这5个分支来写 因为近期RDC的迭代比较频繁,所以我的分享会比较的浅,点到为止,仅供参考,目录: 1.RDC如何耦合进我们的业务 2.如何构建一个基于Composer的PHP项目 3.如何构建一个基于Nod

用Kafka和HBase构建一个基于Docker的数据采集器

本文讲的是用Kafka和HBase构建一个基于Docker的数据采集器,[编者的话]本文主要介绍在Docker上,用Kafka和HBase构建一个数据采集器,并用这个采集器用来记录Caltrain Rider这款应用的GPS数据.本文只是一个简单的实践,读者可以将此方法进行拓展,以更好的学习Docker. 不难看出Docker近来发展迅速.分布式计算现在已日益普遍,而适用于分布式环境的开发工具仍在发展之中.一个多平台的应用在开发.测试以及部署方面已经成为一大难题,但好在虚拟机为我们提供了一个非常

那有什么方案可以在azure上建立一个win10 来体验下呢

问题描述 那有什么方案可以在azure上建立一个win10 来体验下呢 大家好哦!! 那有什么方案可以在azure上建立一个win10 来体验下呢?? 解决方案 这个需要Azure提供Win10的虚拟机镜像.然后你就可以使用了.或者你装一个Win8,然后下一个Win10的ISO来做OS Upgrade 解决方案二: 你好, 两个方案, 方案一,使用Azure提供的Win10虚拟机镜像.不过目前好像没有支持Win10的虚拟机镜像. 方案二,使用自己的虚拟机镜像. 如果你本地有Win10的虚拟机镜像

如何在android上实现一个基于贝叶斯的垃圾短信过滤软件

问题描述 如何在android上实现一个基于贝叶斯的垃圾短信过滤软件 有哪位高人做过在android上实现一个基于贝叶斯的垃圾短信过滤软件,求思路. 解决方案 在客户端本地做贝叶斯不合适的吧?