Статьи

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

Прежде чем я скажу вам, что делать дальше, обязательно прочитайте эти статьи — мы будем использовать их позже в этой серии: