我的应用程序作为选项卡托管在FaceBook中,我希望在添加应用程序以存储在我的逻辑中时获取页面ID。
如何获取页面ID,我知道它存储在URL中,但是当我尝试从页面作为服务器变量获取它时,即使我的应用程序配置为iFrame
,我也没有得到它?但这是获取父URL的标准方法。
C#:
string t= request.serverVariables("HTTP_REFERER");
//doesn't get FB page url even if your app is configured as iframe ?!! @csharpsdk #facebook devs
任何帮助?
非常感谢。
答案 0 :(得分:4)
我是这样做的:
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
}
}
答案 1 :(得分:3)
页面ID未存储在URL中;它会在signed_request表单参数中发布到您的页面。有关详细信息,请参阅此Facebook开发人员blog post。
您可以使用Facebook C#SDK中的FacebookSignedRequest.Parse方法来解析已签名的请求(使用您的应用秘密)。完成此操作后,您可以从Page JSON对象中提取页面ID,如下所示:
string signedRequest = Request.Form["signed_request"];
var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, SignedRequest);
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"];
}
希望这有帮助。
答案 2 :(得分:1)
这里的解决方案与Andy Sinclairs在VB中的解决方案相同:
Dim pageId as Int64 = 0
Dim signed_request As String = Request.Form("signed_request")
Dim req = FacebookSignedRequest.Parse(AppSettings("FacebookSecret"), signed_request)
Dim data As IDictionary(Of String, Object) = req.Data
If data.ContainsKey("page") Then
Dim RawPageData As Facebook.JsonObject = data("page")
If RawPageData.ContainsKey("id") Then
pageId = RawPageData("id")
End If
End If