Предыдущие части:
- Создание клиента Twitter для Windows Phone — клиент OAuth и базовая инфраструктура
- Создание клиента Twitter для Windows Phone — аутентификация по ПИН
Пользователь, наконец, вошел в систему, и приложение получило необходимые разрешения. Теперь настало время убедиться, что учетные данные правильно сохранены и повторно используются при следующем запуске приложения. Еще одна особенность, которая должна быть реализована в соответствии с правилами, — это возможность выйти из системы и позволить пользователю менять учетные записи, если это необходимо. Итак, давайте посмотрим, что мы имеем после окончательного запроса аутентификации.
ПРИМЕЧАНИЕ: токен и секретные части токена, которые вы видите здесь, не помогут вам олицетворять приложение.
Так что у вас есть — oauth_token , oauth_token_secret , user_id и screen_name . Первые два параметра будут использоваться для подписания всех общих запросов, а идентификатор пользователя и отображаемое имя предоставлены в информационных целях. Тем не менее, нам нужно хранить все.
В своей папке Utility я создал вспомогательный класс изолированного хранилища — IsoStoreHelper, который будет использоваться для упрощения операций хранения внутри MangoTree. Первый метод будет обрабатывать хранение учетных данных пользователя:
public static void StoreNewCredentials(string oAuthToken, string oAuthTokenSecret, string userid, string screenName) { IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; settings["oauth_token"] = oAuthToken; settings["oauth_token_secret"] = oAuthTokenSecret; settings["userid"] = userid; settings["screen_name"] = screenName; settings.Save(); }
Возвращаясь к классу OAuthClient, к той части, где я обрабатываю ответ от сервера, мне просто нужно добавить одну строку, вызывающую StoreNewCredentials :
IsoStoreHelper.StoreNewCredentials(App.Token, App.TokenSecret, App.UserID, App.UserName);
Теперь все, что вам нужно сделать, это проверить, сохранены ли данные. Для этого я создал другой метод в своем классе IsoStoreHelper , который называется CheckIfAuthorized :
public static bool CheckIfAuthorized() { var settings = IsolatedStorageSettings.ApplicationSettings; settings.TryGetValue("oauth_token", out App.Token); settings.TryGetValue("oauth_token_secret", out App.TokenSecret); settings.TryGetValue("userid", out App.UserID); return settings.TryGetValue("screen_name", out App.UserName); }
Вы можете быть удивлены — почему я только проверяю, присутствует ли одна пара аутентификации? Просто потому, что когда я решу очистить данные аутентификации пользователя, я удалю все пары — никогда не будет ситуации, когда одна пара присутствует без связанных.
Проверка в моем случае это делается внутри App.xaml.cs . В конечном счете, у нас есть несколько способов убедиться, что отображается правильная страница — например, загрузить основную рабочую страницу и затем перейти на страницу авторизации. Я позволю корневому фрейму перейти на рабочую страницу напрямую, если это возможно.
// Do not add any additional code to this method private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) { // Set the root visual to allow the application to render if (RootVisual != RootFrame) RootVisual = RootFrame; if (IsoStoreHelper.CheckIfAuthorized()) RootFrame.Navigate(new Uri("/WorkPage.xaml", UriKind.Relative)); // Remove this handler since it is no longer needed RootFrame.Navigated -= CompleteInitializePhoneApplication; }
Я знаю, что этот комментарий выше, обработчик событий говорит, что мы не должны добавлять код в блок ниже. Но так как мой звонок не ресурсоемкий, все хорошо. Так в чем же недостаток этого способа навигации? Начальная страница — MainPage.xaml по-прежнему будет зарегистрирована в качестве основной точки открытия для корневого фрейма. Даже при сохранении надлежащих учетных данных пользователь сможет нажать «Назад» и увидеть страницу авторизации. Такое поведение можно предотвратить на рабочей странице, но мы можем оставить все как есть на данный момент.
WorkPage.xaml — это пустая портретная страница Windows Phone — не стесняйтесь добавлять ее вручную в свой проект.
Поздравляем, теперь мы наконец-то можем поработать над «крутыми» вещами в Twitter — установить статусы, загрузить изображения и проанализировать ваш новостной канал.
Прежде чем я скажу вам, что делать дальше, обязательно прочитайте эти статьи — мы будем использовать их позже в этой серии: