Предыдущие части:
- Создание клиента 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 — установить статусы, загрузить изображения и проанализировать ваш новостной канал.
Прежде чем я скажу вам, что делать дальше, обязательно прочитайте эти статьи — мы будем использовать их позже в этой серии: