بدء التشغيل السريع على أجهزة iOS

توضّح الخطوات الموضّحة في هذه الصفحة كيفية إنشاء تطبيق بسيط على iOS بسرعة يرسل طلبات إلى YouTube Data API. يوضّح هذا النموذج كيفية استرداد بيانات حول قناة GoogleDevelopers على YouTube. يتضمّن الرمز أيضًا تعليقات توضّح كيفية تعديل طلب البحث لاسترداد بيانات حول قناة المستخدم الحالية على YouTube.

المتطلبات الأساسية

لتشغيل هذا التشغيل السريع، ستحتاج إلى ما يلي:

  • الإصدار 8.0 من Xcode أو إصدار أحدث
  • أداة إدارة التبعيات CocoaPods
  • يجب أن يكون لديك اتصال بالإنترنت ومتصفّح ويب.
  • حساب Google

الخطوة 1: تفعيل YouTube Data API

  1. استخدِم هذا المعالج لإنشاء مشروع أو اختياره في Google Developers Console وتفعيل واجهة برمجة التطبيقات تلقائيًا. انقر على متابعة، ثم على الانتقال إلى بيانات الاعتماد.

  2. في صفحة إنشاء بيانات الاعتماد، انقر على الزر إلغاء.

  3. انقر على علامة التبويب شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth في أعلى الصفحة. اختَر عنوان بريد إلكتروني، وأدخِل اسم منتج إذا لم يكن قد تم ضبطه، ثم انقر على زر حفظ.

  4. انقر على علامة التبويب بيانات الاعتماد، ثم على الزر إنشاء بيانات اعتماد واختَر معرّف عميل OAuth.

  5. اختَر نوع التطبيق iOS، وأدخِل الاسم "YouTube Data API Quickstart" ومعرّف الحزمة com.example.QuickstartApp، ثم انقر على الزر إنشاء.

الخطوة 2: إعداد مساحة العمل

  1. افتح Xcode وأنشئ مشروعًا جديدًا:
    1. انقر على ملف > جديد > مشروع، واختَر نموذج iOS > تطبيق > تطبيق عرض واحد، ثم انقر على التالي.
    2. اضبط اسم المنتج على "QuickstartApp"، ومعرّف المؤسسة على "com.example"، واللغة علىObjective-C. أسفل معرّف المؤسسة، من المفترض أن يظهر معرّف حزمة تم إنشاؤه ويتطابق مع معرّف حزمة iOS (com.example.QuickstartApp) الذي أدخلته في الخطوة 1.ب.
    3. انقر على التالي.
    4. اختَر دليل الوجهة للمشروع وانقر على إنشاء.
  2. أغلِق المشروع بالنقر على ملف > إغلاق المشروع.
  3. افتح نافذة "الوحدة الطرفية" وانتقِل إلى الدليل الذي يحتوي على الملف 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. في "مستكشف المشروع" (Project Navigator) في XCode، اختَر عقدة المشروع "QuickstartApp". بعد ذلك، انقر على عنصر القائمة ملف (File) > إضافة ملفات إلى QuickstartApp (Add files to QuickstartApp).

  6. ابحث عن ملف GoogleService-Info.plist الذي تم تنزيله سابقًا واختَره. انقر على زر الخيارات.

  7. حدِّد الخيارات التالية في نافذة الخيارات، ثم انقر على الزر إضافة:

    1. ضَع علامة في مربّع الاختيار نسخ العناصر إذا لزم الأمر.
    2. ضَع علامة في المربّع بجانب كل الأهداف المُدرَجة في قسم الإضافة إلى الأهداف.

  8. مع إبقاء عقدة المشروع محدّدة، اختَر QuickstartApp في قسم TARGETS كما هو موضّح في الصورتَين أدناه:

    1. انقر على المنطقة الموضّحة في لقطة الشاشة هذه:

    2. بعد ذلك، اختَر الهدف المناسب:

  9. انقر على علامة التبويب المعلومات، ثم وسِّع قسم أنواع عناوين URL.

  10. انقر على الزر +، وأضِف مخطط عنوان URL لمعرّف العميل المعكوس. للعثور على هذه القيمة، افتح ملف الإعداد GoogleService-Info.plist الذي اخترته في الخطوة 2.f. ابحث عن المفتاح REVERSED_CLIENT_ID. انسخ قيمة هذا المفتاح والصِقها في المربّع مخططات عناوين URL في صفحة الإعداد. اترك الحقول الأخرى فارغة.

  11. أعِد إنشاء المشروع:

    1. انقر على المنتج > تنظيف مجلد الإنشاء (مع الضغط على مفتاح option).
    2. انقر على المنتج > إنشاء.

الخطوة 3: إعداد العيّنة

استبدِل محتوى الملفات التالية بالرمز البرمجي المقدَّم:

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

الخطوة 4: تشغيل العيّنة

بدِّل إلى مخطط QuickstartApp من خلال النقر على المنتج > المخطط > QuickstartApp وشغِّل العيّنة (Cmd+R) باستخدام محاكي الجهاز أو جهاز تم إعداده. في المرة الأولى التي تشغّل فيها النموذج، سيُطلب منك تسجيل الدخول إلى حسابك على Google ومنح إذن الوصول.

ملاحظات

  • يتم تخزين معلومات التفويض في "سلسلة المفاتيح"، وبالتالي لن يُطلب منك تقديم تفويض في عمليات التنفيذ اللاحقة.

محتوى إضافي للقراءة