Шаги, описанные на этой странице, объясняют, как быстро создать простое приложение для iOS, которое отправляет запросы к API данных YouTube. В этом примере показано, как получить данные о канале GoogleDevelopers на YouTube. Код также включает комментарии, объясняющие, как изменить запрос для получения данных о канале YouTube текущего пользователя.
Предварительные условия
Чтобы запустить это краткое руководство, вам понадобится:
- Xcode 8.0 или выше.
- Менеджер зависимостей CocoaPods .
- Доступ к Интернету и веб-браузеру.
- Аккаунт Google.
Шаг 1. Включите API данных YouTube.
Используйте этот мастер , чтобы создать или выбрать проект в консоли разработчиков Google и автоматически включить API. Нажмите «Продолжить» , затем «Перейти к учетным данным» .
На странице «Создать учетные данные» нажмите кнопку «Отмена» .
В верхней части страницы выберите вкладку экрана согласия OAuth . Выберите адрес электронной почты , введите название продукта , если оно еще не задано, и нажмите кнопку «Сохранить» .
Выберите вкладку «Учетные данные» , нажмите кнопку «Создать учетные данные» и выберите идентификатор клиента OAuth .
- Выберите тип приложения iOS , введите имя «YouTube Data API Quickstart», идентификатор пакета
com.example.QuickstartApp
и нажмите кнопку «Создать ».
Шаг 2. Подготовьте рабочее место.
- Откройте Xcode и создайте новый проект:
- Нажмите «Файл» > «Создать» > «Проект» , выберите шаблон iOS > «Приложение» > «Приложение с одним представлением» и нажмите « Далее» .
- Установите для имени продукта значение «QuickstartApp», для идентификатора организации — «com.example», а для языка — значение.Цель-C. Под идентификатором организации вы должны увидеть сгенерированный идентификатор пакета , который соответствует идентификатору пакета iOS (
com.example.QuickstartApp
), который вы ввели на шаге 1.b. - Нажмите Далее .
- Выберите каталог назначения для проекта и нажмите « Создать» .
- Закройте проект, нажав Файл > Закрыть проект .
- Откройте окно терминала и перейдите в каталог, содержащий только что созданный файл
QuickstartApp.xcodeproj
. Выполните следующие команды, чтобы создать подфайл, установить библиотеку и открыть полученный проект 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 и авторизовать доступ.
Примечания
- Информация об авторизации хранится в вашей связке ключей, поэтому последующие выполнения не будут запрашивать авторизацию.