0

我正在尝试将一条信息(使用查询字符串)传递给我的 Facebook 页面选项卡应用程序。

例如,如果用户单击此 URL:

- http://apps.facebook.com/myappname/?app_data=mydata

我希望能够在应用程序中访问“mydata”。

根据我所做的阅读,Facebook 不允许GET请求,但可以使用app_dataand来做到这一点signed_request

但是,我无法找到有关如何使用 javascript SDK(甚至可能吗?)和 .NET(理想情况下,我可以仅使用 JavaScript 来实现)的任何信息。我不知道如何使用 signed_request 设置和读取数据,而有关 signed_requests 的文档让我感到困惑,而不是帮助。我真的很想要有关如何实现此功能的简单说明。

编辑:

我想我几乎想通了。如果其他人正在寻找这个问题的答案,我把到目前为止我所做的放在下面。另外,如果您看到任何改进的空间,请告诉我。我不认为这是完美的,但它确实有效。

首先,网址需要是页面标签网址,而不是应用程序的直接网址(就像我在上面发布的那样):- http://www.facebook.com/pages/PageName/########? sk=app_#########&app_data=mydata

这是对我有用的javascript代码:

//get value of signed request and split it 
var signedRequest = $('#mainContent_hfSigned').val().split(".");

//decode json (this does not work on ie - needs to be replaced)
var decodedJson = window.atob(signedRequest[1]);

//parse json to gain access to parameters
var jsonParams = jQuery.parseJSON(decodedJson);

//append the app_data varible to ensure it's being read properly
$('.message').append('Your app_data param is "' + jsonParams.app_data + '"')

在 jsfiddle 上:http: //jsfiddle.net/C3xsm/1/

我知道我仍然需要做的一件事是将 atob 替换为 javascript 的 base64url 解码器。我正在考虑使用这个:

http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js

如果效果好,我会在这里更新。或者如果有人知道更好的方法,请告诉我。

4

1 回答 1

0

理想情况下,我可以只用 JavaScript 来实现它

这是不可能的,因为您已经发现 signed_request 参数已发布到您的页面,而 JavaScript 本身无法访问 POST 参数。

关于signed_request 参数的文档有关于如何在服务器端解析/解码的说明;该示例使用 PHP,但应该很容易将基本算法(如果您可以调用它的话)转移到您的 .NET 环境中。

于 2012-07-31T07:25:47.920 回答