在 WP7 上注销 Facebook C# SDK

Posted

技术标签:

【中文标题】在 WP7 上注销 Facebook C# SDK【英文标题】:Logging out of Facebook C# SDK on WP7 【发布时间】:2011-09-08 14:06:35 【问题描述】:

我正在尝试添加一个用于注销的功能,该功能在 ApplicationBarMenuItem 的单击事件中调用,遵循the instructions on this blog

这是我的代码的样子:

    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));

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

我还从该博客下载了示例代码,它的功能大致相同。

我见过 this 和 this post 并且使用的 URL 非常接近 oath.GetLogoutUrl(logoutParameters) 返回的内容,但我尝试构建具有相同结果的确切 URL:

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

这绝对是我的应用程序的船闸,所以任何人都可以提供任何帮助或建议将不胜感激!

【问题讨论】:

【参考方案1】:

显然它在 Facebook 方面坏了:http://bugs.developers.facebook.net/show_bug.cgi?id=17217

【讨论】:

我将此标记为答案,因为看起来该陈述是正确的 - 它一定是 Facebook 方面的错误。但是,链接的错误可能是相关的,但与我看到的行为无关。在那里发布的每个人都描述了被注销但没有被转发到他们在下一个参数中指定的 url。我没有退出期间 抱歉,删除标记作为答案,直到我确定错误是 Facebook 的,而不是在我的代码中 Prabir 链接到与您所做的相同的错误报告,所以我想它一定是相关的。我希望我对此有更多的了解。如果有人可以向我解释链接的错误如何导致我的应用程序完全不发生注销,因此用户需要手动完成注销,我将不胜感激。目前我唯一的解决方法是在浏览器上方显示文本,指示用户自己完成注销(这很贫民窟)【参考方案2】:

问题在于重定向 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"))));

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

【讨论】:

我没有在我的 Facebook 应用站点域中输入任何内容。所以这个解决方案对我不起作用。我仍然无法在我的 wp7 应用中登录或注销。 Facebook 需要站点域。我的情况可能与您的情况相同 - 我的应用程序不是网站,也不使用任何后端。我必须注册一个域并设置托管才能使其正常工作。如果您的应用值得为其构建原生应用,那么无论如何都值得托管一个信息登录页面来表示它。 我可以确认这种技术现在有效。我现在将我的网站网址设置为指向 www.facebook.com。【参考方案3】:

有同样的问题,没有网络应用程序作为我的 WP7 应用程序的后端。 我发现这个解决方案很有用 http://claudiufarcas.blogspot.com/2011/06/wp7-webbrowser-caching-and-facebook.html 但对代码进行了一些更改,因为自发布以来对 facebook 呈现的 HTML 进行了一些更改。

这对我有用http://blog.jocelynenglund.com/?p=21

【讨论】:

以上是关于在 WP7 上注销 Facebook C# SDK的主要内容,如果未能解决你的问题,请参考以下文章

wp7注销脸书

Facebook iOS SDK 注销

Facebook-connect:无法使用PHP SDK + JS SDK注销

iOS Facebook SDK 分享照片和从 Facebook 应用程序注销后

Android:facebook sdk注销问题?

IOS FACEBOOK SDK,从FB注销并登录后