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

ВКонтакте iOS SDK

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

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

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

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

Предпроект

Началось всё с того, что на работе получили задание подключить к приложению общественные сети. Мы хотели, Дабы пользователь не подметил никакой разницы при взаимодействии с различными социальными сетями (постинг фотографии на стену, отправка сообщения, загрузка фотографий и т.п.).
Было решено поискать готовые решения, которые бы содержали в себе несколько общественных сетей как бы ВКонтакте, Одноклассники, Твиттер и Фэйсбук, но ничего не удалось обнаружить. Применение готовых решений по отдельности не давало надобных итогов, следственно решили писать свои велосипеды, заранее изучив Facebook iOS SDK, MGTwitterEngine и несколько других заметных библиотек.

В результате мы получили ASASocialServices (GitHub).
План получился простым в применении и установке, большее внимание уделялось работе с Twitter и Vkontakte, на Facebook было решено не концентрироваться.

В ASASocialServices работа с тремя социальными сетями (дальше речь будет идти только о 2-х) осуществлялась по цельному тезису: программист создаёт UIWebView, позиционирует его и отображает, после этого запускает процесс авторизации пользователем приложения и, в зависимости от принятого пользователем решения, вызывается один из трёх блоков-обработчиков (success, error, cancel).

Если рассматривать в контексте, то ViewController.h выглядит приблизительно так:

#import <UIKit/UIKit.h>
#import "ASASocialServices.h"

@interface ViewController : UIViewController

@property UIWebView *webView;
@property ASATwitterCommunicator *tw;

@end

ViewController.m

#import "ViewController.h"

NSString *const kTWITTER_CONSUMER_KEY = @"v8146mdwpo05uEroMnhozg";
NSString *const kTWITTER_CONSUMER_SECRET = @"5AFkvjCKxqGBRId2fpSQFLClJLKtGcPGS1DzK7o";

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // устанавливает WebView в требуемой позиции и с надобными размерами
    CGRect frame = [[UIScreen mainScreen] bounds];
    _webView = [[UIWebView alloc] initWithFrame:frame];
    [self.view addSubview:_webView];

    // создаем TwitterCommunicator для приобретения токенов
    _tw = [[ASATwitterCommunicator alloc]
            initWithWebView:_webView];

    // инициируем запрос по приобретению доступа к пользовательскому аккаунту
    [_tw startOnCancelBlock:^{
        NSLog(@"User canceled app authorization...");
    } onErrorBlock:^(NSError *error) {
        NSLog(@"error during app authorization...%@", error);
    } onSuccessBlock:^(ASATwitterUserAccount *account) {
        NSLog(@"Account: %@", account);
    }];
}

@end

Довольно было заменить ASATwitterCommunicator на ASAVkontakteCommunicator либо ASAFacebookCommunicator, Дабы подключить и начать трудиться с иной общественной сетью.
В конечный блок — success, происходила передача пользовательской учетной записи соответствующей сети (токен доступа, идентификатор пользователя, время истечения действия токена доступа и т.д.)

Дальнейшие запросы от лица нынешнего пользователя дозволено было изготавливать таким образом:

[account performTwitterMethod:kTWITTER_FOLLOWERS_LIST_URL
                           HTTPMethod:@"GET"
                              options:@{@"user_id" : account.twitterUserID,
                                        @"include_entities": @"true"}
                              success:^(id response) {
                                  NSLog(@"response: %@", response);
                              }
                              failure:^(NSError *error) {
                                  NSLog(@"error: %@", error);
                              }];

Вот как выглядит обновление ранга пользователя в Twitter:

[account performTwitterMethod:kTWITTER_STATUSES_UPDATE_URL
                           HTTPMethod:@"POST"
                              options:@{@"status": @"Hello from ASASocialServices Framework!"}
                              success:^(id response) {
                                  NSLog(@"response: %@", response);
                              } failure:^(NSError *error) {
                                  NSLog(@"error: %@", error);
                              }];

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

Минусы:

  • Программисту нужно было помнить, что токен доступа дозволено сберечь и применять в последующих запросах, а не вешать запросы в success-блок
  • Оставлять на программиста настройку и работу с UIWebView было тоже оплошностью
  • Библиотека казалась слишком трудной и малопонятной, большинству не хотелось думать о том POST либо GET применять при запросах

ВКонтакте iOS SDK v1.0

С  ASASocialServices мне огромнее не хотелось возиться, следственно решил, что начну писать в свободное время SDK для ВКонтакта. Набросал на листе схему взаимодействия классов, дня два над ней «висел», в выводе решил, что на первую версию схоже — приступил к реализации.

Я люблю Ruby и мне нравятся Rails и, отчего-то неизменно и до сих пор кажется, что именно они в некоторой степени повлияли на вид Вконтакте iOS SDK.

Пользователь связан с такими объектами, как:

  • Группы
  • Стена
  • Друзья
  • Аудио альбомы
  • Видео альбомы
  • Фотоальбомы
  • Записи
  • Документы
  • тд

У всякого объекта есть список действий, тот, что пользователь может осуществить от своего лица:

  • Сделать фотоальбом
  • Вступить в группу
  • Установить/изменить ранг
  • Получить список друзей, которые теперь на сайте
  • и тд

Вот, как приведенные выше действия будут выглядеть во ВКонтакте iOS SDK v1.0:

Создание фотоальбома:

    VKUser *me = [VKUser currentUser];
    [[me photoAlbums] createTitle:@"Здравствуй, Прогр!" description:@"Альбом с фотографиями для Програ"];

image

Вступить в группу:

    VKUser *me = [VKUser currentUser];
    [[me groups] joinGroupID:100500];

Установить ранг:

    VKUser *me = [VKUser currentUser];
    [[me status] setStatus:@"Здравствуй, Прогр!"];

Получить список друзей, которые теперь на сайте:

id result = [[[VKUser currentUser] friends] online];
С чего начать?

Представим, что Вы теснее добавили Vkontakte IOS SDK v1.0 к себе в план и не знаете что делать дальше с этим.

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

Вот, как будет выглядеть самый легкой метод подключения в ASAAppDelegate.m:

//
//  ASAAppDelegate.m
//  Vkontakte iOS SDK_Project
//
//  Created by AndrewShmig on 05/27/13.
//  Copyright (c) 2013 AndrewShmig. All rights reserved.
//

#import "ASAAppDelegate.h"
#import "ASAViewController.h"
#import "VKUser.h"

static NSString *const kVKAppID = @"3541027";
static NSString *const kVKPermissionsArray = @"photos,friends,wall,audio,video,docs,notes,pages,status,groups,messages";

@implementation ASAAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [[VKConnector sharedInstance] setDelegate:self];
    [[VKConnector sharedInstance] startWithAppID:kVKAppID
                                      permissons:[kVKPermissionsArray componentsSeparatedByString:@","]];

    // Override point for customization after application launch.
    self.viewController = [[ASAViewController alloc] initWithNibName:@"ASAViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)VKConnector:(VKConnector *)connector willShowModalView:(KGModal *)view
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)VKConnector:(VKConnector *)connector willHideModalView:(KGModal *)view
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)VKConnector:(VKConnector *)connector accessTokenInvalidated:(VKAccessToken *)accessToken
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)VKConnector:(VKConnector *)connector accessTokenRenewalFailed:(VKAccessToken *)accessToken
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)VKConnector:(VKConnector *)connector accessTokenRenewalSucceeded:(VKAccessToken *)accessToken
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)VKConnector:(VKConnector *)connector connectionErrorOccured:(NSError *)error
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)VKConnector:(VKConnector *)connector parsingErrorOccured:(NSError *)error
{
    NSLog(@"%s", __FUNCTION__);
}

@end

Позже запуска перед пользователем появляется приблизительно такое модальное окно (применялся KGModal) для авторизации приложения:
image

Если появляются вопросы либо вы не знаете для чего необходим (за что отвечает) тот либо другой способ, то обращайтесь отважно к документации. Документация сгенерирована при помощи AppleDoc и выглядит в целом дальнейшим образом:
image

VKConnectorProtocol:
image

XCode поможет в этом:
image

В заключение

Статья, как мне кажется, получилась довольно длинной, так что на этом пока остановлюсь, правда к сожалению многое не упомянул из того, что планировал (загрузка файлов, обновление токена, обработка ошибок и тд)

Хочу подметить, что план энергично прогрессирует и поддерживается. Нынешний ранг плана — «Готов», следственно в v1.0 будут только исправляться ошибки и вноситься мелкие коррективы. Все всеобщии метаморфозы переносятся в v2.0.

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

Некоторую информацию по Vkontakte iOS SDK v2.0, дозволено обнаружить тут: GitHub (https://github.com/AndrewShmig/Vkontakte-iOS-SDK-v2.0/issues?labels=Future features&state=open)

Благодарствую за внимание.

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

Оставить комментарий
БАЗА ЗНАНИЙ
СЛУЧАЙНАЯ СТАТЬЯ
СЛУЧАЙНЫЙ БЛОГ
СЛУЧАЙНЫЙ МОД
СЛУЧАЙНЫЙ СКИН
НОВЫЕ МОДЫ
НОВЫЕ СКИНЫ
НАКОПЛЕННЫЙ ОПЫТ
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB