Обратный вызов аутентификации Facebook на Windows Phone с использованием Caliburn.Micro

Я разрабатываю приложение для Windows Phone с помощью фреймворка Caliburn.Micro. Я пытаюсь реализовать вход в Facebook, используя этот учебник.

ContinuationManager вызывает у меня проблемы, поскольку предполагает не использование модели MVVM и сохранение всего кода в коде за представлением. Есть ли чистый способ восстановить контроль и передать WebAuthenticationBrokerContinuationEventArgs LogInViewModel (не LogInView), чтобы процесс аутентификации мог продолжаться?

Другими словами, как я могу вызвать метод public async void ContinueWithWebAuthenticationBroker( WebAuthenticationBrokerContinuationEventArgs args) в LogInViewModel после того, как пользователь успешно завершит процесс входа в Facebook?


person Emilia Tyl    schedule 07.05.2015    source источник


Ответы (2)


Есть несколько способов заставить это работать, позвольте мне дать вам мой...

Мне нужно было установить OAuth-соединение с третьей стороной, и для всех коммуникаций с этой стороной я создал Service class — этот класс реализует интерфейс IWebAuthenticationContinuable. Другими словами, все вызовы API находятся там, А ТАКЖЕ метод ContinueWebAuthentication. Внутри метода ContinueWebAuthentication я вызываю событие Status — оно также объявлено в классе Service — для уведомления любых слушателей о фактическом статусе результата обработки OAuth.

Поэтому осталось только зарегистрироваться для этого события в ViewModel, где вы инициируете запуск процесса OAuth и будете действовать в соответствии с измененным статусом, чтобы проверить, был ли процесс OAuth в порядке или нет. Запуск фактического процесса OAuth выполняется путем простого запуска метода (в моем случае в классе Service метод GetAccessToken()), и в этом методе вы запускаете метод WebuthenticationBroker.AuthenticateAndContinue().

Другим решением было бы использование обмена сообщениями MVVM вместо реального события. Но это всего лишь семантика.

person Depechie    schedule 07.05.2015

Я использую Caliburn и недавно реализовал вход через Facebook.

В моей LoginViewModel я вызываю WebAuthenticationBroker.AuthenticateAndContinue(url);, чтобы инициировать вход в систему.

В App.xaml.cs я переопределяю метод OnActivated, проверяю, исходят ли аргументы от брокера аутентификации, и если да, то отправляю их в виде сообщения.

protected override void OnActivated(IActivatedEventArgs args)
{            
    base.OnActivated(args);

    switch (args.Kind)
    {
        case ActivationKind.WebAuthenticationBrokerContinuation:
                OnWebAuthenticationBrokerContinuation((WebAuthenticationBrokerContinuationEventArgs)args);
                break;
        }
}

private void OnWebAuthenticationBrokerContinuation(WebAuthenticationBrokerContinuationEventArgs args)
{
    var eventAggregator = container.GetInstance<IEventAggregator>()
    eventAggregator.PublishOnUIThread(args);
}

Моя LoginViewModel реализует IHandle<WebAuthenticationBrokerContinuationEventArgs>, а в Handle(WebAuthenticationBrokerContinuationEventArgs message) получает токен Facebook и выполняет фактический вход в службу.

person Igor Kulman    schedule 25.05.2015