Создание кастомного UIActivity для публикации фото и текста в социальной сети ВКонтакте

Во время работы над очередной версией приложения PhotoSuerte возникла задача сделать публикацию фото в социальной сети ВКонтакте через стандартный контроллер UIActivityViewController.

activity

Поиск в сети дал следующие результаты:

  1. Готовой реализации нет
  2. Есть официальное sdk ВКонтакте: содержит механизмы авторизации, работы с картинками, но не имеет готового класса для загрузки через UIActivityViewController
  3. Есть документация Apple для создания кастомного UIActivity

 

Подготовка к использованию VK SDK

Перед началом работы с VK SDK необходимо создать Standalone-приложение на странице создания приложения. Сохранить ID приложения и заполнить поле «App Bundle для iOS».

Для настройки авторизации через VK App, необходимо настроить URL-протокол приложения:
  • Откройте настройки проекта, выберите раздел «Info».
  • В секции «URL Types» нажмите на +.
  • Введите vk+APP_ID (например, vk1234567) в поля «Indentifier» и «URL Schemes».

 

Работа с SDK

Необходимо инициализировать SDK при запуске приложения методом

[VKSdk initialize:delegate andAppId:APP_ID];

Для авторизации можно использовать метод:

[VKSdk authorize:scope];

В случае успеха у делегата будет вызван метод

-(void) vkSdkDidReceiveNewToken:(VKAccessToken*) newToken;

В случае ошибки (например, пользователь запретил авторизацию)

-(void) vkSdkUserDeniedAccess:(VKError*) authorizationError;

 

UIActivity для ВКонтакте

Следуя документации Apple, создаём наследник UIActivity:

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

 

Далее переопределяем методы для отображения элемента UIActivity (тип, название и иконку)

 

Проверяем поддерживает ли наш класс шаринг передаваемых ему activityItems:

 

Запоминаем  поддерживаемые нами activityItems:

- (void)prepareWithActivityItems:(NSArray *)activityItems {
    for (id item in activityItems) {
        if ([item isKindOfClass:[NSString class]]) {
            self.string = item;
        }
        else if([item isKindOfClass:[UIImage class]]) {
            self.image = item;
        }
        else if([item isKindOfClass:[NSURL class]]) {
            self.URL = item;
        }
    }
}

Непосредственно при выборе нашего UIActivity проверяем авторизован ли пользователь:

 

При успешной авторизации публикуем пост.

 

При этом если пост содержит картинку, то предварительно загружаем её на сервер.

 

Пример публикации фото с помощью VKontakteActivity:

 

Исходный код проекта можно скачать здесь.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Пожалуйста напечатайте буквы/цифры изображенные на картинке

Please type the characters of this captcha image in the input box