1

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は次のように述べています。

Facebook プラットフォーム API のバージョン 2.0 は、FQL を利用できる最後のバージョンです。2.0 以降のバージョンは FQL をサポートしません。FQL の代わりに Graph API を使用するようにアプリケーションを移行してください。現在のバージョン情報については、変更ログを参照してください。

そのため、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();

成功せずに。私はすべてのスレッドを取得しますが、未読のスレッドのみが必要です。それをどうするか?

4

1 に答える 1

3

次のFacebookの通知をやみくもに引用したときに行ったアドバイスについては申し訳ありません。

ただし、FQL はもう使用しないでください。

Facebook プラットフォーム API のバージョン 2.0 は、FQL を利用できる最後のバージョンです。2.0 以降のバージョンは FQL をサポートしません。FQL の代わりに Graph API を使用するようにアプリケーションを移行してください。現在のバージョン情報については、変更ログを参照してください。

この声明は真実ですが、それに従うのはあまり賢明ではありません。


実際、さらに調べてみると、次のことがわかりました。

  • v2.0 は 2016 年 8 月 7 日まで利用可能です
  • Graph API は現在の使用にはまだ適していません。

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 を使用したクエリの方法を改善するでしょう。

成り行きを見守る...

于 2014-08-13T19:40:39.277 に答える