Краткое руководство по iOS

В этой статье рассказывается, как быстро создать простое приложение для iOS, которое отправляет запросы к YouTube Data API. В этом примере показано, как получить данные о канале YouTube GoogleDevelopers. В коде также есть комментарии, в которых объясняется, как изменить запрос, чтобы получить данные о канале YouTube текущего пользователя.

Требования

Чтобы выполнить инструкции из этого руководства, вам потребуется:

  • Xcode 8.0 или более поздней версии.
  • Менеджер зависимостей CocoaPods.
  • Доступ к интернету и веб-браузер.
  • Аккаунт Google.

Шаг 1. Включите YouTube Data API

  1. Воспользуйтесь этим мастером, чтобы создать или выбрать проект в Google Developers Console и автоматически включить API. Нажмите Продолжить, а затем Перейти к учетным данным.

  2. На странице Create credentials (Создание учетных данных) нажмите кнопку Cancel (Отмена).

  3. В верхней части страницы выберите вкладку Окно запроса доступа OAuth. Выберите Адрес электронной почты, введите Название товара, если оно ещё не указано, и нажмите кнопку Сохранить.

  4. Перейдите на вкладку Учетные данные, нажмите кнопку Создать учетные данные и выберите Идентификатор клиента OAuth.

  5. Выберите тип приложения iOS, введите название "YouTube Data API Quickstart", идентификатор пакета com.example.QuickstartApp и нажмите кнопку Create (Создать).

Шаг 2. Подготовьте рабочую область

  1. Откройте Xcode и создайте новый проект:
    1. Выберите File (Файл) > New (Создать) > Project (Проект), затем iOS > Application (Приложение) > Single View Application (Приложение с одним представлением) и нажмите Next (Далее).
    2. В поле Product Name (Название продукта) введите QuickstartApp, в поле Organization Identifier (Идентификатор организации) – com.example, а в поле Language (Язык) – Objective-C. Под идентификатором организации вы увидите сгенерированный идентификатор пакета, который совпадает с идентификатором пакета iOS (com.example.QuickstartApp), указанным на шаге 1б.
    3. Нажмите Далее.
    4. Выберите целевой каталог для проекта и нажмите Create (Создать).
  2. Закройте проект, нажав Файл > Закрыть проект.
  3. Откройте окно терминала и перейдите в каталог, содержащий только что созданный файл QuickstartApp.xcodeproj.
  4. Чтобы создать Podfile, установить библиотеку и открыть полученный проект XCode, выполните следующие команды:

    cat << EOF > Podfile &&
    platform :ios, '8.0'
    target 'QuickstartApp' do
        pod 'GoogleAPIClientForREST/YouTube', '~> 1.2.1'
        pod 'Google/SignIn', '~> 3.0.3'
    end
    EOF
    pod install &&
    open QuickstartApp.xcworkspace
    
  5. В навигаторе проектов Xcode выберите узел проекта QuickstartApp. Затем выберите пункт меню File > Add files to "QuickstartApp" (Файл > Добавить файлы в QuickstartApp).

  6. Найдите и выберите скачанный ранее файл GoogleService-Info.plist. Нажмите кнопку Параметры.

  7. В окне параметров выберите следующие значения и нажмите кнопку Добавить:

    1. Установите флажок При необходимости скопировать объекты.
    2. Проверьте все цели, перечисленные в разделе Добавить в цели.

  8. Не снимая выделения с узла проекта, выберите QuickstartApp в разделе TARGETS (ЦЕЛИ), как показано на двух изображениях ниже.

    1. Нажмите на область, показанную на скриншоте:

    2. Затем выберите нужную цель:

  9. Выберите вкладку Информация и разверните раздел Типы URL.

  10. Нажмите кнопку + и добавьте схему URL для обратного идентификатора клиента. Чтобы найти это значение, откройте файл конфигурации GoogleService-Info.plist, выбранный на шаге 2f. Найдите ключ REVERSED_CLIENT_ID. Скопируйте значение этого ключа и вставьте его в поле URL Schemes (Схемы URL) на странице конфигурации. Другие поля оставьте пустыми.

  11. Пересоберите проект.

    1. Нажмите Product (Продукт) > Clean Build Folder (Очистить каталог сборки), удерживая клавишу Option.
    2. Нажмите Product (Продукт) > Build (Сборка).

Шаг 3. Настройте образец

Замените содержимое следующих файлов предоставленным кодом:

AppDelegate.h
#import <UIKit/UIKit.h>
@import GoogleSignIn;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end
AppDelegate.m
#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Initialize Google sign-in.
    [GIDSignIn sharedInstance].clientID = @"<YOUR_CLIENT_ID>";

    return YES;
}

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    return [[GIDSignIn sharedInstance] handleURL:url
                               sourceApplication:sourceApplication
                                      annotation:annotation];
}


@end
ViewController.h
#import <UIKit/UIKit.h>
@import GoogleSignIn;
#import <GTLRYouTube.h>

@interface ViewController : UIViewController <GIDSignInDelegate, GIDSignInUIDelegate>

@property (nonatomic, strong) IBOutlet GIDSignInButton *signInButton;
@property (nonatomic, strong) UITextView *output;
@property (nonatomic, strong) GTLRYouTubeService *service;


@end
ViewController.m
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Configure Google Sign-in.
    GIDSignIn* signIn = [GIDSignIn sharedInstance];
    signIn.delegate = self;
    signIn.uiDelegate = self;
    signIn.scopes = [NSArray arrayWithObjects:kGTLRAuthScopeYouTubeReadonly, nil];
    [signIn signInSilently];

    // Add the sign-in button.
    self.signInButton = [[GIDSignInButton alloc] init];
    [self.view addSubview:self.signInButton];

    // Create a UITextView to display output.
    self.output = [[UITextView alloc] initWithFrame:self.view.bounds];
    self.output.editable = false;
    self.output.contentInset = UIEdgeInsetsMake(20.0, 0.0, 20.0, 0.0);
    self.output.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.output.hidden = true;
    [self.view addSubview:self.output];

    // Initialize the service object.
    self.service = [[GTLRYouTubeService alloc] init];
}

- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error {
    if (error != nil) {
        [self showAlert:@"Authentication Error" message:error.localizedDescription];
        self.service.authorizer = nil;
    } else {
        self.signInButton.hidden = true;
        self.output.hidden = false;
        self.service.authorizer = user.authentication.fetcherAuthorizer;
        [self fetchChannelResource];
    }
}


// Construct a query and retrieve the channel resource for the GoogleDevelopers
// YouTube channel. Display the channel title, description, and view count.
- (void)fetchChannelResource {
    GTLRYouTubeQuery_ChannelsList *query =
    [GTLRYouTubeQuery_ChannelsList queryWithPart:@"snippet,statistics"];
  query.identifier = @"UC_x5XG1OV2P6uZZ5FSM9Ttw";
  // To retrieve data for the current user's channel, comment out the previous
  // line (query.identifier ...) and uncomment the next line (query.mine ...).
  // query.mine = true;

  [self.service executeQuery:query
                    delegate:self
           didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)];
}

// Process the response and display output
- (void)displayResultWithTicket:(GTLRServiceTicket *)ticket
             finishedWithObject:(GTLRYouTube_ChannelListResponse *)channels
                          error:(NSError *)error {
  if (error == nil) {
    NSMutableString *output = [[NSMutableString alloc] init];
    if (channels.items.count > 0) {
      [output appendString:@"Channel information:\n"];
      for (GTLRYouTube_Channel *channel in channels) {
        NSString *title = channel.snippet.title;
        NSString *description = channel.snippet.description;
        NSNumber *viewCount = channel.statistics.viewCount;
        [output appendFormat:@"Title: %@\nDescription: %@\nViewCount: %@\n", title, description, viewCount];
      }
    } else {
      [output appendString:@"Channel not found."];
    }
    self.output.text = output;
  } else {
    [self showAlert:@"Error" message:error.localizedDescription];
  }
}


// Helper for showing an alert
- (void)showAlert:(NSString *)title message:(NSString *)message {
    UIAlertController *alert =
    [UIAlertController alertControllerWithTitle:title
                                        message:message
                                 preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *ok =
    [UIAlertAction actionWithTitle:@"OK"
                             style:UIAlertActionStyleDefault
                           handler:^(UIAlertAction * action)
     {
         [alert dismissViewControllerAnimated:YES completion:nil];
     }];
    [alert addAction:ok];
    [self presentViewController:alert animated:YES completion:nil];
}


@end

Шаг 4. Запустите пример

Переключитесь на схему QuickstartApp, нажав Product > Scheme > QuickstartApp, и запустите образец (Cmd+R), используя симулятор устройства или настроенное устройство. При первом запуске примера вам будет предложено войти в аккаунт Google и разрешить доступ.

Примечания

  • Информация об авторизации хранится в связке ключей, поэтому при последующих запусках авторизация не потребуется.

Дополнительные сведения