Facebook App墙贴重定向

时间:2012-10-04 23:48:50

标签: facebook facebook-graph-api facebook-javascript-sdk

也许这是一个棘手的问题,但无论如何:

我在外部服务器上运行了一个facebook应用程序。让我们说我的画布网址是

http://mydomain.com/myapp/

这已集成到一个页面中,我可以使用类似

的网址访问该应用
http://facebook.com/mypage/app_123456789

其中123456789是我的申请ID

用户可以在墙上分享某些内容,并且该分享包含一个返回我的应用的网址。

所以我想说我有一个共享的内容,它有一个像

这样的网址
http://mydomain.com/myapp/content/1

如果用户点击墙上的帖子,这就是用户去的地方。

现在我的问题显然是我希望这个网址重定向回到我的脸谱页面。

将所有内容重定向到

很容易
http://facebook.com/mypage/app_123456789

但是这会将我带到我的应用程序的主页面,而不是用户共享的特定内容。

有办法做到这一点吗?比如,我可以将一个参数传递给facebook,告诉我要加载哪个页面?

1 个答案:

答案 0 :(得分:1)

是的,你可以! Facebook在重定向到应用程序的画布页面时不会传递任何旧参数,但如果以某种方式操作参数,您将获得对它们的访问权。

您必须按以下格式传递所有参数 -

https://apps.facebook.com/yourapp?app_data=key1$value1,key2$value2,...

到达画布网址后,您可以从signed_request内的app_data中检索数据。一旦你有参数的内容,你应该有这样的东西 -

key1$value1,key2$value2

现在只是将该字符串解析为键和值数组的问题。在这个具体的例子中,我选择了一个dolar字符来将键与值分开,但是从下面的代码中可以看出,你可以使用你想要的任何东西来分离参数和键/值对 -

// initialize parameter array
$getParams = array();
$signedRequest = $facebook->getSignedRequest();
// separate each parameter
$app_data = explode(",",$signedRequest['app_data']);
foreach ($app_data as $param_key => $param_value) {
  // separate each key/value pair
  list($key,$value) = explode("$",$param_value);
  $getParams[$key] = $value;
}

在此阶段,您的$getParams数组应该看起来像这样

Array(
  'key1'=>'value1',
  'key2'=>'value2'
)

现在您可以将参数传递给您的应用程序,您将能够根据从引用URL传递给它的数据来决定要显示的内容。