我已经研究这个问题好几天了,我的头发都拔出来了。另一个最准确地描述我的问题的线程在这里,但建议的解决方案对我不起作用。
我正在使用Xamarin Forms创建一个跨平台的移动应用程序,我正在尝试将Facebook登录作为我的用户身份验证手段。我以模态方式呈现登录页面,在每个移动平台项目中以特定于平台的方式呈现页面,并使用Xamarin。Auth API来处理大部分身份验证。下面的代码片段来自Android实现:
var activity = Context as Activity;
var authenticator = new OAuth2Authenticator(
clientId: AppConstants.FacebookAppId,
scope: "",
authorizeUrl: AppConstants.FacebookAuthorizeUri,
redirectUrl: AppConstants.FacebookRedirectUri);
authenticator.Completed += async (sender, eventArgs) =>
{
// Check for authentication, call Graph API, deserialize JSON, etc...
};
activity.StartActivity(authenticator.GetUI(activity));
这是基本上每个在线示例给出的样板代码,并且应该呈现一个Facebook登录页面。然而,在点击我的Login with Facebook按钮后,它应该以模式推送渲染的页面,我得到的是:
Facebook Login Error
"Not logged in:您没有登录。请登录后再试。"
我已经两次和三次检查了clientId
参数是否与我在Facebook Developer Console上的Facebook App ID匹配。我已经确保提供给OAuth2Authenticator
对象的重定向和授权uri是正确的。我已经将重定向URI添加到我的Facebook Developer Console。我的开发keyhash,使用keytool和openssl也是正确的。我的包名和类名(package.name. mainactivity)在控制台中也正确(我的项目中的包名是通过双击Android项目手动设置的,转到"Android Manifest",然后放入我自己的包名)。我已经从Facebook开发者控制台中删除并阅读了Android项目好几次了。
我的问题是,是否还有其他特定于Xamarin平台的步骤,我可能在这里遗漏了?我真的不知道错误是什么。在这件事上我将非常感谢任何帮助。
我已经设法让这个工作,但解决方案对我没有意义…在Facebook Developer控制台上的有效重定向uri列表中,我返回并列出了redirectUrl
和 authorizeUrl
(m.s hfacebook.com)。对话框/oauth和facebook.com/connect/login_success.html)。有些人看到这个可能会说,"嗯,废话!"但是我做了相当多的阅读/研究Facebook提供的文档,以及开发人员的博客/视频,我看到没有人把这两个url。
所以,我的建议是,将这两个url放在Developer Console中作为有效的重定向url。