如何使用Graph API获取未读消息?

时间:2014-07-24 17:24:44

标签: java android facebook facebook-graph-api facebook-field-expansion

我正在开发一个获取Facebook未读收件箱消息的应用程序。

以下v2.0 FQL查询正常工作:

SELECT sender, body FROM unified_message 
   WHERE thread_id IN 
         (SELECT thread_id FROM unified_thread WHERE folder = 'inbox' AND unread=1) 
     AND unread=1 
ORDER BY timestamp DESC

因此,我们列出了所有未读消息。


但是,Facebook says

  

Facebook Platform API 2.0版是FQL的最后一个版本   将有空。 2.0之后的版本不支持FQL。请   迁移您的应用程序以使用Graph API而不是FQL。请参阅   我们对当前版本信息的更改日志。

所以,我正在寻找一种方法来使用Graph API。我尝试了以下方法:

Bundle params = new Bundle();
    params.putString("unread", ">0");
    new Request(session,"/me/inbox/",params,HttpMethod.GET,new Request.Callback() {
        public void onCompleted(Response response) {
            ...
        }
    }  
).executeAsync();

没有成功。我获得所有线程,而我只需要未读线程。那怎么办?

1 个答案:

答案 0 :(得分:2)

当我盲目引用以下Facebook通知时,我很抱歉I gave

  

但是,您不应再使用FQL:

     

Facebook平台API 2.0版是FQL可用的最后一个版本。 2.0之后的版本不支持FQL。请   迁移您的应用程序以使用Graph API而不是FQL。请参阅   我们的当前版本信息的更新日志。

这种说法是对的,但遵循它并不是很聪明。


确实,我进一步检查并发现:

我没想到Graph API太弱了。 Graph API使得无法通过过滤任何字段来构建请求。例如,我们不能执行简单的操作,例如:

  • me/threads?unread_count>0
  • me/threads?fields=unread_count.more(0)

现在使用Graph,您必须遍历所有线程,并检查哪个线程有unread > 0。你会浪费时间和带宽。此外,message表格甚至没有unread字段,这使您无法找到任何特定的未读消息。

所以,最好是继续使用FQL。你现在安全了。到2016年,Facebook可能会改进我们使用Graph API查询的方式。

等等......