我目前正在开发一个移动应用程序,因此我需要专门为此目的开发一个新应用程序。看起来很愚蠢的是,Facebook 决定为每个应用程序使用不同的“用户 ID”。除了没有看到这一点之外,我对如何为给定用户提取相同的userId以将其与我的数据库匹配感到困惑。我正在使用oauth.io来处理登录,并返回值:
$('#facebook-login').click(function() {
$('#ajax_spinner_wrapper').show();
OAuth.initialize('CmRGYdnRMWM2ZrOb7M1Nf1_T57o');
OAuth.popup('facebook').done(function(result) {
//console.log(result)
result.get('/me').done(function(data) {
//todo with data
console.log(data);
$.post('https://steampunkjunkies.net/cgi-bin/mobi_login.cgi', { action: 'store_session', what: 'facebook', user: data.id }, function(result) {
$('#ajax_spinner_wrapper').hide();
});
}).fail(function(err) {
//todo with err
console.log("Hit an error?");
});
})
.fail(function (err) {
alert("oops, we got an error!");
console.log(err);
$('#ajax_spinner_wrapper').hide();
});
return false;
});
但问题是,它在每个应用程序中给了我完全不同的 ID。以下是我使用基于 Web 的版本得到的:
'id' => '838605583',
..然后在我的 oauth.io ( https://oauth.io ) 设置中使用其他应用程序:
id "10155167132970584"
两者都针对完全相同的用户。
有什么方法可以关联这些 ID,以便我可以将它们匹配在一起?令人惊讶的是,Facebook 认为这样的事情不会成为问题!
注意:来自 Facebook 的一些关于此更改的信息:
https://developers.facebook.com/docs/apps/upgrading#upgrading_v2_0_user_ids
当人们第一次登录您的应用程序实例时,Facebook 将开始发布应用程序范围的用户 ID,该应用程序根据 API 的 v2.0 进行编码。使用应用范围的 ID,同一用户的 ID 在应用之间会有所不同。
无论他们最初用于注册您的应用程序的版本是什么,对于已经登录您的应用程序的人来说,ID 都将保持不变。对于过去在任何时候登录过您的应用程序的任何人,此更改都是向后兼容的。
如果您不跨应用映射 ID,则不需要更改代码。如果您需要跨多个应用映射相同的用户 ID 或运行跨应用促销,我们添加了一个名为 Business Mapping API 的新 API。这使您可以跨应用映射登录用户的 ID,只要这些应用都归同一企业所有。了解有关实施交叉促销的更多信息。
对于尚未登录您的应用程序的用户,用户 ID 可能会根据您调用的 API 版本而变化。在 API 的 v1.0 中,未登录您的应用程序的用户将由其原始 Facebook 用户 ID 引用,而在 v2.0 中,他们将由应用程序范围的 ID 引用。
我们添加了新的 API 端点,允许您标记和邀请不使用您的应用的朋友。这些 API 返回令牌,这些令牌可用于生成用于标记和邀请的自定义界面。这些令牌并不意味着可缓存,我们不保证在收到包含它们的 API 响应后 24 小时后它们会保持稳定。它们与未登录您的应用程序的人的数据使用的 ID 不同,也与应用程序范围的 ID 不同。
用户可以在应用的“编辑设置”对话框中检查他们已安装的每个应用的应用范围 ID。确保您的应用用户在联系您咨询支持问题时知道如何找到它
我真的不明白他们的逻辑。为每个用户设置一个唯一标识符更有意义,该标识符可用于针对任意数量的应用程序进行验证。在我的例子中,有人登录了我们基于 Web 的应用程序,然后他们也想登录移动应用程序 - 但它的用户 ID 不同,因此无法将两者链接在一起!哎呀