我使用c#sdk构建了一些facebook应用程序。并使用下面的代码检查用户是否喜欢粉丝页面并显示反映该内容的内容。
protected void Page_Load(object sender, EventArgs e)
{
if (Session["SignedRequest"] != null)
{
signedRequest = Session["SignedRequest"].ToString();
}
else
{
signedRequest = Request.Form["signed_request"];
}
if (!string.IsNullOrEmpty(signedRequest))
{
dynamic SignedRequestData;
var DecodedSignedRequest = FacebookWebContext.Current.SignedRequest.Data;
SignedRequestData = DecodedSignedRequest
var RawRequestData = (IDictionary<string, object>)SignedRequestData;
foreach (KeyValuePair<string, object> paird in RawRequestData)
{
Response.Write("key =" + paird.Key.ToString() + " value =" + paird.Value.ToString() + "<br/>");
}
if (RawRequestData.ContainsKey("page"))
{
Facebook.JsonObject RawPageData = (Facebook.JsonObject)RawRequestData["page"];
if (RawPageData.ContainsKey("liked"))
{
if (bool.Parse(RawPageData["liked"].ToString()))
{
LikedContent.Visible = true;
if (!IsPostBack)
{
PageSetup();
}
}
else
{
UnlikedContent.Visible = true;
}
}
else
{
UnlikedContent.Visible = true;
}
}
else
{
DefaultContent.Visible = true;
}
}
else
{
DefaultContent.Visible = true;
}
}
这个问题是,如果我在应用程序上有多个页面,我会遇到跨域问题。可以很容易地解决这个问题,即使用gloabl.asac.cs文件中的p3p头文件。 然而问题仍然存在于野生动物园中。
现在c#sdk的当前版本6建议使用facebook javascript sdk调用打开的图形并检查用户是否喜欢某个页面,然后将其传递给后面的代码我想知道实际上哪个是最好的建立Facebook粉丝专页选项卡应用程序的做法?
当我使用javascript sdk访问用户信息时,我会弹出一个框以授权该应用。我不想要这个。有没有办法围绕这个?
欢呼声
答案 0 :(得分:2)
你可以在
背后的代码中调用这样的图形api方法void CallFacebookApi(string oAuthToken, string userId)
{
string userLikeUrl = "https://graph.facebook.com/me/Likes/" + pageId +"?access_token=" + oAuthToken;
response = requestFBData(userLikeUrl);
if (response.Length > 0)
{
JObject userLike = JObject.Parse(response);
int count = userLike["data"].Count();
if (count > 0){
//user liked your page.
}
else {
//user do not liked your page yet
}
}
}
public string requestFBData(string action)
{
string results = string.Empty;
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(action);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
results = sr.ReadToEnd();
sr.Close();
}
catch (Exception e)
{
if (e.Message.Contains("400"))
{
//invalid reponse
}
}
return results;
}