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
-
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.
-
Na stronie Utwórz dane logowania kliknij przycisk Anuluj.
-
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.
-
Wybierz kartę Dane logowania, kliknij Utwórz dane logowania i wybierz Identyfikator klienta OAuth.
- 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
- Otwórz Xcode i utwórz nowy projekt:
- Kliknij Plik > Nowy > Projekt, wybierz szablon iOS > Aplikacja > Aplikacja z pojedynczym widokiem danych i kliknij Dalej.
- 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. - Kliknij Dalej.
- Wybierz katalog docelowy dla projektu i kliknij Utwórz.
- Aby zamknąć projekt, kliknij Plik > Zamknij projekt.
- Otwórz okno terminala i przejdź do katalogu zawierającego właśnie utworzony plik
QuickstartApp.xcodeproj
. 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
W Nawigatorze projektów XCode wybierz węzeł projektu „QuickstartApp”. Następnie kliknij pozycję menu Plik > Dodaj pliki do aplikacji „QuickstartApp”.
Znajdź i zaznacz pobrany wcześniej plik
GoogleService-Info.plist
. Kliknij przycisk Opcje.W oknie opcji wybierz te opcje, a potem kliknij przycisk Dodaj:
- Zaznacz pole wyboru Kopiuj elementy w razie potrzeby.
- Sprawdź wszystkie cele w sekcji Dodaj do celów.
Po zaznaczeniu węzła projektu w sekcjiTARGETS wybierz „QuickstartApp”, jak na 2 poniższych obrazach:
Kliknij obszar widoczny na zrzucie ekranu:
Następnie wybierz odpowiedni cel:
Wybierz kartę Informacje i rozwiń sekcję Typy adresów URL.
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.Utwórz projekt od nowa:
- Kliknij Produkt > Wyczyść folder kompilacji (przytrzymaj klawisz option).
- Kliknij Produkt > Utwórz.
Krok 3. Skonfiguruj przykład
Zastąp zawartość tych plików określonym kodem:#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
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ę.