РуЛиб - онлайн библиотека > Черников Вячеслав > Android > Разработка мобильных приложений на C# для iOS и Android > страница 39

Читаем онлайн «Разработка мобильных приложений на C# для iOS и Android» 39 cтраница

Uri("https://login.live.com/oauth20_desktop.srf"),
clientSecret: null,
accessTokenUrl: new Uri("https://login.live.com/oauth20_token.srf")
)
{
AllowCancel = true
};
Листинг 11.24  Теперь повесим обработчик завершения авторизации
auth.Completed += AuthOnCompleted;
OAuth  185
Все – можно показать модальное окно со встроенным веб-браузером
для авторизации, получаемое через метод auth.GetUI().
Листинг 11.25  Примерно так это можно сделать на iOS
UIApplication.SharedApplication.KeyWindow.RootViewController.
PresentViewController(auth.GetUI(), true, null);
Листинг 11.26  Каким может получиться код на Android
при использовании Xamarin.Forms
Forms.Context.StartActivity(auth.GetUI(Forms.Context));
Листинг 11.27  После успешной авторизации вызовется наш метод
AuthOnCompleted(), и для iOS будет необходимо скрыть
модальное окно с браузером
(на Android само скроется)
UIApplication.SharedApplication.KeyWindow.RootViewController.
DismissViewController(true, null);
Листинг 11.28  Теперь можно получать нужные данные (access_token
и время его жизни в секундах – expires_in)
var token = authCompletedArgs.Account.Properties["access_token"];
var expireIn = Convert.ToInt32(authCompletedArgs.Account.Properties["expires_
in"]);
var expireAt = DateTimeOffset.Now.AddSeconds(expireIn);
И нам остался последний шаг – получить расширенную информацию из профиля пользователя, включая email и ссылку на аватарку.
Для этого в Xamarin.Auth есть специальный класс OAuth2Request, с помощью которого удобно делать подобные запросы.
Листинг 11.29  Отправка OAuth2Request
var request = new OAuth2Request("GET", new Uri("https://apis.live.net/v5.0/me"),
null, account);
var response = await request.GetResponseAsync();
Теперь нам приходит JSON с данными пользователя, и мы можем
их сохранить и отобразить в приложении.
Листинг 11.30  Использование полученных данных из Live API
if (response.StatusCode == HttpStatusCode.OK)
{
var userJson = response.GetResponseText();
186  Авторизация с помощью Facebook, ВКонтакте и OAuth
var jobject = JObject.Parse(userJson);
result.LoginState = LoginState.Success;
result.Email = jobject["emails"]?["preferred"].ToString();
result.FirstName = jobject["first_name"]?.ToString();
result.LastName = jobject["last_name"]?.ToString();
result.ImageUrl = jobject["picture"]?["data"]?["url"]?.ToString();
var userId = jobject["id"]?.ToString();
result.UserId = userId;
result.ImageUrl = $"https://apis.live.net/v5.0/{userId}/picture";
}
Как видим, ничего сложного нет. Вопрос в том, чтобы правильно
прописать URL для процесса авторизации. Ну и помнить, что поле
expires_in содержит время в секундах (это вызывает частые вопросы).
Рис. 11.9  Использование авторизации Microsoft в приложении
В реальных проектах также рекомендуем назначить обработчик
ошибок на событие auth.Error, чтобы ни одна проблема не осталась
без решения.
Сегодня мы завершили рассмотрение всех популярных способов
авторизации пользователей и получения базовой информации о них
через внешние сервисы. Описанные механизмы подходят как для
Xamarin.Forms, так и для классического Xamarin iOS/Android. Полные
исходные коды проекта со всеми примерами можно найти в репозитории https://github.com/binwell-university/XamarinBookSamples.
Заключение
Поздравляю! Вы добрались до конца этой непростой книги, в которой
я постарался описать весь процесс разработки мобильных приложений, включая выбор инструментов, проектирование, создание «скелета» проекта, автоматизацию и решение ряда повседневных задач
программиста. Объединенные в одно целое, данные улучшения делают процесс разработки более простым и понятным.
Описанные в книге подходы совместимы с базовыми принципами Agile/DevOps и могут быть легко адаптированы под различные
инструменты разработки приложений с пользовательским интер­
фейсом.
Выражаю благорадность моим коллегам по компании Binwell, отдельно Кириллу Ашихмину и Артему Тищенко за помощь с примерами.
Буду рад получить ваши отзывы и комментарии по улучшению
книги на editor@binwell.com!
Ваш
Черников Вячеслав
Книги издательства «ДМК Пресс» можно заказать
в торгово-издательском холдинге «Планета Альянс» наложенным платежом,
выслав открытку или письмо по почтовому адресу:
115487, г. Москва, 2-й Нагатинский пр-д, д. 6А.
При оформлении заказа следует указать адрес (полностью),
по которому должны быть высланы книги;
фамилию, имя и отчество получателя.
Желательно также указать свой телефон и электронный адрес.
Эти книги вы можете заказать и в интернет-магазине: www.a-planeta.ru.
Оптовые закупки: тел. (499) 782-38-89.
Электронный адрес: books@alians-kniga.ru.
Вячеслав Черников
Разработка мобильных приложений на C#
для iOS и Android
Главный редактор
Мовчан Д. А.
dmkpress@gmail.com
Корректор
Верстка
Дизайн обложки
Чистякова Л. А.
Чаннова А. А.
Мовчан А. Г.
Формат 70×100 1/16.
Гарнитура «PT Serif». Печать офсетная.
Усл. печ. л. 15,28. Тираж 200 экз.
Веб-сайт издательства: www.dmkpress.com
Powered by TCPDF (www.tcpdf.org)