Krótkie wprowadzenie do iOS

Kroki opisane na tej stronie wyjaśniają, jak można szybko utworzyć prostą aplikację na iOS, która wysyła żądania do interfejsu YouTube Data API. Ten przykład pokazuje, jak pobrać dane o kanale GoogleDevelopers w YouTube. Kod zawiera też komentarze, które wyjaśniają, jak zmodyfikować zapytanie, by pobrać dane o kanale YouTube bieżącego użytkownika.

Wymagania wstępne

Aby uruchomić ten krótki przewodnik, musisz mieć:

  • Xcode 8.0 lub nowsza wersja.
  • Menedżer zależności CocoaPods.
  • Dostęp do internetu i przeglądarki.
  • Musisz mieć konto Google.

Krok 1. Włącz YouTube Data API

  1. Aby utworzyć lub wybrać projekt w Google Developers Console i włączyć interfejs API, skorzystaj z tego kreatora. Kliknij Dalej, a następnie Otwórz dane logowania.

  2. Na stronie Utwórz dane logowania kliknij przycisk Anuluj.

  3. U góry strony wybierz kartę Ekran zgody OAuth. Wybierz Adres e-mail, wpisz nazwę produktu, jeśli nie została jeszcze ustawiona, i kliknij przycisk Zapisz.

  4. Wybierz kartę Dane logowania, kliknij Utwórz dane logowania i wybierz Identyfikator klienta OAuth.

  5. Wybierz typ aplikacji iOS, wpisz nazwę „Szybki start interfejsu YouTube Data API”, identyfikator pakietu com.example.QuickstartApp i kliknij przycisk Utwórz.

Krok 2. Przygotuj obszar roboczy

  1. Otwórz Xcode i utwórz nowy projekt:
    1. Kliknij Plik > Nowy > Projekt, wybierz szablon iOS > Aplikacja > Aplikacja z pojedynczym widokiem danych i kliknij Dalej.
    2. Ustaw Nazwę produktu na „QuickstartApp” (Identyfikator aplikacji), Identyfikator organizacji na „com.example”, a Język na Goal-C. Pod identyfikatorem organizacji powinien być wygenerowany identyfikator pakietu zgodny z identyfikatorem pakietu na iOS (com.example.QuickstartApp), który podałeś w kroku 1.b.
    3. Kliknij Dalej.
    4. Wybierz katalog docelowy dla projektu i kliknij Utwórz.
  2. Aby zamknąć projekt, kliknij Plik > Zamknij projekt.
  3. Otwórz okno terminala i przejdź do katalogu zawierającego właśnie utworzony plik QuickstartApp.xcodeproj.
  4. Uruchom te polecenia, aby utworzyć plik Podfile, zainstalować bibliotekę i otworzyć wynikowy projekt 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. W Nawigatorze projektów XCode wybierz węzeł projektu „QuickstartApp”. Następnie kliknij pozycję menu Plik > Dodaj pliki do aplikacji „QuickstartApp”.

  6. Znajdź i zaznacz pobrany wcześniej plik GoogleService-Info.plist. Kliknij przycisk Opcje.

  7. W oknie opcji wybierz te opcje, a potem kliknij przycisk Dodaj:

    1. Zaznacz pole wyboru Kopiuj elementy w razie potrzeby.
    2. Sprawdź wszystkie cele w sekcji Dodaj do celów.

  8. Po zaznaczeniu węzła projektu w sekcjiTARGETS wybierz „QuickstartApp”, jak na 2 poniższych obrazach:

    1. Kliknij obszar widoczny na zrzucie ekranu:

    2. Następnie wybierz odpowiedni cel:

  9. Wybierz kartę Informacje i rozwiń sekcję Typy adresów URL.

  10. Kliknij przycisk + i dodaj schemat adresu URL dla odwróconego identyfikatora klienta. Aby znaleźć tę wartość, otwórz plik konfiguracji GoogleService-Info.plist wybrany w kroku 2.f. Znajdź klucz REVERSED_CLIENT_ID. Skopiuj wartość tego klucza i wklej ją w polu Schematy adresów URL na stronie konfiguracji. Pozostałe pola pozostaw puste.

  11. Utwórz projekt od nowa:

    1. Kliknij Produkt > Wyczyść folder kompilacji (przytrzymaj klawisz option).
    2. Kliknij Produkt > Utwórz.

Krok 3. Skonfiguruj przykład

Zastąp zawartość tych plików określonym kodem:

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

Krok 4. Uruchom przykład

Przełącz się na schemat QuickstartApp, klikając Product > Scheme > QuickstartApp (Produkt > Schemat > QuickstartApp), a następnie uruchom przykład (Cmd+R) za pomocą symulatora urządzenia lub skonfigurowanego urządzenia. Przy pierwszym uruchomieniu próbki zobaczysz prośbę o zalogowanie się na konto Google i autoryzację dostępu.

Uwagi

  • Informacje o autoryzacji są przechowywane w pęku kluczy, więc kolejne wykonania nie będą prosić o autoryzację.

Więcej informacji