מדריך למתחילים ב-iOS

השלבים המפורטים בדף הזה מסבירים איך ליצור במהירות אפליקציה פשוטה ל-iOS ששולחים בקשות ל-YouTube Data API. הדוגמה הזו מראה איך לאחזר נתונים לגבי ערוץ YouTube של GoogleDevelopers. הקוד כולל גם תגובות שמסבירות כיצד לשנות את השאילתה כדי לאחזר נתונים על ערוץ YouTube של המשתמש הנוכחי.

דרישות מוקדמות

כדי להריץ את המדריך המהיר הזה, צריך:

  • Xcode 8.0 ומעלה.
  • מנהל התלות של CocoaPods.
  • גישה לאינטרנט ולדפדפן אינטרנט.
  • חשבון Google.

שלב 1: מפעילים את YouTube Data API

  1. יש להשתמש באשף הזה כדי ליצור או לבחור פרויקט ב-Google Developers Console ולהפעיל את ה-API באופן אוטומטי. לוחצים על Continue ואז על Go to credentials.

  2. בדף Create credentials לוחצים על הלחצן Cancel.

  3. בחלק העליון של הדף, בוחרים בכרטיסייה מסך הסכמה ל-OAuth. עליך לבחור כתובת אימייל, להזין שם מוצר אם עדיין לא הוגדר, וללחוץ על הלחצן שמירה.

  4. בוחרים בכרטיסייה Credentials, לוחצים על הלחצן Create credentials ובוחרים באפשרות OAuth client ID.

  5. בוחרים את סוג האפליקציה iOS, מזינים את השם "YouTube Data API","מדריך למתחילים", מזהה חבילה com.example.QuickstartApp, ולוחצים על הלחצן Create.

שלב 2: הכנת סביבת העבודה

  1. פותחים את Xcode ויוצרים פרויקט חדש:
    1. לוחצים על File > New > Project, בוחרים בתבנית iOS > Application > One View Application ולוחצים על Next.
    2. מגדירים את Product Name כ-"QuickstartApp", את Organization Identifier כ-"com.example", ואת Language כ-Objective-C. מתחת למזהה הארגון צריך להופיע מזהה חבילה שנוצר, שתואם למזהה החבילה של iOS (com.example.QuickstartApp) שהוזן בשלב 1.ב.
    3. לוחצים על הבא.
    4. בוחרים ספריית יעד לפרויקט ולוחצים על יצירה.
  2. סוגרים את הפרויקט בלחיצה על קובץ > סגירת הפרויקט.
  3. פותחים חלון Terminal ועוברים לספרייה שמכילה את קובץ ה-QuickstartApp.xcodeproj שיצרתם.
  4. מריצים את הפקודות הבאות כדי ליצור את הקובץ Podfile, להתקין את הספרייה ולפתוח את פרויקט 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 Project Navigator, בוחרים את צומת הפרויקט "QuickstartApp". לאחר מכן לוחצים על האפשרות בתפריט קובץ > הוספת קבצים ל-"QuickstartApp".

  6. מאתרים את הקובץ GoogleService-Info.plist שהורדתם מוקדם יותר ובוחרים בו. לוחצים על הלחצן אפשרויות.

  7. בוחרים באפשרויות הבאות בחלון האפשרויות ולוחצים על הלחצן Add:

    1. מסמנים את התיבה העתקת פריטים במקרה הצורך.
    2. בודקים את כל היעדים המפורטים בקטע הוספה ליעדים.

  8. כשצומת הפרויקט עדיין מסומן, בוחרים באפשרות QuickstartApp בקטע TARGETS מתוך שתי התמונות הבאות:

    1. לוחצים על האזור שמוצג בצילום המסך הזה:

    2. לאחר מכן בוחרים את היעד המתאים:

  9. בוחרים בכרטיסייה מידע ומרחיבים את הקטע סוגי כתובות URL.

  10. לוחצים על הלחצן + ומוסיפים סכימת URL למזהה הלקוח ההפוך. כדי למצוא את הערך הזה, פותחים את קובץ התצורה של GoogleService-Info.plist שבחרתם בשלב 2.ו. מחפשים את המפתח REVERSED_CLIENT_ID. צריך להעתיק את הערך של המפתח הזה ולהדביק אותו בתיבה סכמות של כתובות URL בדף ההגדרה. משאירים את שאר השדות ריקים.

  11. בונים מחדש את הפרויקט:

    1. לוחצים על Product > Clear Build folder (תוך לחיצה על המקש option.
    2. לוחצים על Product > Build.

שלב 3: הגדרת הדוגמה

מחליפים את הקבצים שבתוכן בקוד הבא:

AppDelegate.h
#import <UIKit/UIKit.h>
@import GoogleSignIn;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end
Appאצל.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

שלב 4: הרצת הדוגמה

מומלץ לעבור לסכמת QuickstartApp בלחיצה על Product > Scheme > QuickstartApp (הרצת מוצר > סכמה > QuickstartApp) והפעלת הדגימה (Cmd+R) באמצעות הסימולטור של המכשיר או מכשיר שהוגדר. בפעם הראשונה שתפעילו את הדוגמה, תתבקשו להתחבר לחשבון Google ולאשר את הגישה.

הערות

  • פרטי ההרשאה מאוחסנים ב-Keychain שלך, כך שההפעלות הבאות לא יציגו בקשה להרשאה.

קריאה נוספת