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

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

Предварительные условия

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

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

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

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

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

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

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

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

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

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

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

#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 и авторизовать доступ.

Примечания

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

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