这是我向stackoverflow提出的第一个问题,所以如果有什么问题,请告知。。问题是Facebook实时更新:我已经成功创建了对页面的订阅,它是管理员用户(创建了测试页面和测试应用程序),用户同意管理页面、read_stream、read_friendlist、read_insights、publish_actions和许多用户数据(关于、电子邮件等)当我用边缘/订阅查询GET to Graph api时,我得到的结果是:
{
"data": [
{
"object": "user",
"callback_url": "LIVE_CALLBACK_URL",
"fields": [
"feed"
],
"active": true
},
{
"object": "page",
"callback_url": "LIVE_CALLBACK_URL",
"fields": [
"built",
"description",
"email",
"feed",
"location",
"name",
"personal_info",
"written_by"
],
"active": true
}
]
}
所以,这已经解决了,在那之后,我搜索了为什么Facebook没有向我发送任何更新(我将其记录到somefile.txt)。所以我发现你需要用/tabs查询Graph api来为我的api创建页面选项卡。当我查询它返回了"success",所以它被创建了(找不到它存储在哪里,但它正在工作…)。之后,我在我的个人资料上创建了一些数据,以进行测试,并在页面上查看Facebook是否正在发送任何更新,它突然发送了一个更新,该更新是对我的用户个人资料帖子的评论(在时间线上共享)。回应是:
14:17 05.02.2015
Array
(
[object] => user
[entry] => Array
(
[0] => Array
(
[uid] => ****my_fb_id****
[id] => ****my_fb_id - not_someone_else****
[time] => 1423146339
[changed_fields] => Array
(
[0] => feed
)
)
)
)
所以脸书发送的是空的订阅源,可能是一些权限或其他什么,但在那之后,我发了更多的帖子,人们对它发表了评论(在用户档案和测试页面上),但脸书没有向我的网页发送任何更新或打电话。那么,过去有人面临过这个问题吗?他是如何解决这个问题的?从Facebook接收更新的部分是:
$method = $_SERVER['REQUEST_METHOD'];
if(isset($_GET['hub_mode']) && isset($_GET['hub_verify_token'])){
if (trim($method) == 'GET' && trim($_GET['hub_mode']) == 'subscribe' && trim($_GET['hub_verify_token']) == VERIFY_TOKEN) {
print $_GET['hub_challenge'];
}
}
else if ($method == 'POST') {
$updates = json_decode(file_get_contents("php://input"), true);
$file = 'log.txt';
$current = file_get_contents($file);
@$results = print_r($updates,true);
$current .= $results;
file_put_contents($file, $current);
}
我已经尽可能详细地说明了我的问题。。。搜索过,但不太明白为什么它不起作用。
除了使用@CBroe概述的过时方法外,我认为您有一个误解:Facebook不会向您发送已更改的数据,而是发生更改的对象(及其字段/边缘)用于用户对象更改。
对于Pages,您可以接收更改本身(FB请求中的changed_fields
与changes
字段)。
参见
- https://developers.facebook.com/docs/graph-api/real-time-updates/v2.2#receiveupdates
成功创建订阅后,每次(对所选字段或边)发生更改时,Facebook都会向您的回调URL发出HTTPPOST请求。
这意味着你需要从Facebook获得的信息对象中构建一个单独的请求。在您的示例中,它将是对用户的提要的请求
GET /{user_id}/feed
以查询最近的更改。