我可以在 Facebook Graph API 中查询可选字段吗?

Can I query for an optional field in the Facebook Graph API?

我有用户和 Facebook 页面的 OAuth2 访问令牌,但我的数据库中没有存储类型区分。我希望能够使用完全相同的 Graph API 查询获取有关 User/Page 的基本信息 - 但对于用户,我希望在其之上获取电子邮件字段。

  1. GET v2.5/me?fields=name,email // 用户令牌

    成功。

  2. GET v2.5/me?fields=name,email // 页面标记

    错误。 (#100) Tried accessing nonexisting field (email) on node type (Page)

因为我不知道令牌属于用户还是页面,所以我无法轻易地从查询中删除 ,email 字段。有什么方法可以指定 "optional" email 字段,这样我就不会出现上述错误吗?

P.S.: 目前,我在 ,email 导致错误的情况下执行第二个请求。

不,如果您请求的字段在您请求的对象类型中不存在,API 将失败 - 如果它不存在 [并且直到最近才存在],有一大堆 class 由请求不存在的字段的人引入的错误,包括通过拼写错误

如果您在访问 ID 时不知道它是什么类型的对象,则您的应用检索和存储数据的方式可能存在其他问题 - 对于本例,您应该使用元数据 ( ?metadata=true) 或 Facebook's Debug Tool 清理哪些令牌是用户令牌,哪些是页面令牌以及它们用于哪个页面或用户 - 一旦您知道,存储该信息并在将来使用它 - 如果直接使用 API 并检查元数据,请在包含元数据时检查响应中的 type,对于用户或页面令牌,它将是 'user' 或 'page'

您的应用确实不应该保存页面令牌但不知道它们用于哪个页面,因为您需要页面管理员的用户访问令牌才能从 API 检索该令牌;我建议您在第一次保存页面令牌时以结构化方式存储用户令牌和页面令牌,以避免将来出现这种混淆