如何輕鬆地使用Facebook API即時更新功能


How to easily use the Facebook API Realtime Updates feature?

首先,很抱歉在Facebook实时更新上发布了另一个问题。我已经阅读了许多现有的堆栈溢出答案和有用的文章,这些文章有所帮助,但我似乎仍然无法弄清楚如何将所有内容放在一起。

我所要做的就是在用户或页面实时更新(无论是状态/评论/喜欢/等)时触发。

我从实时更新文档开始,发现这两篇博客文章很方便:

  • 脸书实时更新
  • 脸书实时更新 API 教程 - 第一部分

据我了解,要注册实时更新,我需要:

  1. 创建一个万维网脸书应用程序
  2. 将 Facebook 应用指向callback_url
  3. callback_url添加一个 php 脚本,以便在 Facebook 调用时处理 GET 请求(用于验证)和 POST 请求。
  4. 使用图形 API 注册回调 ( v2.3/APP_ID/subscriptions
  5. 将Facebook登录按钮添加到页面(包括所需的范围/权限)并执行登录操作

理论上,在此之后,Facebook 应该根据注册的对象和字段发布到callback_url

我想我已经成功注册了回调。这里大致是我得到的输出(MY_CB_URL替换实际的 URL):

{
  "data": [
    {
      "object": "user", 
      "callback_url": "MY_CB_URL", 
      "fields": [
        "statuses"
      ], 
      "active": true
    }, 
    {
      "object": "page", 
      "callback_url": "MY_CB_URL", 
      "fields": [
        "feed"
      ], 
      "active": true
    }
  ]
}

回调 php 脚本如下所示:

<?php
define('VERIFY_TOKEN', 'vToken');
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'GET' && $_GET['hub_mode'] == 'subscribe' && $_GET['hub_verify_token'] == VERIFY_TOKEN) {
    echo $_GET['hub_challenge'];
} else if ($method == 'POST') {
    $out = "";
    try {
        $updates = json_decode(file_get_contents("php://input"), true);
        $out = print_r($updates, true);
        error_log('updates = ' . $out);
    } catch (Exception $e) {
        error_log('Caught exception: '.$e->getMessage());
        $out = $e->getMessage();
    }
    $file = './log.txt';
    $current = file_get_contents($file);
    $current .= $out;
    file_put_contents($file, $current);
}
?>

遇到的问题是,当我第一次设置它时,我收到了一个 POST 请求,但之后就没有了。我没有收到任何错误,并且 API 确认回调已正确注册,所以我对我可能缺少的内容一无所知。

我发现了这个答案,并按照建议拨打

电话
https://graph.facebook.com/PAGE_ID/tabs?app_id=APP_ID&access_token=PAGE_ACCESS_TOKEN

并得到了这样的回应:

{
   "data": [
      {
         "id": "PAGE_ID/tabs/likes",
         "name": "Likes",
         "link": "https://www.facebook.com/pages/PAGE_NAME/PAGE_ID?sk=likes",
         "is_permanent": true,
         "position": 2,
         "is_non_connection_landing_tab": false
      },
      {
         "id": "PAGE_ID/tabs/photos",
         "image_url": "https://fbcdn-photos-c-a.akamaihd.net/hphotos-ak-xaf1/t39.2080-0/851586_10151609549247733_1069686154_n.gif",
         "name": "Photos",
         "link": "https://www.facebook.com/pages/PAGE_NAME/PAGE_ID?sk=photos",
         "application": {
            "name": "Photos",
            "id": "PHOTO_ID"
         },
         "is_permanent": false,
         "position": 1,
         "is_non_connection_landing_tab": false
      }
   ]
}

所以现在我更加困惑了。

https://graph.facebook.com/PAGE_ID/tabs发出 POST 请求已经过了——您现在需要使用/PAGE_ID/subscribed_apps来订阅页面的更新。

https://developers.facebook.com/docs/graph-api/reference/page/subscribed_apps/