因此,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.
测试应用上的开发页面说:
这似乎是公然不正确的。我正在使用我的生产数据库的副本。我知道我的Facebook ID。它甚至不会为生产应用程序提供我自己的ID,更不用说其他任何人了。这个新东西是否仅适用于全新的应用程序或其他东西?关于这样的事情,我现在准备放弃Facebook开发。
答案 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}
,这样您就可以获得结果。你必须在代码中做错事。