我正在使用来自codeplex的Facebook sdk
我在How to get the Page Id in my Facebook Application page
尝试了这个建议这是:
if (FacebookWebContext.Current.SignedRequest != null)
{
dynamic data = FacebookWebContext.Current.SignedRequest.Data;
if (data.page != null)
{
var pageId = (String)data.page.id;
var isUserAdmin = (Boolean)data.page.admin;
var userLikesPage = (Boolean)data.page.liked;
}
else
{
// not on a page
}
}
但我的data.page为null。
我是否需要对授权或其他东西要求一些额外的权限?
但我只有appId不是页面ID。
有什么想法吗?
答案 0 :(得分:1)
您不需要任何额外的权限或授权。 signed request按照Facebook blog post.提供“喜欢”的信息。每次用户点击页面标签上的iFrame应用程序时,都会发布该信息。
我认为您缺少的步骤是解码已签名的请求(使用您的Facebook应用程序密钥)。
您可以使用Facebook C#SDK中的FacebookSignedRequest.Parse
方法来解析已签名的请求(通过将Facebook应用程序密钥应用于此)。完成此操作后,您可以从Page JSON对象中提取“likes”标志,如下所示:
var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, FacebookWebContext.Current.SignedRequest.Data);
dynamic SignedRequestData = DecodedSignedRequest.Data;
var RawRequestData = (IDictionary<string, object>)SignedRequestData;
if (RawRequestData.ContainsKey("page") == true)
{
Facebook.JsonObject RawPageData = (Facebook.JsonObject)RawRequestData["page"];
if (RawPageData.ContainsKey("id") == true)
currentFacebookPageID = (string)RawPageData["id"];
if (RawPageData.ContainsKey("liked") == true)
currentFacebookPageLiked = (bool)RawPageData["liked"];
}
或者,根据my other answer,您可以使用由Facebook发布到您的IFrame应用程序的singed_request表单变量。
希望这有帮助。
答案 1 :(得分:1)
刚刚想到这一点,FacebookWebContext.Current.SignedRequest对象中的页面数据仅在Canvas应用程序被视为页面选项卡(左侧和右侧面板)时才会填充,当查看完整的应用程序时(没有左侧)面板)然后没有页面数据。
答案 2 :(得分:0)
这就是我得到答案的方式,我很想知道是否有人有更好的建议
FacebookWebClient fbApi = new FacebookWebClient(FacebookWebContext.Current.AccessToken);
dynamic peramaters = new ExpandoObject();
peramaters.method = "pages.isFan";
peramaters.page_id = ConfigurationManager.AppSettings["PageId"];
dynamic likes = fbApi.Get(peramaters);
if (!(bool)likes) // do stuff