c# – Facebook注销Windows Phone应用程序而无需打开WebBrowser
发布时间:2020-12-15 21:46:23 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Facebook登录和注销操作开发 Windows Phone 7应用程序.我找到了Facebook SDK并通过打开WebBrowser来使用它来执行登录.用户将凭据输入此浏览器并成功登录.此外,我设法登录用户而不使用任何SDK,只是使用http请求,就像SDK实际上做的那样.但是,我
我正在尝试使用Facebook登录和注销操作开发
Windows Phone 7应用程序.我找到了Facebook SDK并通过打开WebBrowser来使用它来执行登录.用户将凭据输入此浏览器并成功登录.此外,我设法登录用户而不使用任何SDK,只是使用http请求,就像SDK实际上做的那样.但是,我想在不使用任何WebBrowser的情况下注销用户,而只是单击按钮.网上有这么多解决方案,建议我打开网页浏览器并将其导航到某个网址以便注销.但是,这不是我想要的.我认为应该有办法通过清除cookie来解决,我不知道该怎么做,或者你建议的任何其他.我的代码的一部分如下:
private static String appID = ""; private static String appSecret = ""; public static void login(String[] permissions) { try { permissionArray = permissions; popup = new Popup(); popup.Height = 480; popup.Width = 480; popup.VerticalOffset = 100; FacebookLoginUserControl control = new FacebookLoginUserControl(); control.facebookWebBrowser.Loaded += new RoutedEventHandler(webBrowser_Loaded); control.facebookWebBrowser.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(webBrowser_Navigated); popup.Child = control; popup.IsOpen = true; } catch (Exception e) { //handle } } private static void webBrowser_Loaded(Object sender,RoutedEventArgs e) { WebBrowser wb = (WebBrowser)sender; String loginUrl = GetFacebookLoginUrl(); wb.Navigate(new Uri(loginUrl)); } private static String GetFacebookLoginUrl() { String permissionString = String.Empty; if (permissionArray.Length > 0) permissionString = String.Join(",",permissionArray); var uriParams = new Dictionary<string,string>() { {"client_id",appID},{"response_type","token"},{"scope",permissionString},{"redirect_uri","http://www.facebook.com/connect/login_success.html"},{"display","touch"} }; StringBuilder urlBuilder = new StringBuilder(); foreach (var current in uriParams) { if (urlBuilder.Length > 0) { urlBuilder.Append("&"); } var encoded = HttpUtility.UrlEncode(current.Value); urlBuilder.AppendFormat("{0}={1}",current.Key,encoded); } var loginUrl = "http://www.facebook.com/dialog/oauth?" + urlBuilder.ToString(); return loginUrl; } private static void webBrowser_Navigated(Object sender,System.Windows.Navigation.NavigationEventArgs e) { if (string.IsNullOrEmpty(e.Uri.Fragment)) return; if (e.Uri.AbsoluteUri.Replace(e.Uri.Fragment,"") == "http://www.facebook.com/connect/login_success.html") { string text = HttpUtility.HtmlDecode(e.Uri.Fragment).TrimStart('#'); var pairs = text.Split('&'); foreach (var pair in pairs) { var kvp = pair.Split('='); if (kvp.Length == 2) { if (kvp[0] == "access_token") { accessToken = kvp[1]; MessageBox.Show("Access granted"); RequestUserProfile(); } } } if (string.IsNullOrEmpty(accessToken)) { MessageBox.Show("Unable to authenticate"); } popup.IsOpen = false; } } private static void RequestUserProfile() { var profileUrl = string.Format("https://graph.facebook.com/me?access_token={0}",HttpUtility.UrlEncode(accessToken)); request = (HttpWebRequest)HttpWebRequest.Create(new Uri(profileUrl)); request.Method = "GET"; request.BeginGetResponse(result => { try { var resp = (result.AsyncState as HttpWebRequest).EndGetResponse(result); using (var strm = resp.GetResponseStream()) { StreamReader sr = new StreamReader(strm); var responseString = sr.ReadToEnd(); } } catch (Exception ex) { // } },request); } 任何解决问题的想法. 解决方法
使用webBrowser实际上是多么的怪异?如果以编程方式创建WebBrowser对象,它将不可见,除非您将其添加到窗体/页面上的某个位置.如果你想清除Facebook的cookie,解决方案将是这样的:
// Can be invoked from your button_click event public void TryLogout() { webBrowser = new WebBrowser(); Uri uri = new Uri("http://m.facebook.com/home.php?r",UriKind.Absolute); webBrowser.LoadCompleted += new LoadCompletedEventHandler(webBrowser_TryLogoutLoadCompleted); webBrowser.Navigate(uri); } 然后: private void webBrowser_TryLogoutLoadCompleted(object sender,EventArgs e) { try { var cookies = webBrowser.GetCookies(); foreach (Cookie cookie in cookies) { if (cookie.Domain.Contains("m.facebook.com")) { cookie.Discard = true; cookie.Expired = true; } } // we've just cleaned up cookies } finally { webBrowser.LoadCompleted -= webBrowser_TryLogoutLoadCompleted; } } 希望这可以帮助. GetCookies method (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |