FB Canvas应用:获取请求id


FB Canvas app: Get request id

用户发送了一个应用程序请求(使用本机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配置后,一切都如预期的那样工作。