如何在FQL查询中使用用户表的设备字段?

Wie*_*man 1 facebook facebook-fql facebook-graph-api

我希望FQL查询的结果只返回在其设备列表中具有iOS设备的用户的朋友.以下查询:

SELECT uid, first_name, devices 
FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
ORDER BY profile_update_time DESC 
LIMIT 0, 100
Run Code Online (Sandbox Code Playgroud)

返回如下列表:

{
  "data": [
    {
      "uid": 12345678, 
      "first_name": "John", 
      "devices": [
        {
          "os": "iOS", 
          "hardware": "iPhone"
        }
      ]
    },
    {
      "uid": 1234345678, 
      "first_name": "Pete", 
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想只检索至少拥有一个os为"iOS"的设备的用户.我试过包括

devices.os = "iOS"
Run Code Online (Sandbox Code Playgroud)

在查询中,但这返回了一个错误.

这可以通过FQL查询吗?或者这应该在客户端解决?

muh*_*hqu 7

刚刚发现,它IS可能!您可以将IN操作符与devices列一起使用.无需限制操作系统或硬件.

示例:所有拥有iPhone的朋友: 试试

SELECT uid, name, devices FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  AND "iPhone" IN devices
ORDER BY profile_update_time DESC 
LIMIT 0, 100
Run Code Online (Sandbox Code Playgroud)

示例:所有拥有iOS设备的朋友(例如iPhone或iPad): 试用

SELECT uid, name, devices FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  AND "iOS" IN devices
ORDER BY profile_update_time DESC 
LIMIT 0, 100
Run Code Online (Sandbox Code Playgroud)

提示:如果您想使用此查询来构建自定义朋友选择器,以便向尚未安装iOS应用但具有iOS设备的Facebook好友发送邀请,则需要在您的WHERE子句中包含以下内容:

AND is_app_user = 0
Run Code Online (Sandbox Code Playgroud)