Шаги, описанные на этой странице, объясняют, как быстро создать простое приложение для iOS, которое отправляет запросы к API данных YouTube. В этом примере показано, как получить данные о канале YouTube GoogleDevelopers . Код также включает комментарии, поясняющие, как изменить запрос для получения данных о канале YouTube текущего пользователя.
Предпосылки
Для запуска этого краткого руководства вам потребуется:
- Xcode 8.0 или выше.
- Менеджер зависимостей CocoaPods .
- Доступ к Интернету и веб-браузер.
- Аккаунт Google.
Шаг 1. Включите API данных YouTube
Используйте этот мастер для создания или выбора проекта в Google Developers Console и автоматического включения API. Нажмите «Продолжить» , затем «Перейти к учетным данным» .
На странице «Создать учетные данные» нажмите кнопку «Отмена» .
В верхней части страницы выберите вкладку экрана согласия OAuth . Выберите адрес электронной почты , введите название продукта, если оно еще не задано, и нажмите кнопку «Сохранить» .
Выберите вкладку «Учетные данные» , нажмите кнопку «Создать учетные данные» и выберите «Идентификатор клиента OAuth ».
- Выберите тип приложения iOS , введите название «YouTube Data API Quickstart», идентификатор пакета
com.example.QuickstartApp
и нажмите кнопку «Создать» .
Шаг 2: Подготовьте рабочее пространство
- Откройте Xcode и создайте новый проект:
- Нажмите «Файл» > «Создать» > «Проект» , выберите шаблон «iOS» > «Приложение» > «Приложение с одним представлением» и нажмите «Далее» .
- Установите для имени продукта значение «QuickstartApp», для идентификатора организации — «com.example» и для языка — значениеObjective-C. Под идентификатором организации вы должны увидеть сгенерированный идентификатор пакета , который соответствует идентификатору пакета iOS (
com.example.QuickstartApp
), который вы ввели на шаге 1.b. - Нажмите «Далее» .
- Выберите целевой каталог для проекта и нажмите «Создать» .
- Закройте проект, нажав Файл > Закрыть проект .
- Откройте окно терминала и перейдите в каталог, содержащий только что созданный файл
QuickstartApp.xcodeproj
. Выполните следующие команды, чтобы создать 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
В навигаторе проектов XCode выберите узел проекта «QuickstartApp». Затем щелкните пункт меню «Файл» > «Добавить файлы в «QuickstartApp» .
Найдите загруженный ранее файл
GoogleService-Info.plist
и выберите его. Нажмите кнопку «Параметры» .Сделайте следующие выборы в окне параметров, а затем нажмите кнопку «Добавить» :
- Установите флажок Копировать элементы, если необходимо .
- Отметьте все цели, перечисленные в разделе «Добавить к целям» .
Не снимая выделения с узла проекта, выберите «QuickstartApp» в разделе «Цели », как показано на двух изображениях ниже:
Щелкните область, показанную на этом снимке экрана:
Затем выберите подходящую цель:
Выберите вкладку «Информация» и разверните раздел «Типы URL» .
Нажмите кнопку + и добавьте схему URL-адресов для обратного идентификатора клиента. Чтобы найти это значение, откройте файл конфигурации
GoogleService-Info.plist
, который вы выбрали на шаге 2.f. Найдите ключ REVERSED_CLIENT_ID . Скопируйте значение этого ключа и вставьте его в поле «Схемы URL» на странице конфигурации. Остальные поля оставьте пустыми.Пересоберите проект:
- Нажмите «Продукт» > «Очистить папку сборки» (удерживая нажатой клавишу выбора ).
- Щелкните Продукт > Создать .
Шаг 3: Настройте образец
Замените содержимое следующих файлов предоставленным кодом:#import <UIKit/UIKit.h> @import GoogleSignIn; @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end
#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
#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
#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 и авторизовать доступ.
Примечания
- Информация об авторизации хранится в вашей связке ключей, поэтому последующие выполнения не будут запрашивать авторизацию.