FB Canvas app:获取请求ID

时间:2014-03-24 14:59:54

标签: php facebook facebook-php-sdk

用户已发送应用请求(使用原生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中。

以前,我只需在我的网页上(在iframe内)拨打$_GET['request_ids']即可获取request_id (为什么?因为我需要跟踪发送邀请的人)

然而,这不再适用。我几乎尝试了一切。

根据facebook文档,我之前使用的解决方案是正确的。看到: https://developers.facebook.com/docs/games/requests#deleting (向下滚动一下,到PHP示例)

Facebook是否删除了此功能?那会很难过,我想/希望不会!

人们有类似的问题(所有人都提出了解决方案,不再有效):

真的唯一的解决办法是通过邀请者user_id吗? (如Retrieve User ID of Facebook App Invitor中所述)。如果是这样,当用户点击通知时,我可以检索它吗?

编辑:

我也试过使用: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)

关闭,但没有雪茄。

2 个答案:

答案 0 :(得分:0)

我一直在寻找一个解决方案已经有一段时间了,我能得到的最好的方法是对/me/apprequests进行API调用 - 它将返回应用程序的所有请求。< / p>

我知道你仍然无法弄清楚你曾经点过哪一个(如果你收到了多个邀请),但它要先行一步,直到FB对其事情进行排序......

简单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]);
        };
    }
})

答案 1 :(得分:0)

我最近遇到了同样的问题。但问题不在facebook方面。它实际上是我们的Nginx服务器上的配置问题。

我们在根页面上设置了重定向,它删除了facebook传递给画布应用程序的所有cgi参数。修复Nginx配置后,一切都按预期工作。