AndrewShmig / Vkontakte-iOS-SDK-LV

[iOS] Powerful & flexible Vkontakte iOS SDK Latest Version
79 stars 23 forks source link

Базовый пример использования #35

Closed AndrewShmig closed 10 years ago

AndrewShmig commented 10 years ago

Как и в прошлых версиях необходимо сперва создать проект, затем добавить QuartzCore.framework и подключить Vkontakte iOS SDK.

Приводим AppDelegate.h к такому виду:

#import <UIKit/UIKit.h>
#import "VKConnector.h"
#import "VKRequest.h"

@class ASAViewController;

@interface ASAAppDelegate : UIResponder <UIApplicationDelegate, VKConnectorDelegate, VKRequestDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ASAViewController *viewController;

@end

Импортируем в AppDelegate.m следующие модули:

#import "VKAccessToken.h"
#import "VKRequestManager.h"
#import "VKUser.h"

Объявляем следующие константы (в качестве примера используется идентификатор моего тестового приложения):

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

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

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

Этот метод размещаем следующим образом:

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

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

    // 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
accessTokenRenewalSucceeded:(VKAccessToken *)accessToken

Тело метода:

- (void)        VKConnector:(VKConnector *)connector
accessTokenRenewalSucceeded:(VKAccessToken *)accessToken
{
    VKRequestManager *rm = [[VKRequestManager alloc] initWithDelegate:self
                                                                 user:[VKUser currentUser]];
    [rm friendsGet:@{
            @"user_id" : @"58487857",
            @"fields"  : @"nickname,screen_name,sex,bdate,city,country,timezone,photo_50,photo_100,photo_200_orig,has_mobile,contacts,education,online,relation,last_seen,status,can_write_private_message,can_see_all_posts,can_post,universities"
    }];
}

Как видите теперь вызов происходит не так:

[[VKUser currentUser] friendsGet:@{...}];

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

Вы так же можете управлять автоматическим запуском запросов или переключать режим offline:

    VKRequestManager *rm = [[VKRequestManager alloc] initWithDelegate:self
                                                                 user:[VKUser currentUser]];
    rm.startAllRequestsImmediately = NO;
    rm.offlineMode = YES;

    [rm friendsGet:@{
            @"user_id" : @"58487857",
            @"fields"  : @"nickname,screen_name,sex,bdate,city,country,timezone,photo_50,photo_100,photo_200_orig,has_mobile,contacts,education,online,relation,last_seen,status,can_write_private_message,can_see_all_posts,can_post,universities"
    }];

Стоит помнить, что, когда вы передаете экземпляр класса VKUser в метод инициализации, то все запросы будут осуществляться с добавлением токена доступа этого пользователя. В случае, если передается nil в качестве пользовательского объекта, то запросы будут осуществляться без добавления какого либо токена доступа.