FacebookOAuthException не было обработано - PullRequest
0 голосов
/ 16 января 2011

Я новичок в этих вещах, и я тестировал API ... и пришел ко мне ситуацию, которая:

, если пользователь меняет пароль Facebook

токен доступа обновляется ... и пытается опубликовать API запускает исключение, и приложение вылетает ... как разрешить эту ситуацию?

         try {
              FacebookApp app = new FacebookApp(FacebookToken);
              var args = new Dictionary<string, object>();
              args["message"] = "hi";
              args["caption"] = "appcaption";
              args["description"] = "appdescription";
              args["name"] = "appname";
              args["picture"] = "apppicture";
              args["link"] = "applink";
              app.ApiAsync((X) => { calback(X); }, null, "/me/feed", args, HttpMethod.Post);
          }
           catch (Exception ex) {
               Uri url = new Uri("/MyFacebook.xaml", UriKind.Relative);
               NavigationService.Navigate(url);
           }

это код API, и он вылетает при броскеOAuthExcepion на линии, помеченной «Исключением ЗДЕСЬ»

    private static void ResponseCallback(IAsyncResult asyncResult, FacebookAsyncCallback callback, object state)
    {
        object result = null;
        FacebookApiException exception = null;
        try
        {
            var request = (HttpWebRequest)asyncResult.AsyncState;
            var response = (HttpWebResponse)request.EndGetResponse(asyncResult);

            using (Stream responseStream = response.GetResponseStream())
            {
                result = JsonSerializer.DeserializeObject(responseStream);
            }
        }
        catch (FacebookApiException)
        {
            // Rest API Errors
            throw;
        }
        catch (WebException ex)
        {
            // Graph API Errors or general web exceptions
         exception = ExceptionFactory.GetGraphException(ex);
            if (exception != null)
            {
                // Thow the FacebookApiException
                throw exception;
            }

            throw;  //Exception HERE
        }
        finally
        {
            // Check to make sure there hasn't been an exception.
            // If there has, we want to pass null to the callback.
            object data = null;
            if (exception == null)
            {
                data = result;
            }
            #if SILVERLIGHT
            callback(new FacebookAsyncResult(data, state, null, asyncResult.CompletedSynchronously, asyncResult.IsCompleted, exception));
            #else
            callback(new FacebookAsyncResult(data, state, asyncResult.AsyncWaitHandle, asyncResult.CompletedSynchronously, asyncResult.IsCompleted, exception));
           #endif
        }
    }

спасибо

Ответы [ 3 ]

1 голос
/ 18 января 2011

Поведение SDK предназначено.Исключением является не «сбой» приложения, а скорее сообщение о возникновении состояния ошибки.В основном вы делаете это правильно, но вместо того, чтобы перехватывать исключение, вы должны только перехватывать FacebookOAuthException следующим образом:

try {
    FacebookApp app = new FacebookApp(FacebookToken);
    var args = new Dictionary<string, object>();
    args["message"] = "hi";
    args["caption"] = "appcaption";
    args["description"] = "appdescription";
    args["name"] = "appname";
    args["picture"] = "apppicture";
    args["link"] = "applink";
    app.ApiAsync("/me/feed", args, (X) => { calback(X); }, HttpMethod.Post);
}
catch (FacebookOAuthException) {
    // This is where you would reauthorize the user or send them to a 'login' page
    Uri url = new Uri("/MyFacebook.xaml", UriKind.Relative);
    NavigationService.Navigate(url);
}

Я бы также предложил прочитать об обработке исключений .Net, чтобы лучше понять, когда и почемуОни используются.http://msdn.microsoft.com/en-us/library/ms229005.aspx

0 голосов
/ 26 января 2011

Используя FacebookAuthenticationResult, вы можете проверить наличие ошибки, а затем избежать выполнения запроса:

 private void FacebookLoginBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        FacebookAuthenticationResult authResult;
        if (FacebookAuthenticationResult.TryParse(e.Uri, out authResult))
        {
            if (authResult.ErrorReason == "user_denied")
            {
                // Do something knowing that this failed (cancel).                   }
            else
            {
                fbApp.Session = authResult.ToSession();
                loginSucceeded(); 
            }                
        }
    }
0 голосов
/ 17 января 2011

Вы видели этот пост? http://dotnetslackers.com/articles/net/wFace-windows-phone-7-facebook-integration-part-1.aspx

В частности, взгляните на часть 3 - http://dotnetslackers.com/articles/net/wp7Gesicht-windows-phone-7-facebook-integration-part-3.aspx

Не могли бы вы сохранить токен доступа, а затем при ошибке снова показать страницу входа?

...