用户发送了一个应用程序请求(使用本机fb.ui:apprequest)。当他的朋友打开通知("xxx邀请你到APP")时,URL看起来像这样:
https://apps.facebook.com/app_name/?fb_source=notification&
request_ids=THE_REQUEST_ID&ref=notif&app_request_type=user_to_user&
notif_t=app_request
在这个页面上,我的网页显示在一个iframe内。
以前,我可以简单地调用:$_GET['request_ids']
在我的页面(内部iframe)获得request_id (为什么?因为我需要跟踪谁发送了邀请)。
然而,这不再起作用。我什么都试过了。
根据facebook文档,我之前使用的解决方案是正确的。看到的:https://developers.facebook.com/docs/games/requests#deleting (向下滚动一点,到PHP示例)
Facebook删除这个功能了吗?那将是悲哀的,我想/希望不是!
人们有过类似的问题(都提出了解决方案,但不再有效):
- 在canvas应用程序中获取request_ids
- Facebook请求ID检索和删除
- 检索Facebook App Invitor的用户ID
唯一的解决方案真的是传递邀请者user_id吗?(根据Facebook App Invitor的Retrieve User ID建议)。如果是这样,当用户单击通知时,我可以检索它吗?
编辑:我也试过使用:exit(print_r($facebook->getSignedRequest(), TRUE));
-输出:
algorithm => HMAC-SHA256
issued_at => 1395696960
user =>
country => dk
locale => da_DK
age =>
min => 21
user_id => the_user_id (ONLY WHEN APP HAS ALREADY BEEN AUTHED IT SEEMS)
我一直在寻找解决方案,相当长一段时间,我能得到的最好的是做一个API调用/me/apprequests
-它将返回所有的请求从应用程序。
我知道你仍然不知道你点击了哪一个(如果你收到了多个邀请),但这是一个进步,直到facebook分类它的东西…
简单的JS示例:
FB.api('/me/apprequests', function(r){
if (r && r.data) {
for (var i = 0; i < r.data.length; i++) {
var id = r.data[i].id.split('_')[0]; // this is the request id
console.log(id, r.data[i]);
};
}
})
我最近也遇到了同样的问题。但问题不在facebook这一边。这实际上是我们Nginx服务器上的一个配置问题。
我们在根页面上设置了一个重定向,它删除了facebook传递给canvas应用程序的所有cgi参数。修复Nginx配置后,一切都如预期的那样工作。