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ヘッダーを使用すると、これを非常に簡単に修正できます。ただし、問題はまだサファリに残っています。

現在のバージョン6のc#sdkでは、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 に答える