如何轻松使用Facebook API实时更新功能?

时间:2015-06-18 17:30:47

标签: javascript php facebook facebook-graph-api

首先,在Facebook实时更新上发布另一个问题道歉。我已经阅读了许多现有的stackoverflow答案和有用的文章,但我仍然无法弄清楚如何将所有内容放在一起。

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

我从Realtime Updates documentation开始,发现这两篇博文很方便:

根据我的理解,要注册实时更新,我需要:

  1. 创建一个WWW Facebook应用
  2. 将Facebook应用指向callback_url
  3. callback_url添加一个php脚本,以便在Facebook调用时处理GET请求(用于验证)和POST请求。
  4. 使用图谱API(v2.3/APP_ID/subscriptions
  5. 注册回调
  6. 将Facebook登录按钮添加到页面(包括所需的范围/权限)并执行登录操作
  7. 理论上,在此之后,Facebook应根据注册的对象和字段POST 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确认回调已正确注册,所以我对我可能缺少的内容毫无头绪。

    我发现this answer并按照

    的建议拨打电话
    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
          }
       ]
    }
    

    所以现在我更加困惑了。

1 个答案:

答案 0 :(得分:2)

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

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