查询Facebook使用/可使用的Graph API版本。

5
我是一款利用Facebook Graph API的Wordpress插件的作者。最近,一些Graph调用失败了,只有新用户受到影响。经过一番挖掘,我相信我已经找到了原因:https://developers.facebook.com/docs/apps/versions 特别是,“我的应用程序可以调用早于当前版本的版本吗?”这一节说明:
一个应用程序可以调用创建时可用的最新版本的API
换句话说,即使我的Graph调用指定了明确的版本(例如https://graph.facebook.com/v2.0/me),对于新创建的应用程序,Facebook也会忽略“v2.0”并调用2.1。实际上,像这样的FQL查询:

https://graph.facebook.com/v2.0/fql?q=(myquery)&access_token=(mytoken)

产生的结果:

"error": { "message": "(#12) fql is deprecated for versions v2.1 and higher", "type": "OAuthException", "code": 12

因此,这引出了我的第一个问题:我是否漏掉了什么?对我来说,这种行为似乎使版本控制变得几乎无用;无论我的调用是否指定了v2.0,Facebook都会调用在该应用程序创建时存在的最新版本。因此,Facebook给出的支持旧API版本的两年时间窗口(请参见https://developers.facebook.com/docs/apps/upgrading)没有任何作用,因为我总是需要支持最新版本的发布(否则,使用新创建的应用程序的新用户将无法正常工作)。是吗?

第二个问题(假设上面的是正确的):我如何查询 Facebook 当前应用程序正在使用的版本(或者说可供使用的版本)?因为明确指定 v2.0 并不意味着它实际上会使用 v2.0,找出它是否使用了意外的版本至少可以帮助预防可能的错误 - 也就是说,将其包含在用户错误报告中是有价值的信息。我预计这些信息必须以某种方式包含在访问令牌中,但我已经搜索了很多地方,无法弄清楚如何询问“此令牌适用于哪个 API 版本”(或者,“该应用程序支持哪些 API 版本”或类似问题)。

我两天前得到了同样的问题,但是我还没有得到任何答案。请帮忙。 - ViJay
2个回答

7
你需要区分API版本和应用程序创建。正如你所说,Facebook支持旧版本的Graph API,但会在后继版本发布两年后停止使用。https://developers.facebook.com/docs/apps/versions#howlong文档说明:一个版本将在其后继版本发布两年后不再可用。例如,如果API版本2.0于2014年4月30日发布,API版本2.1于2014年8月7日发布,则v2.0将在2016年8月7日到期,即v2.1发布两年后。如果没有指定版本信息调用Graph API会发生以下情况:未指定版本的调用将默认使用API的最早版本。
如果您的应用程序是在2014年8月1日创建的,您将能够调用v2.0,但不能调用v1.0。如果您的应用程序是在2014年4月1日创建的,则可以调用v1.0(但仅在v1.0于2015年4月30日之前被弃用)。如果您的应用程序是在2014年8月7日之后创建的,则无论您指定的版本是什么,都只能调用v2.1。
这在以下网址中有说明:
- https://developers.facebook.com/docs/apps/versions#unversioned_calls - https://developers.facebook.com/docs/apps/versions#calling_older_versions 一个应用程序可以调用在其创建时最新可用的API版本以及在应用程序创建后启动的任何新的未过时版本。
所以,换句话说,Facebook应用创建的日期越早,就越相关,因为这将决定应用程序能够使用的Graph API版本。要确定应用程序的创建日期,您可以使用
/{app_id}?fields=id,creation_time

endpoint是一个API接口,它会返回所查询的App创建时的Unix时间戳。请参考https://developers.facebook.com/docs/graph-api/reference/v2.1/app/#readfields。你可以使用PHP或JavaScript将Unix时间戳转换为日期格式。


是的,我确实读了所有的内容。但对我来说,Facebook提供版本化API并声称允许我们选择使用哪个版本,但却不尊重我们的选择,这似乎毫无意义。 - J23
关于确定版本:我想查看创建日期,手动查阅文档中的发布计划,并使用这些信息推断API版本可能会起作用。有点。但是这似乎是一个非常迂回/不良的解决方案(例如,应用程序必须在哪个时区的哪个时间创建才能被视为预发布或发布后?)。应该有一种更可靠的方法来直接查询实际使用的版本,以编程方式 - 而不是从其他信息中猜测(并要求人类阅读其文档并跟踪发布日期)。 - J23
是的,你做到了。我的评论并不涉及你答案的质量 - 只是API设计很差 :) 我想让这个问题保持开放一段时间,以防有人能够提出更多编程方法(即不需要人工阅读文档并手动跟踪发布日期和版本)......但如果经过一段时间后仍然似乎FB没有合理的方法来解决这个问题,当然我会接受你的答案 :) - J23
我完全同意。如果一开始我知道他们的文档、维护、易损等习惯有多糟糕......我就永远不会在他们的平台上构建任何东西了。老实说,我插件问题中好的25%以上都是源自突发/未经宣布的更改或错误(用户责备我,在后者情况下,我通常只能等待Facebook解决它: P)。 - J23
看起来没有人介入,我会假设这意味着这可能是Facebook目前提供的最佳方法。已接受。 - J23
显示剩余2条评论

2
请注意,检查应用程序年龄的能力略有改变。现在是:
/{app_id}?fields=id,created_time 它现在还返回一个实际的时间戳。
{ "id": "12341234123412341234fake", "created_time": "2011-11-30T21:00:56+0000" }
手动测试这个功能的简单方法是通过 Graph API Explorer 在此处:https://developers.facebook.com/tools/explorer/
只需确保选择正确的应用程序和应用程序令牌即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接