首先,很抱歉在Facebook实时更新上发布了另一个问题。我已经阅读了许多现有的堆栈溢出答案和有用的文章,这些文章有所帮助,但我似乎仍然无法弄清楚如何将所有内容放在一起。
我所要做的就是在用户或页面实时更新(无论是状态/评论/喜欢/等)时触发。
我从实时更新文档开始,发现这两篇博客文章很方便:
- 脸书实时更新
- 脸书实时更新 API 教程 - 第一部分
据我了解,要注册实时更新,我需要:
- 创建一个万维网脸书应用程序
- 将 Facebook 应用指向
callback_url
- 在
callback_url
添加一个 php 脚本,以便在 Facebook 调用时处理 GET 请求(用于验证)和 POST 请求。 - 使用图形 API 注册回调 (
v2.3/APP_ID/subscriptions
) - 将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/