Быстрый запуск iOS

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

Предпосылки

Для запуска этого краткого руководства вам потребуется:

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

Шаг 1. Включите API данных YouTube

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

  2. На странице «Создать учетные данные» нажмите кнопку «Отмена» .

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

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

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

Шаг 2: Подготовьте рабочее пространство

  1. Откройте Xcode и создайте новый проект:
    1. Нажмите «Файл» > «Создать» > «Проект» , выберите шаблон «iOS» > «Приложение» > «Приложение с одним представлением» и нажмите «Далее» .
    2. Установите для имени продукта значение «QuickstartApp», для идентификатора организации — «com.example» и для языка — значениеObjective-C. Под идентификатором организации вы должны увидеть сгенерированный идентификатор пакета , который соответствует идентификатору пакета iOS ( com.example.QuickstartApp ), который вы ввели на шаге 1.b.
    3. Нажмите «Далее» .
    4. Выберите целевой каталог для проекта и нажмите «Создать» .
  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». Затем щелкните пункт меню «Файл» > «Добавить файлы в «QuickstartApp» .

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

  7. Сделайте следующие выборы в окне параметров, а затем нажмите кнопку «Добавить» :

    1. Установите флажок Копировать элементы, если необходимо .
    2. Отметьте все цели, перечисленные в разделе «Добавить к целям» .

  8. Не снимая выделения с узла проекта, выберите «QuickstartApp» в разделе «Цели », как показано на двух изображениях ниже:

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

    2. Затем выберите подходящую цель:

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

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

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

    1. Нажмите «Продукт» > «Очистить папку сборки» (удерживая нажатой клавишу выбора ).
    2. Щелкните Продукт > Создать .

Шаг 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 , щелкнув Продукт > Схема > QuickstartApp , и запустите образец (Cmd+R) с помощью симулятора устройства или настроенного устройства. При первом запуске примера вам будет предложено войти в свою учетную запись Google и авторизовать доступ.

Примечания

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

дальнейшее чтение