توضّح الخطوات الموضّحة في هذه الصفحة كيفية إنشاء تطبيق بسيط على iOS بسرعة لإرسال طلبات إلى YouTube Data API. يعرض هذا النموذج كيفية استرداد بيانات عن قناة على YouTube GoogleDevelopers. يتضمّن الرمز أيضًا تعليقات توضّح كيفية تعديل طلب البحث لاسترداد بيانات عن قناة YouTube الخاصة بالمستخدم الحالي.
المتطلبات الأساسية
لتشغيل هذا التشغيل السريع، ستحتاج إلى ما يلي:
الخطوة 1: تفعيل YouTube Data API
-
استخدِم هذا المعالج لإنشاء مشروع أو اختياره في Google Developers Console و تفعيل واجهة برمجة التطبيقات تلقائيًا. انقر على متابعة، ثم على الانتقال إلى بيانات الاعتماد.
-
في صفحة إنشاء بيانات اعتماد ، انقر على الزرّ إلغاء.
-
في أعلى الصفحة، انقر على علامة التبويب شاشة طلب الموافقة على OAuth. اختَر عنوان بريد إلكتروني، وأدخِل اسم منتج إذا لم يكن قد تم ضبطه، وانقر على الزرّ حفظ.
-
انقر على علامة التبويب بيانات الاعتماد ، ثم على الزرّ إنشاء بيانات اعتماد واختَر معرِّف عميل OAuth.
- اختَر نوع التطبيق iOS، وأدخِل الاسم "YouTube Data API
Quickstart" ومعرِّف الحزمة
com.example.QuickstartApp، وانقر على الزرّ Create
الخطوة 2: إعداد مساحة العمل
- افتح Xcode وأنشئ مشروعًا جديدًا:
- انقر على ملف > جديد > مشروع ، واختَر نموذج iOS > تطبيق > تطبيق عرض واحد ، وانقر على التالي.
- اضبط اسم المنتج على "QuickstartApp" ومعرِّف المؤسسة
على "com.example" واللغة على
Objective-C.
أسفل معرِّف المؤسسة، من المفترض أن يظهر
معرِّف حزمة تم إنشاؤه يتطابق مع معرِّف حزمة iOS
(
com.example.QuickstartApp) الذي أدخلته في الخطوة 1.ب. - انقر على التالي.
- اختَر دليل وجهة للمشروع وانقر على إنشاء.
- أغلِق المشروع بالنقر على ملف > إغلاق المشروع.
- افتح نافذة "محطة طرفية" وانتقِل إلى الدليل الذي يحتوي على ملف
QuickstartApp.xcodeprojالذي أنشأته للتو. نفِّذ الأوامر التالية لإنشاء ملف 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في "مستكشف مشروع XCode"، اختَر عقدة المشروع "QuickstartApp". بعد ذلك، انقر على خيار القائمة ملف > إضافة ملفات إلى "QuickstartApp".

حدِّد موقع ملف
GoogleService-Info.plistالذي تم تنزيله سابقًا واختَره. انقر على الزرّ خيارات.
اختَر الخيارات التالية في نافذة الخيارات، ثم انقر على الزرّ إضافة:
- ضَع علامة في مربّع الاختيار نسخ العناصر إذا لزم الأمر.
- ضَع علامة في جميع الأهداف المُدرَجة في قسم الإضافة إلى الأهداف.

مع بقاء عقدة المشروع محدّدة، اختَر "QuickstartApp" في قسم الأهداف كما هو موضّح في الصورتَين أدناه:
انقر على المنطقة الموضّحة في لقطة الشاشة هذه:

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

انقر على علامة التبويب معلومات ، ووسِّع قسم أنواع عناوين URL.
انقر على الزرّ + ، وأضِف مخطّط URL لمعرِّف العميل المعكوس. للعثور على هذه القيمة، افتح ملف الإعداد
GoogleService-Info.plistالذي اخترته في الخطوة 2.و. ابحث عن المفتاح REVERSED_CLIENT_ID. انسخ قيمة هذا المفتاح والصِقها في مربّع مخططات عناوين URL في صفحة الإعدادات. اترك الحقول الأخرى فارغة.أعِد إنشاء المشروع:
- انقر على المنتج > تنظيف مجلد الإصدار (مع الضغط على مفتاح الخيار ).
- انقر على المنتج > إنشاء.
الخطوة 3: إعداد النموذج
استبدِل محتوى الملفات التالية بالرمز البرمجي المقدَّم:#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
الخطوة 4: تشغيل النموذج
انتقِل إلى مخطط QuickstartApp من خلال النقر على المنتج > المخطط > QuickstartApp وشغِّل النموذج (Cmd+R) باستخدام محاكي الجهاز أو جهاز تم ضبطه. في المرّة الأولى التي تشغِّل فيها النموذج، سيُطلب منك تسجيل الدخول إلى حسابك على Google ومنح الإذن بالوصول.
ملاحظات
- يتم تخزين معلومات التفويض في Keychain، لذا لن يُطلب منك منح الإذن في عمليات التنفيذ اللاحقة.