我在这里使用最新的Facebook C#SDK(撰写本文时为v5.0.4):http://facebooksdk.codeplex.com/。
我在Facebook上创建了一个测试iFrame应用,并运行了CSASPNETFacebookApp
示例,以便显示Facebook中当前登录用户的名称。
我现在要做的是在我的iFrame中显示不同的内容,具体取决于用户是否“喜欢”了该页面。但是signed_request
似乎从未包含该信息。从我在FacebookSignedRequest.cs
中看到的情况来看,如果算法是 AES-256-CBC HMAC-SHA256 ,我只会获得包含页面信息的有效负载,但我只能得到 HMAC-SHA256 返回。
我做错了什么?如何让它返回页面信息?在Facebook上设置我的应用程序或使用.NET应用程序的配置问题是一个问题吗?
提前致谢。
答案 0 :(得分:3)
var fb = new FacebookClient("access_token");
dynamic parameters = new ExpandoObject();
parameters.method = "pages.isFan";
parameters.page_id = "{you page id}";
dynamic result = fb.Get(parameters);
bool isFan = result == true;
答案 1 :(得分:2)
Neil Knight的答案在技术上是正确的,您可以使用FQL来查找用户是否喜欢某个页面,这确实有助于我设置正确的路径。然而,我的问题实际上更多的是设置而不是代码。我不明白的是,如果您的应用程序在“页面上下文”中运行,您只会在已签名的请求中收到“赞”信息。如果您正确设置,那么Facebook会将您的应用程序标记为标记,而无需用户“允许”您的应用。
步骤如下:
(1)在Facebook中创建iframe应用程序
(2)在应用设置中为您的应用设置标签网址。这是父页面在左侧列中生成链接以转到您的应用程序时将使用的内容。
(3)转到“应用资料页面”,网址如下:http://www.facebook.com/apps/application.php?id=12345其中12345是您的应用ID。
在徽标图片下方的左栏中,应该有一个链接“添加到页面”。如果您点击该链接,您将看到一个您是管理员的页面列表。在您的应用中选择您想要的页面。
现在,如果您导航到您的页面,您应该会在左侧列中找到指向您应用的链接。只有在点击该链接时,您才会获得页面ID并将状态传递给您的应用程序。
希望这有助于有同样问题的人。
答案 2 :(得分:0)
您可以使用FQL来实现此目的。我刚刚使用以下语句完成了这个:
var the_query = FB.Data.query("SELECT uid FROM page_fan WHERE page_id = {0} and uid={1}", page_id, user_id);
为了使其正常工作,我不得不要求用户“允许”我的应用程序,以便我有权检查他们是否喜欢该页面。然后,这是一个检查结果并显示必要的<div>
:
the_query.wait(function (rows) {
if (rows.length == 1 && rows[0].uid == user_id) {
$("#myLikeContent").show();
} else {
$("#myNoLikeContent").show();
}
});