也许这是一个棘手的问题,但无论如何:
我在外部服务器上运行了一个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,告诉我要加载哪个页面?
答案 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传递给它的数据来决定要显示的内容。