Избегайте веб-формы входа в Facebook при запуске - PullRequest
0 голосов
/ 02 августа 2011

Я довольно часто использую примеры в SDK для своего приложения.И это прекрасно работает.Кроме меня есть два вопроса, касающихся аутентификации.1. Как я могу избежать появления веб-формы при каждом запуске приложения?После того как я авторизовал свое приложение, каждый раз, когда я перезапускаю его, я вижу, что веб-форма появляется на секунду, а затем закрывается.Не очень чисто, на мой взгляд.Есть ли способ проверить, все ли я вошел в систему и дал ли мне разрешение на приложение перед отображением веб-формы?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 голосов
/ 08 августа 2011

1.Как можно избежать появления веб-формы при каждом запуске приложения? После того как я авторизовал свое приложение, каждый раз, когда я перезапускаю его, я вижу, что веб-форма появляется на секунду, а затем закрывается. Не очень чисто, на мой взгляд. Можно ли проверить, если я все еще вошел в систему и дал ли мне разрешение на приложение перед отображением веб-формы?

Вам необходимо безопасно сохранить токен доступа в другом месте. Если у вас есть этот токен доступа, вам даже не нужно запрашивать диалог входа в систему.

2.Если я становлюсь не прошедшим проверку подлинности во время работы моего приложения, есть ли способ легко обнаружить это и затем снова отобразить форму входа?

Вам нужно будет перехватывать FacebookOAuthException для каждого запроса, который вы делаете, и затем просить пользователя войти в систему

...