Facebook webforms app获取app_data查询字符串

时间:2011-07-08 13:38:08

标签: facebook-c#-sdk app-data

如何从Facebook webforms应用程序获取app_data查询字符串? 我希望能够在查询字符串中发送一些信息,这样我就可以在我的应用程序上显示不同的主屏幕。 该应用程序位于页面标签中。

实施例: http://www.facebook.com/pages/APPNAME/157772164271503?sk=app_230501256972470&app_data=Page.aspx

如何从app_data获取“Page.aspx”? 我需要它将用户重定向到Default.aspx

的不同页面

我找到了解决方案。 Get Querystring from facebook tab app using asp.net

using Newtonsoft.Json.Linq;
using System.Text;

public partial class Page_Default : System.Web.UI.Page
{
    protected string output = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        output = "Whole thing:" +Request.Form["signed_request"];
        output += "Second part:" + Request.Form["signed_request"].Split('.')[1];

            try
            {
                string payload = Request.Form["signed_request"].Split('.')[1];
                var encoding = new UTF8Encoding();
                var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
                var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
                var json = encoding.GetString(base64JsonArray);
                var o = JObject.Parse(json);

                output += "Decoded:" + json;

                bool liked = (bool)o.SelectToken("page.liked");

                output += "Liked:" + liked.ToString();
            }
            catch (Exception ex)
            {
                output += "Extract failed: " + ex.Message;
            }
    }
}

this post也很有帮助

只需要在facebook app settings ex中添加直接页面。 www.site.com/deafult.aspx不是www.site.com

2 个答案:

答案 0 :(得分:3)

在Facebook发布的JSON数组中,其中一个顶级键是'app_data',如果已指定的话。所以你可以像'喜欢'那样去做,而不是'page.liked'它只是'app_data'(而不是布尔值)

答案 1 :(得分:-2)

facebook不会将查询字符串传递给您的页面。它会从不同的URL向您的页面发布帖子,因此您无法从页面加载中读取查询字符串。 我没试过这个,但是你可以尝试在页面的js中访问window.top.location.search。