Krótkie wprowadzenie do iOS

Z instrukcji na tej stronie dowiesz się, jak 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 YouTube GoogleDevelopers. Kod zawiera też komentarze, które wyjaśniają, jak zmodyfikować zapytanie, aby pobrać dane o kanale w YouTube bieżącego użytkownika.

Wymagania wstępne

Aby uruchomić ten przewodnik, musisz mieć:

  • Xcode w wersji 8.0 lub nowszej.
  • Menedżer zależności CocoaPods.
  • Dostęp do internetu i przeglądarki.
  • konto Google;

Krok 1. Włącz interfejs YouTube Data API

  1. Użyj tego kreatora, aby utworzyć lub wybrać projekt w Google Developers Console i automatycznie włączyć interfejs API. Kliknij Dalej, a potem Przejdź do danych 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 przycisk Utwórz dane logowania i wybierz Identyfikator klienta OAuth.

  5. Wybierz typ aplikacji iOS, wpisz nazwę „YouTube Data API Quickstart”, 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 jednym widokiem i kliknij Dalej.
    2. Ustaw Nazwę produktu na „QuickstartApp”, Identyfikator organizacji na „com.example”, a Język na Objective-C. Pod identyfikatorem organizacji powinien być widoczny wygenerowany identyfikator pakietu, który pasuje do identyfikatora pakietu iOS (com.example.QuickstartApp) wpisanego w kroku 1.b.
    3. Kliknij Dalej.
    4. Wybierz katalog docelowy projektu i kliknij Utwórz.
  2. Zamknij projekt, klikając Plik > Zamknij projekt.
  3. Otwórz okno terminala i przejdź do katalogu zawierającego utworzony właśnie plik QuickstartApp.xcodeproj.
  4. Aby utworzyć plik Podfile, zainstalować bibliotekę i otworzyć wynikowy projekt Xcode, uruchom te polecenia:

    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 projektu XCode wybierz węzeł projektu „QuickstartApp”. Następnie kliknij kolejno Plik > Dodaj pliki do „QuickstartApp”.

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

  7. W oknie opcji wybierz te ustawienia, a następnie kliknij przycisk Dodaj:

    1. Zaznacz pole wyboru Copy items if needed (Skopiuj elementy w razie potrzeby).
    2. Zaznacz wszystkie cele wymienione w sekcji Dodaj do celów.

  8. Gdy węzeł projektu jest nadal zaznaczony, w sekcji CELE wybierz „QuickstartApp”, jak pokazano na 2 obrazach poniżej:

    1. Kliknij obszar widoczny na tym zrzucie ekranu:

    2. Następnie wybierz odpowiedni cel:

  9. Kliknij 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 URL na stronie konfiguracji. Pozostałe pola pozostaw puste.

  11. Przebuduj projekt:

    1. Kliknij Product > Clean Build Folder (przytrzymując klawisz option).
    2. Kliknij Produkt > Utwórz.

Krok 3. Skonfiguruj próbkę

Zastąp zawartość tych plików podanym 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, i uruchom przykład (Cmd+R) za pomocą symulatora urządzenia lub skonfigurowanego urządzenia. Przy pierwszym uruchomieniu przykładu pojawi się prośba 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ą wymagać autoryzacji.

Więcej informacji