使用全局ID在图表api v2中获取应用用户数据

时间:2014-06-25 23:46:49

标签: php facebook facebook-php-sdk facebook-graph-api-v2.0

因此,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());

我的会话来自getSession上的FacebookCanvasLoginHelper,如其文档中所示,因此我有一个新的访问令牌和已签名的请求。

修改

所以,我解除了我的问题,因为我愚蠢。萨希尔是对的。我的问题是我在一个单独的应用程序中进行测试(不是官方测试应用程序,而是我很久以前创建的用于测试的应用程序)所以有问题的应用程序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开发。

1 个答案:

答案 0 :(得分:1)

你说的是对的 -

  

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

但这是不正确的:但是api的v2也禁止获取具有全局ID的用户数据。从画布应用程序内部调用带有全局ID的图表会产生一个例外,即使用特定于应用程序的ID。

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

很抱歉,我不太了解您使用的SDK语法(我不喜欢使用SDK),但我确信这会有效。您甚至可以在Graph API Explorer中进行测试,只需从(顶部 - 中间)下拉菜单中选择您的应用并致电v1用户的/v2/{user-id},这样您就可以获得结果。你必须在代码中做错事。