2

我已经使用 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 标头。然而,这个问题仍然存在于 Safari 中。

现在,c# sdk 的当前版本 6 建议使用 facebook javascript sdk 来调用打开的图形并检查用户是否喜欢一个页面,然后将其传递给后面的代码,我想知道实际上构建的最佳实践是什么Facebook粉丝页面标签应用程序?

当我使用 javascript sdk 访问用户信息时,我会弹出一个框来授权该应用程序。我不想要这个。有办法解决这个问题吗?

干杯

4

1 回答 1

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;
  }
于 2012-05-24T05:40:50.510 回答