在WP7上注销Facebook C#SDK

Sub*_*ion 6 silverlight facebook logout windows-phone-7 facebook-c#-sdk

我正在尝试添加一个注销功能,该功能在ApplicationBarMenuItem的click事件中调用,遵循此博客上的说明

这就是我的代码:

    var oauth = new FacebookOAuthClient();

    var logoutParameters = new Dictionary<string, object>
          {
              { "next", "http://www.facebook.com" }
          };

    var logoutUrl = oauth.GetLogoutUrl(logoutParameters);

    LayoutRoot.Children.Add(FacebookLoginBrowser);
    FacebookLoginBrowser.Navigate(new Uri(logoutUrl.AbsoluteUri, UriKind.Absolute));
Run Code Online (Sandbox Code Playgroud)

我期望这段代码会在Navigated事件完成时将用户从Facebook注销,然后显示参数中传递的任何URL(在本例中为facebook.com).然而,我所看到的是它总是加载" http://m.facebook.com/ ",无论传入什么,它都不会注销Facebook.我不关心它加载后的内容(这会很棒,但此时我只是希望它执行注销操作,以便用户可以在他们再次启动我的应用程序时退出并登录).我能成功注销用户的唯一方法是,如果他们了解页面何时加载,他们需要向下滚动,放大,并在页面底部手动点击"注销" - 这不是一个可接受的用户体验.

我还从该博客下载了示例代码,它大致相同.

我已经看过这个帖子,这个帖子和使用的URL非常接近oath.GetLogoutUrl(logoutParameters)返回的内容,但我尝试构造具有相同结果的确切URL:

var logoutUrl = new Uri("https://www.facebook.com/logout.php?next=http://www.facebook.com&access_token="+fbClient.AccessToken);
Run Code Online (Sandbox Code Playgroud)

这绝对是我的应用程序的船舶止动器,所以任何人可以提供的任何帮助或建议将非常感谢!

Sub*_*ion 1

事实证明,问题在于重定向 URL 中的域与 Facebook 应用程序设置中提供的站点域不匹配。显然,没有人可以看到这一点,因为您无权访问我的应用程序设置,但这是我的应用程序无法通过“http://www.facebook.com”注册的一点线索(因为我相信该域必须是唯一的)。

解决方案是在下一个参数中使用我自己的网站,在我的例子中是 thecruxapp.com。另外,还需要 session_key 和 api_key ,所以最终对我有用的代码是:

string logout_format = "http://www.facebook.com/logout.php?api_key={0}&session_key={1}&next={2}";
string access_token = HttpUtility.UrlDecode(fbClient.AccessToken);
char[] tokenSeparator = new char[] { '|' };
string session = access_token.Split(tokenSeparator)[1];

FacebookLoginBrowser.Navigate(new Uri(string.Format(logout_format, apiKey, HttpUtility.UrlEncode(session), HttpUtility.UrlEncode("http://thecruxapp.com"))));
Run Code Online (Sandbox Code Playgroud)

我没有遇到另一个答案中链接到的错误,并且它不相关 - 只要传递到下一个参数的 URL 与 Facebook 上的应用程序设置中输入的站点域匹配,注销和重定向都会发生。