4

因此,Facebook 的图形 API 的第 2 版引入了特定于应用程序的 ID,以保护用户隐私免受垃圾邮件或类似内容的侵害。但他们表示,使用全局 ID 在 v1 中添加您的应用的用户将继续向您发送他们在 v2 中的全局 ID,以保持您的应用向后兼容。

这一切都很好,但是 api 的 v2 也禁止使用全局 ID 获取用户数据。从画布应用程序内部调用具有全局 ID 的图形会给出一个异常,说明要改用应用程序特定的 ID。

我在这里有点不知所措。我正在尝试获取我的应用程序用户的随机子集的基本信息,以显示给当前用户,该用户不一定是朋友。但是我的大多数用户都在我的数据库中存储了全局 ID,因为他们很久以前就加入了。似乎如果我的应用是新的,那么存储在我的数据库中的所有 ID 都将是特定于应用的,因此我将能够获取他们的信息。这向我表明,Facebook 无意禁止我获取我想要的数据。由于拥有旧应用程序的不幸情况,这对我来说是不可能的。

我有什么办法可以得到这些数据吗?我知道我可以恢复到图表的 v1,但这将在 2015 年 4 月 30 日消失。我只想要最基本的信息,并且只显示名称。

我正在使用 PHP SDK 的第 4 版。我的请求如下所示:

(new FacebookRequest(
            self::$session, 'GET', '',
            array('ids' => implode(',', $userIds))
        ))->execute()->getGraphObjectList(GraphUser::className());

我的会话来自调用他们getSessionFacebookCanvasLoginHelper文档中显示的,所以我有一个新的访问令牌和签名请求。

编辑

所以,我撤销了我的问题,因为我很笨。萨希尔是对的。我的问题是我正在使用单独的应用程序进行测试(不是官方测试应用程序,而是我很久以前创建的用于测试的应用程序),所以有问题的应用程序 ID 并没有实际添加应用程序,所以我可以不知道他们的信息。哎呀。迁移到官方测试应用程序的充分理由。

再次编辑

我取消了我的问题。Facebook是愚蠢的。我创建了一个与我的真实应用程序相关联的官方测试应用程序,它为我自己提供了一个特定于应用程序的 ID,而不是为主应用程序提供的 ID。我查看了我之前遇到问题的页面,同样的例外:

Facebook\FacebookAuthorizationException: The global ID 693041250 is not allowed.
Please use the application specific ID instead.

测试应用程序的开发页面说:

  • 测试应用程序与您的生产应用程序共享相同的应用程序范围的用户 ID 命名空间,从而可以更轻松地调试应用程序范围的 ID 问题,或者在您使用生产数据库的副本进行开发的情况下。

这显然是不正确的。我正在使用我的生产数据库的副本。我知道我的 Facebook ID。它甚至不会给出我自己为生产应用程序提供的 ID,更不用说其他人的了。这个新东西是否只适用于全新的应用程序或其他东西?在这一点上,我已经准备好放弃 Facebook 的开发,因为这样的事情。

4

1 回答 1

1

你说的很对——

使用全局 ID 在 v1 中添加您的应用的用户将继续向您发送他们在 v2 中的全局 ID,以保持您的应用向后兼容。

但这是不正确的:但 api 的 v2 也禁止使用全局 ID 获取用户数据。从画布应用程序内部调用具有全局 ID 的图形会给出一个异常,说明要改用应用程序特定的 ID。

当然,您将获得具有 v2 API 返回的 id 的用户数据(无论是 global-id 还是 app-specific-id)。

抱歉,我不太了解您使用的 SDK 语法(我不喜欢使用 SDK),但我相信这会起作用。您甚至可以在Graph API Explorer中对此进行测试,只需从(中上)下拉列表中选择您的应用程序/v2/{user-id}并调用v1 用户,这将为您提供结果。您一定在代码中做错了什么。

于 2014-06-26T06:56:10.913 回答