【问题标题】:Get Facebook User ID from app-scoped User ID从应用范围的用户 ID 获取 Facebook 用户 ID
【发布时间】:2014-05-22 11:43:34
【问题描述】:

随着从 Facebook Graph API v1.0 升级到 v2.0,Facebook 正在使用“应用范围内的用户 ID”,因此我无法再在我的应用中看到“原始”用户 ID。

我总是使用实时更新和图形 API 调用(例如“https://graph.facebook.com/{postId}/comments”)来分析应用所在 Facebook 页面上的用户活动。但由于这些数据包含原始用户 ID,我无法再将活动与我的注册用户匹配!

那么有没有办法从应用范围的用户 ID 中获取原始 Facebook 用户 ID?还是反过来?

编辑:

我最终使用此处提到的 API 方法为我的所有用户获取了应用范围的 ID:https://stackoverflow.com/a/29154912/3432305,并将它们与旧 ID 一起存储在我的数据库中。 然后,每当 RTU 到达时,对于“老用户”,我会检查哪个用户拥有这个应用范围的 ID 并处理更新。 至少 Facebook 在 API v1.0 被弃用前几天设法修复了 cmets (Get Facebook User ID from app-scoped User ID) 中提到的错误,因此对于我的应用程序的新用户来说,它就像一个魅力。到目前为止...

【问题讨论】:

  • 你不应该有这个问题,因为 Graph API v2.0 是向后兼容的,如果用户之前已经授权了你的应用程序,那么你总是会得到这个用户的原始用户 ID。如果用户现在是新授权您的应用程序,那么您总是会得到 app_scoped_id 。 graph.facebook.com{postId}/cmets 可能会返回应用范围内的用户 ID 或原始用户 ID 取决于此用户是否为旧用户。
  • 是的,我知道向后兼容性。实际问题是实时更新。那里我只有“原始”用户 ID...
  • 这里有一个关于使用错误 ID 进行实时更新的开放错误:developers.facebook.com/bugs/744639905588610
  • 我很想看到这个错误被修复,这会让我的事情变得更容易:)谢谢你的信息!
  • 顺便提一下,facebook.com/app_scoped_user_id/264254410443692 这种类型的 url 适用于您想从应用范围内的用户 ID 访问用户配置文件的情况

标签: facebook facebook-graph-api facebook-apps


【解决方案1】:

来自您与 Johannes N. 之间的对话。

我能否通过原始用户获取应用范围的 ID(对于我拥有的应用) ID。这也会有所帮助。

要从原始用户 ID 获取应用范围的 ID,可以通过以下方式轻松完成:

https://graph.facebook.com/v2.0/?ids=http://www.facebook.com/USER_ID&access_token=ACCESS_TOKEN

你可以使用 fields 参数只返回 id:

https://graph.facebook.com/v2.0/?ids=http://www.facebook.com/USER_ID&fields=id&access_token=ACCESS_TOKEN

ids 代替 id 的好处是可以查询多个 id:

*www 可以删除以减少字符数。

也可以轻松地从用户名中获取应用范围的 ID:

https://graph.facebook.com/v2.0/?ids=http://www.facebook.com/USERNAME&access_token=ACCESS_TOKEN

【讨论】:

  • 酷!我真的更希望获得具有应用程序范围 ID 的 RTU - 但如果这不可能,您的解决方案将对我有很大帮助!如果可以的话,我会投票赞成.. ;)
  • 似乎不再起作用了。尝试使用上述用户 ID 为 4 的 Facebook Graph Explorer 现在会返回 "id": "http://www.facebook.com/4”
  • 我想我会追踪所有有名字的老用户来找出真实的ID。
【解决方案2】:

没有(简单/明显)的可能性根据应用范围的用户 ID 获取真实的用户 ID。

【讨论】:

  • 我是这么认为的... :( 反过来呢?我可以通过原始用户 ID 获取应用程序范围的 ID(对于我拥有的应用程序)。这也会有所帮助。我认为Business Mapping API (developers.facebook.com/docs/apps/for-business) 可能会提供类似的功能..
  • 顺便说一句:我也会采取复杂/不明显的解决方案;)否则我的应用程序的主要功能将毫无用处......
  • 好吧@kolli这里是一个复杂的解决方案:为什么不通过你的应用程序和facebook oauth让一个自动浏览器登录,然后继续加载所有人的名字和照片,然后刮掉它,然后再安排许多 fb 按名称搜索该照片?然后它可以从搜索中重建它 LOL
【解决方案3】:

你不能从范围内回到现实。最好的办法是将它们全部转换为作用域。这很容易:

https://graph.facebook.com/?ids=REAL_ID&access_token=APP_ID|APP_SECRET

这里有一些简单的 Ruby 代码可以做到这一点:

require 'open-uri'
require 'json'

json = JSON.load(open("https://graph.facebook.com/?ids=#{real_id}&access_token=#{FACEBOOK_APP_ID}|#{FACEBOOK_APP_SECRET}"))
scoped_id = /app_scoped_user_id\/(\d+)\//.match(json[real_id.to_s]['link'])[1]

【讨论】:

  • 赞成这个想法,但不幸的是它不能解决我的问题......对于已经注册的用户,我仍然会在他们登录应用程序时获得“真实”ID。事实上,这就是我现在的主要问题——让用户拥有“真实”ID 以及拥有应用范围 ID 的用户......而 RTU 将只有其中一个......
  • 非常感谢您!这保存了我的项目。你是一个救生员。
  • @Taha 我最后没有用这个,所以不知道...也许 Sam 可以帮忙?
  • 在发布此答案数月后从未使用过此功能。祝你好运!
【解决方案4】:

我发现一个网站可以帮助你从 app scoped id 获取 facebook 用户 id。

在这里http://izitools.com/en/tool/get-facebook-id-from-scoped-id

API

【讨论】:

  • 已过时,不再工作。可能是因为 API 使用了旧的、已弃用的 Graph API 版本
  • 不幸的是,作用域 ID 的预期用途是使其无法从中获取真实 ID。有关更多信息,请参阅我的答案。
【解决方案5】:

有一个肮脏的黑客来检索原始用户 ID

http://graph.facebook.com/app-scoped-id这会返回facebook公开信息如下, { "id": "app-scoped-id", "first_name": "xxxx", “性别”:“男性”, "last_name": "yyyy", "链接": "https://www.facebook.com/zzzz", “语言环境”:“en_US”, “名称”:“xxxx yyyy”, “用户名”:“zzzz” }

然后您使用 用户名 进行另一个图形 api 调用 http://graph.facebook.com/zzzz

这将返回原始的 facebook id 和其他公共信息,而不是 app-scoped-id

【讨论】:

  • 用户名在 API v2.0 中不存在。如果您从一开始就使用 API v1.0,则不需要使用应用范围内的用户 ID。
  • 不幸的是,这对我不起作用。我看到了所有字段,但没有看到“用户名”字段...此外,当我对任何用户尝试第二部分时,我收到 OAuthException “(#803)无法通过用户名(用户名)查询用户”..跨度>
  • 如我所说。用户名在 API v2.0 中不可用。
  • 嗯,我想知道 v1.0 是否甚至适用于应用程序范围的 ID?... Graph Explorer 不会让我尝试,所以我将在注册过程中直接从应用程序测试它.. 不过,只要 v1.0 可用,那只会对我有帮助...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
相关资源
最近更新 更多