Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Вконтакте iOS SDK v2

Anna | 2.07.2014 | нет комментариев

Всё началось с того, что нужен был больше либо менее комфортный инструмент для работы с API общественной сети ВКонтакте под iOS. Впрочем Google меня довольно стремительно расстроил итогами поиска:

Как бы бы всё отлично, самое основное есть, но вот применение не вызывает славных ощущений.

Под катом я расскажу, как работает обновленная версия ВКонтакте iOS SDK v2, с чего всё начиналось и к чему в результате пришли.

Вступление

Изложение первой версии Вконтакте iOS SDK на Прогре дозволено обнаружить по этой ссылке.

Вторая версия кардинально отличается от первой и той, которая интегрирована в ASASocialServices.

Для того, Дабы отменнее осознать, что же изменилось позже выхода первой версии, нужно осознать в чем были основные особенности/недостатки первой версии:

  • Неимение вероятности кэшировать запросы
  • Запросы осуществлялись синхронно
  • Неимение ранга загрузки файлов на сервер ВК
  • Неимение вероятности трудиться с несколькими пользователями (имеется ввиду хранение и повторное применение авторизационных данных как бы токена доступа)
  • Не было вероятности выйти из нынешней авторизованной учетной записи пользователя.

Во 2-й версии многие недочеты, а вернее все, были устранены (допустимо возникли новые, но и их мы со временем постараемся поправить и устранить) и сейчас есть следующие возможности/фичи в SDK:

  • хранилище, которое разрешает трудиться со большинством пользователей
  • кэширование запросов для всякого пользователя отдельно
  • логаут последнего авторизовавшегося пользователя
  • запросы сейчас представляют собой отдельные классы, которые дозволено применять и настраивать под себя (имеется связь запросов с хранилищем)
  • запросы применяют сейчас делегаты для уведомления о состоянии запроса (применение блоков рассматривается, но не больше)
  • вероятность отслеживать ранг загрузки файла на сервер ВК
  • пользователь сейчас представляет собой объект в котором инкапсулированы все действия, которые он может совершить (вступить в группу, оставить сообщение на стене и тд)
  • документация, которая во 2-й версии стала отменнее, полновеснее и в которой сейчас дозволено будет обнаружить какие-то увлекательные особенности в работе классов/методов

Из планов на грядущее дозволено выделить следующие пункты:

  • Реализация класса типа VKRequest, тот, что будет теснее оперировать с блоками. У программиста будет вероятность предпочесть и применять либо запросы делегаты, либо запросы блоки.
  • Улучшить хранилище и добавить вероятность программисту указать своё хранилище, которое будет отвечать некоторым непременным способам протокола VKStorageDataDelegate VKStorageCacheDataDelegate.
  • Реализовать вероятность автообновления данных кэша определенных запросов. Выглядеть это может приблизительно таким образом: в бэкграунде, через указанные промежутки времени будет осуществляться некоторый запрос, тот, что в случае триумфа обновит данные кэша, тем самым ускорив дальнейшие приобретения данных по этому запросу.
  • Хранение пользовательских куки для реализации механического входа и обновления токена доступа.
  • Добавление еще одного способа в VKConnectorDelegate, тот, что будет вызываться при необходимости осуществления всяких пользовательских д_lqvmk!br/>
    У всякого запроса есть несколько дюже пригодных свойств:

    1. Подпись (signature)
    2. Время жизни кэша для нынешнего запроса (cacheLiveTime)
    3. Оффлайн режим запроса (offlineMode)

    Разглядим всякое качество подробней:

    1. Подпись (signature)
      Подписью объекта может быть всякий объект, как словарь неких связанных данных, так и легко строка. Сходственное было реализовано с мыслью о том, что при обработке одним классом нескольких запросов (приобретения друзей и индивидуальной информации о всяком из пользователей) нужно некоторым образом отличать один запрос от иного. Делать подпись фиксированной было бы ненормально и неудобно, следственно было решено оставить выбор подписи на программиста.
      Стоит знать, при осуществлении запросов из класса VKUser, всякий запрос подписан строкой селектора сделавшего его способа.
    2. Время жизни кэша для нынешнего запроса (cacheLiveTime)
      Время существования кэша для данного запроса определяется именно этим свойством. Некоторые данные меняются дюже Зачастую (лента новостей, стена пользователя), а значит было бы ненормально применять враждебное кэширование и беречь данные максимально длинно, но вот другие запросы, такие, скажем, как список друзей пользователя, список групп, список подписчиков и тд, могут спокойно жить в течение нескольких дней в кэше.
      Если происходит запрос к некому файлу/аудиозаписи/видеозаписи, то сходственные вещи могут храниться дюже длинно и не меняться, следственно дозволено применяться для них наивысшее время жизни в один год (VKCachedDataLiveTimeOneYear).
    3. Оффлайн режим запроса (offlineMode)
      Оффлайн режим непринужденно влияет на то, каким образом будут возвращены данные кэша. При отсутствии интернет соединения настойчиво рекомендуется применять данный режим. Он дозволит «продлить» время жизни данным из кэша, которые при стандартном режиме обязаны были бы быть удалены.

    При создании запроса его выполнение начинается не сразу, а позже вызова start.
    Разглядим на примере:

    VKRequest *infoRequest = [VKRequest requestMethod:@"users.get" options:@{} delegate:self];
    
    //возможная настройка свойств
    infoRequest.cacheLiveTime = VKCachedDataLiveTimeOneMonth;
    infoRequest.signature = @"Some signature string";
    
    //какие-то действия
    
    [infoRequest start]; // запрос стартовал
    

    Вы спокойно можете отменить запрос, если у вас есть переменная, которая на него ссылается, либо отменить в одном из способов делегата VKRequestDelegate.

    Пример:

    [infoRequest start]; // запрос стартовал
    
    // какие-то действия
    
    // нужно отменить запрос
    [infoRequest cancel];
    

    Самым расширенным способом является:

      (instancetype)requestHTTPMethod:(NSString *)httpMethod
                                  URL:(NSURL *)url
                              headers:(NSDictionary *)headers
                                 body:(NSData *)body
                             delegate:(id <VKRequestDelegate>)delegate;
    

    Как видите данный способ разрешает настроит запрос к серверу с максимальным числом важных параметров.
    Может быть пригоден при реализации загрузок аудио/видео на сервер.

    Вот так выглядит изложение запроса (пример) возвращаемое способом description:

    {
        cacheLiveTime = 3600;
        delegate = "<ASAAppDelegate: 0x752c540>";
        offlineMode = NO;
        request = "<NSMutableURLRequest https://api.vk.com/method/users.getFollowers>";
        signature = "followersWithCustomOptions:";
    }
    

    Пользователь

    Пользовательский класс разрешает осуществлять запросы от лица нынешнего энергичного пользователя.

    Разглядим несколько способов класса, которые играют главную роль при работе с несколькими пользователями в приложении:

    1. (instancetype)currentUser
    2. (BOOL)activateUserWithID:(NSUInteger)userID
    3. (NSArray *)localUsers

    Разглядим подробнее.

    1. (instancetype)currentUser
      Приобретение нынешнего энергичного пользователя. Вот как описан данный способ в документации:
      image
    2. (BOOL)activateUserWithID:(NSUInteger)userID 
      Делает энергичным пользователя с указанным пользовательским идентификатором. Пригодный способ, если ваше приложение планирует подключать несколько учетных записей пользователя.
    3. (NSArray *)localUsers
      Приобретение списка пользователей находящихся в хранилище. В массиве будут только пользовательские идентификаторы.

    Сейчас побеседуем о свойствах, которые тоже играют значимую роль в том, как будут обрабатываться итоги запросов и сами запросы.

    • Начинать выполнение запросов неотлагательноПо умолчанию все запросы начинают своё выполнение незамедлительно позже вызова способа в котором они были сделаны. Для того, Дабы получить управление над стартом/отменой выполнением запросов нужно поступить дальнейшим образом:
      [VKUser currentUser].startAllRequestsImmediately = NO; // работает для всех последующих запросов, а не только для одного
      
      VKRequest *infoRequest = [[VKUser currentUser] infoWithCustomOptions:@{@"uids": @"1"}];
      
      // какие-то действия
      
      [infoRequest start];
      

      Если хотите только одним запросом руководить, то дозволено поступить дальнейшим образом:

      [VKUser currentUser].startAllRequestsImmediately = NO;
      VKRequest *infoRequest = [[VKUser currentUser] infoWithCustomOptions:@{....}];
      [VKUser currentUser].startAllRequestsImmediately = YES;
      
      //какие-то действия
      
      [[VKUser currentUser] groupsJoinWithCustomOptions:@{...}]; // выполнение запроса стартует незамедлительно
      
    • Оффлайн режимРазрешает осуществлять все дальнейшие запросы в оффлайн режиме, режиме, когда данные кэша не удаляются даже в случае истечения их срока жизни.

    Пример приобретения пользователей находящихся в определенной группе:

    [VKUser currentUser].delegate = self;
    [[VKUser currentUser] groupsGetMembersWithCustomOptions:@{
        @"group_id": @"1",
        @"count" : @"100",
        @"offset": @"0"
    }];
    

    Документация

    Документацию я неизменно усердствую поддерживать в актуальном состоянии и писать о допустимых особенностях применения классов, способов, свойств.
    Считаю, что без отличной документации у программиста не будет специального мечты разбираться в чужом коде и вообще применять SDK.

    Несколько скриншотов нынешней документации, которые отразят всю её полноту и целостность:

    image

    image

    image

    image

    В заключение

    Статья, как мне кажется, получилась довольно длинной, так что на этом пока остановлюсь. Упомянул о многом и усердствовал описывать таким образом, Дабы у Вас сложилось целостная картина.

    Хочу подметить, что план энергично прогрессирует и поддерживается.

    Обнаружить самую актуальную версию дозволено по этой ссылке: GitHub (github.com/AndrewShmig/Vkontakte-iOS-SDK-v2.0 )

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB