在启动时避免Facebook登录webform

时间:2011-08-02 14:47:39

标签: facebook-c#-sdk

我几乎在SDK中使用我的应用程序中的示例。而且效果很好。除了我有两个问题,与身份验证有关。 1.每次启动应用程序时,如何避免弹出webform?一旦我授权了我的应用程序,每次重新启动它时,我都会看到webform出现一秒钟然后关闭。在我看来,不是很干净。有没有办法检查我是否仍然登录,并在显示网络表单之前已经授予我的应用程序授权? 2.如果我在我的应用程序运行时变得未经身份验证,有没有办法让我轻松检测到它然后再次显示登录表单?

我认为我接近下面的代码,但不完全在那里。

提前致谢!

private string[] extendedPermissions = new[] { "read_stream", "offline_access" };

public Form1()
{
    var fbLoginDialog = new FacebookLoginDialog(AppId, extendedPermissions);

    //always shows login dialog, even if the app was just recently closed. Is this necessary?
    fbLoginDialog.ShowDialog(); 

    //every minute look for new posts
    clockTimer.Elapsed += new System.Timers.ElapsedEventHandler(clockTimer_Elapsed); 

    DisplayAppropriateMessage(fbLoginDialog.FacebookOAuthResult);
    GetAllData(unixTimeOfNewestPost);
    InitializeComponent();
}

private void DisplayAppropriateMessage(FacebookOAuthResult facebookOAuthResult)
{
  if (facebookOAuthResult != null)
  {
    if (facebookOAuthResult.IsSuccess)
    {
      _accessToken = facebookOAuthResult.AccessToken;
    }
    else
    {
      MessageBox.Show(facebookOAuthResult.ErrorDescription);
    }
  }
}

private void GetAllData(double unixTs)
{
  var fb = new FacebookClient(_accessToken);
  Facebook.JsonArray posts = new JsonArray();
  try
  {
      var result = (IDictionary<string, object>)fb.Get("/me/home?since=" + unixTs + "&limit=1000");
      posts = (Facebook.JsonArray)result["data"];
  }
  catch (FacebookOAuthException e)
  {
    MessageBox.Show("FacebookOAuthException", 
      "Facebook Authorization problem. The error message was '" + e.Message + "'.", null, "");
    //show the login form again???
  }
  catch (Exception e)
  {
      Log("Exception. There was a general exception. The error message was '" + e.Message + "'.");
  }

  foreach (Facebook.JsonObject post in posts)
  {
    // do stuff with each post
  }
} // end of GetPosts()

1 个答案:

答案 0 :(得分:0)

1.每次启动应用程序时,如何避免网页弹出?一旦我授权了我的应用程序,每次重新启动它时,我都会看到webform出现一秒钟然后关闭。在我看来,不是很干净。有没有办法检查我是否仍然登录,并在显示网络表单之前已经给出了我的应用程序授权?

您需要在其他地方安全地保存访问令牌。如果您拥有该访问令牌,您甚至不需要请求登录对话框。

2.如果我在我的应用程序运行时变得未经身份验证,是否有办法让我轻松检测到它然后再次显示登录表单?

您需要为每个请求捕获FacebookOAuthException,然后要求用户登录

相关问题