إزالة الغموض عن iOS 9 Spotlight Search for Developers
نشرت: 2022-03-11توجد ثلاث نقاط بحث مضمنة في iOS: Siri و Spotlight Search و Safari search. يعد Siri ، أحد أكثر ميزات iOS شهرة ، شيئًا مألوفًا لدى معظم مستخدمي iPhone بالفعل. لكن العديد من الأشخاص ليسوا على دراية ببحث Spotlight - وهو شيء كان جزءًا لا يتجزأ من iOS قبل فترة طويلة من وجود Siri. يمكن الوصول إلى Spotlight Search عندما تمرر الشاشة الرئيسية لأسفل ، أو عندما تحرك الشاشة الرئيسية لأسفل ، أو جديدًا في iOS 9 ، واسحب يمينًا من شاشتك الرئيسية الشخصية. هذا يكشف عن شريط البحث في الجزء العلوي من الشاشة.
كان تركيز أداة البحث هذه في iOS 8 وما قبله هو البحث في الهاتف نفسه ، لذا تسرد صفحة النتائج التطبيقات الموجودة على هاتفك ، بالإضافة إلى رسائل البريد الإلكتروني والرسائل والعناصر الخاصة الأخرى داخل تطبيقات Apple. سيعرض أيضًا تعريف Wikipedia إذا بدا مناسبًا. أخيرًا ، يوفر خيارًا للبحث في الويب عبر Safari كخطوة إضافية.
على عكس Spotlight Search ، فإن Safari يدور حول العالم خارج هاتفك. في نظام التشغيل iOS 8 ، يمكن للمستخدم اختيار محرك البحث الذي سيستخدمه في بحث Safari: Google و Yahoo و Bing و DuckDuckGo. من الطبيعي أن يتعامل Google مع غالبية طلبات بحث Safari. بغض النظر عن محرك البحث المختار ، يتم تقديم مصطلحات البحث المعبأة مسبقًا في Safari ، ومن المحتمل أن تتطابق مع Wikipedia.
في iOS 9 ، أصبح Spotlight Search أكثر بروزًا ونطاقًا على نطاق أوسع من ذي قبل. في الواقع ، أول ما تراه هو "اقتراحات Siri" بناءً على أنماط استخدامك. على سبيل المثال ، إذا كنت تستخدم Safari بانتظام في فترة ما بعد الظهر ، فسوف يقترحه Siri لك في ذلك الوقت تقريبًا.
وعلى الرغم من أنه لا يزال مكانًا للعثور على "أشياء على هاتفك" ، فقد أصبح بوابة مباشرة "للأشياء غير الموجودة على هاتفك". ترى بالفعل أشياء في مكان قريب وعناوين إخبارية مصدرها الويب عبر محرك البحث الخاص بشركة Apple ، وبدأت النتائج الأخرى المستندة إلى الويب في الظهور الآن.
نعم ، لقد أنشأت Apple محرك بحث على الويب لنظام iOS 9 ، وهي خطوة كبيرة جدًا. قل مرحباً لـ Applebot.
في سياق مماثل لـ Spotlight ، فإن هدف Apple المعلن لـ Safari هو أيضًا إظهار النتائج والاقتراحات من فهرس بحث Apple ، قبل تقديم القدرة على البحث في الويب باستخدام Google (أو مزود آخر تم اختياره). اعتبارًا من iOS 9.1 ، يبدو أن Safari يتخلف عن بحث Spotlight من خلال الاستمرار في تقديم النتائج من مزود البحث الذي اختاره المستخدم - ربما لمنح Apple عملية نشر أبطأ لميزات البحث الخاصة بها ومزيد من الوقت لضبط خوارزمياتها.
الأمر المثير بشكل خاص حول إطلاق iOS 9 هو أنه للمرة الأولى ، يمنح مطوري iOS القدرة على ربط وظائف البحث هذه وتضمين المحتوى من داخل التطبيقات . علاوة على ذلك ، فإن الوعد هو أن البحث سيشمل في النهاية نتائج ليست على هاتف المستخدم . هذه خطوة كبيرة.
دعنا فقط نضع هذا في السياق. أنتج محرك بحث Google صناعة كاملة مبنية على "SEO" - عملية تحسين أصولك حول بحث Google. عند إطلاقه بالكامل ، سيمتلك محرك بحث Apple ما يقرب من 50٪ من سوق بحث الأجهزة المحمولة ، وهو ما يمثل 50٪ (ويزيد) من إجمالي حركة البحث. وبالتالي فإن Applebot كبير ، مما يعني أن "تحسين بحث Apple Mobile Search" سيكون كبيرًا أيضًا.
سيكون لجهود Apple Mobile Search Optimization تأثير أكبر بكثير على اكتشاف التطبيقات من قبل مستخدمي الأجهزة المحمولة من مُحسنات محركات البحث العادية.
مرحبًا بكم في صناعة حديثي الولادة AMSO.
النبأ السيئ هو أن تنفيذ كل هذه الميزات يتضمن العديد من التقنيات الجديدة من Apple بالإضافة إلى تحسين التقنيات القديمة ، وقد يكون الجمع بين هذه العناصر محيرًا. الهدف من هذه السلسلة هو استعراض القطع المختلفة وتوضيح كيفية تنفيذها. لنبدأ بشيء أساسي ونبني عليه.
لدعم هذه السلسلة ، قمت بإنشاء تطبيق بسيط للرجوع إليه طوال الوقت. يمكن العثور على المشروع هنا: https://github.com/rwforsythe/iOS9-Search. سيتم أيضًا تحديثه مع استمرار هذه السلسلة في تغطية عناصر أخرى من مجموعة أدوات البحث.
المؤسسة: CoreSpotlight Framework
يتيح لك هذا الإطار ، الجديد تمامًا في iOS 9 ، المساهمة بعناصر في فهرس البحث المحلي الخاص بـ iPhone لاكتشافها من قبل المستخدم. على سبيل المثال ، قبل iOS 9 ، كان يمكن العثور فقط على المحتوى داخل تطبيقات Apple الرسمية ، مثل التقويم ، عبر بحث Spotlight. الآن ، يمكن العثور على أي تطبيق ينشر أحداث التقويم الخاصة به من خلال إطار عمل CoreSpotlight عبر Spotlight Search وحتى Siri.
لاحظ أن التركيز هنا ينصب على المعلومات الشخصية ؛ لا تريد أن يتم العثور على أحداث التقويم الشخصية الخاصة بك من قبل المستخدمين على هاتف آخر! إن شركة Apple واضحة جدًا في أن إطار عمل CoreSpotlight يتفاعل حصريًا مع الفهرس الخاص على هاتف كل شخص. لا يمكن استخدام CoreSpotlight API لنشر محتوى خارج فهرس الهاتف.
هذا لا يعني أنه لا يمكن استخدام CoreSpotlight لفهرسة المعلومات العامة بالفعل. من الممكن بالتأكيد استخدام CoreSpotlight لسحب المعلومات من السحابة ووضعها في فهرس بحث الهاتف. إنه ببساطة ضمان من Apple أنه إذا تمت فهرسة المعلومات الشخصية والسرية باستخدام CoreSpotlight ، فستظل سرية.
يأتي إطار العمل في جزأين: كائن CSSearchableItemAttributeSet الذي يسمح للتطبيق بوصف كل عنصر بالتفصيل ، وكائن CSSearchableItem يُستخدم لمنح العنصر معرفًا فريدًا. يتكون كل إدخال Spotlight من زوج من هذه الكائنات. يرجع سبب استخدام كائنين بدلاً من عنصر واحد إلى استخدام كائنات CSSearchableItemAttributeSet لنوع مختلف من تفاعل البحث (الموصوف لاحقًا).
من السهل جدًا القيام بالأساسيات.
بالنسبة لأولئك الذين يشيرون إلى نموذج التعليمات البرمجية ، يتم إعداد CoreSpotlight في AppDelegate.
… @import CoreSpotlight; @import MobileCoreServices; …
هناك حاجة إلى هاتين الوحدتين للوظيفة الجديدة.
للتبسيط في التطبيق التجريبي ، التطبيق: didFinishLaunchingWithOptions: يتم استخدام طريقة لاستدعاء طريقة مخصصة لإعداد CoreSpotlight:
if ([CSSearchableItemAttributeSet class]) [self setUpCoreSpotlight]; //Check for iOS version that supports CoreSpotlight API
بالانتقال إلى طريقة setUpCoreSpotlight ، نبدأ العملية بإنشاء كائن CSSearchableItemAttributeSet :
CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem];
يعد نوع المحتوى مهمًا لأنه من المفترض أن يتحكم في الطريقة العامة التي يتم بها معالجة العنصر بواسطة خوارزميات البحث. "يُفترض" هي كلمة المنطوق ، لأن هذه منطقة لم توثقها شركة Apple جيدًا. هناك قائمة كبيرة من أنواع العناصر للاختيار من بينها (أنواع الصور وأنواع الفيديو وأنواع الصوت ونوع جهة الاتصال) ، لكن التجربة والخطأ مطلوبان لتحديد التأثير (إن وجد) على تجربة المستخدم. يبدو أن بعض الأنواع تعرض محتوى نصيًا أكثر من غيرها عند عرضها في نتائج البحث. يمكن أن يؤثر أيضًا على ما إذا كان سيتم عرض صورة مصغرة مع النتيجة. kUTTypeItem مكان رائع للبدء.
صِف الآن الكائن بمزيد من التفصيل:
attributeSet.displayName = @"A Christmas Carol"; attributeSet.title = @"A Christmas Carol By Charles Dickens"; //Sounds similar to displayName but is not displayed to user attributeSet.contentDescription = @"Who would dare to say “Bah! Humbug” after reading A Christmas Carol? Charles Dickens wrote the novella in just six weeks before it was first published on December 19 1843 but his morality tale about a bitter old miser named Ebenezer Scrooge lives on to this day as a reminder of the importance of the Christmas spirit."; attributeSet.keywords = @[@"A Christmas Carol", @"Charles Dickens", @"Victorian Literature"]; UIImage *image = [UIImage imageNamed:@"CC-Cover"]; NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)]; attributeSet.thumbnailData = imageData;
هناك الكثير من الخصائص الممكنة ، خاصة بأنواع الوسائط مثل الصور ومقاطع الفيديو وما إلى ذلك. ربما يكون المزيد من المعلومات أفضل ، ولكن هناك حاجة إلى التجربة والخطأ لتحديد المعلومات المستخدمة بالفعل و / أو المعروضة في نتائج البحث. في وقت كتابة هذا التقرير ، على سبيل المثال ، يبدو أنه لا يتم عرض تصنيفات النجوم لعنصر فهرس معين ، حتى إذا كانت السمة تحتوي على بيانات تصنيف النجوم.

يتم تضمين معظم خصائص النص في استعلام البحث ، لذلك على الرغم من عدم عرض خاصية العنوان ، يمكن العثور على النص عبر البحث. لذلك ليس من الواضح تمامًا كيف تختلف خاصية الكلمات الرئيسية اختلافًا جوهريًا عن خاصية العنوان.
راجع مستند Apple لمزيد من المعلومات: developer.apple.com
الخطوة الأخيرة هي حزم CSSearchableItemAttributeSet مع CSSearchableItem وتسجيلها في الفهرس.
CSSearchableItem *item1 = [[CSSearchableItem alloc] initWithUniqueIdentifier:@”https://www.notestream.com/streams/564159e4e5c24” domainIdentifier:@"notestream.com" attributeSet:attributeSet];
شيئين جديدين هنا. تسمح لك الخاصية domainIdentifier بتجميع العناصر معًا للعمليات الدفعية. على سبيل المثال ، يسمح لك @ "meetingItem" و @ "reminderItem" في تطبيق التقويم بحذف جميع إدخالات Spotlight من نوع واحد مع ترك الآخر.
تلعب خاصية المعرف الفريد دورًا أكثر أهمية. أولاً ، يتم تمريره مرة أخرى إلى تطبيقك عندما ينقر المستخدم على عنصر في فهرس CoreSpotlight (تمت مناقشته لاحقًا). ثانيًا ، هناك توصيات من Apple حول الشكل الذي يجب أن يبدو عليه عند استخدام عناصر أخرى من البنية التحتية للبحث. في الوقت الحالي ، سوف نستخدم سلسلة تمثل في الواقع عنوان URL يمثل هذا العنصر بشكل فريد. من الناحية الفنية ، يمكن أن تكون هذه الخاصية أي سلسلة ، طالما أنها خاصة بالعنصر.
الخطوة الأخيرة: ادفع العناصر التي قمت بإنشائها إلى الفهرس الفعلي.
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item1, item2, item3] completionHandler: ^(NSError * __nullable error) { if (!error) NSLog(@"Search item(s) journaled for indexing."); }];
بضع نقاط يجب توضيحها هنا:
تأخذ هذه الطريقة مجموعة من الكائنات (وهناك طرق أخرى يمكن استخدامها لتجميع العملية إذا كان هناك الكثير من البيانات للفهرسة).
من المهم إدراك أن هذه الطريقة لا تكمل بالفعل عملية الفهرسة. يتم استدعاء معالج الإكمال فقط عندما يتم وضع عناصر البحث في قائمة الانتظار للفهرسة. استخدم CSSearchableIndexDelegate للتعامل مع السيناريوهات التي تفشل فيها عملية الفهرسة نفسها لسبب ما ويحتاج تطبيقك للتعامل مع الموقف.
تهانينا ، لقد أضفت عناصر إلى فهرس بحث CoreSpotlight الخاص بالهاتف!
كيف يعمل البحث في iOS 9
بطبيعة الحال ، تحافظ Apple على خوارزميات البحث الخاصة بها بالقرب من صدرها ، لذلك من المفيد تثبيت نموذج التطبيق والتلاعب بالكلمات الرئيسية. على سبيل المثال ، سرعان ما يتضح أن Apple تعمل على تعظيم النتائج المقدمة من خلال إعطاء نتائج مختلفة تمامًا حيث كتب المستخدم كل حرف:
يبدو أن المبدأ هو أن النتائج التي يعتقد أنها أكثر ملاءمة ستقدم بعد كتابة حرفين فقط. نظرًا لأن المستخدم يكتب عددًا أكبر من الأحرف ، يتم إسقاط هذه النتائج المبكرة ويتم تقديم أشياء أخرى (تم تقديرها في الأصل على أنها أقل احتمالية) بدلاً من ذلك.
بشكل عام ، ليس لدى Apple سوى عدد قليل من الأشياء لتقولها حول كيفية تحسين الترتيب في ظل الخوارزميات الخاصة بهم. تحتوي هذه الصفحة على توصيات Apple: تحسين نتائج البحث
أحد أهم الأمور من وثائق Apple هو تحسين الترتيب عندما يستخدم التطبيق تقنيات بحث متعددة لفهرسة المحتوى. سنغوص في تقنية أخرى من هذه التقنيات في المقالة التالية. وفي الوقت نفسه ، ما زلنا بحاجة إلى تنفيذ التعليمات البرمجية للتعامل مع السيناريو عندما ينقر المستخدم على نتيجة البحث.
عندما ينقر المستخدم
لقد أنشأنا الكود لملء الفهرس بنتائج البحث المحتملة ، ولكن ماذا يحدث عندما ينقر المستخدم على نتيجة؟ الإجابة هي أن CoreSpotlight يستعير application:continueUserActivity:restorationHandler:
الطريقة من بروتوكول UIApplicationDelegate. تم تقديم هذا في الأصل في نظام التشغيل iOS 8 لآلية التسليم التي تسمح بتمرير أنشطة المستخدم من جهاز إلى جهاز (على سبيل المثال ، يرى المستخدم عنوان URL للويب على iWatch ، ويستخدم التسليم لاستلامه من متصفح iPhone Safari ، وعرضه في النهاية على أجهزة Mac الخاصة بهم عندما يصلون إلى المكتب.)
يتمثل التحدي الأول في تحديد ما إذا تم استدعاء الطريقة بسبب نشاط Handoff أو من Spotlight Search. ستخبرك خاصية نوع النشاط لمعلمة النشاط ، ولكن إذا كان من الممكن تشغيل الكود على نظام التشغيل iOS 8 ، فستحتاج إلى تجنب حدوث عطل في هذه الحالة.
إليك كيف قد تبدو بعض التعليمات البرمجية البسيطة هنا:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)activity restorationHandler:(void (^)(NSArray *))restorationHandler { NSString * valueCSSearchableItemActionType; BOOL wasHandled = NO; if ([CSSearchableItemAttributeSet class]) //iOS 9 { valueCSSearchableItemActionType = CSSearchableItemActionType; } else { // iOS 8 – This method was introduced in iOS 8, so iOS 7 is not a possible scenario valueCSSearchableItemActionType = @"not supported"; } if ([activity.activityType isEqual: valueCSSearchableItemActionType]) { // Invoked via CoreSpotlight, we can assume iOS 9 from now on… NSString * activityIdentifier = [activity.userInfo valueForKey:CSSearchableItemActivityIdentifier]; wasHandled = YES; NSLog(@"Continuing user activity %@", activityIdentifier); } else { //the app was launched via Handoff protocol //or with a Universal Link } return wasHandled; }
لاحظ سطر الكود:
NSString * activityIdentifier = [activity.userInfo valueForKey:CSSearchableItemActivityIdentifier];
يؤدي هذا إلى استخراج المعرف الفريد الذي تم وضعه في فهرس Spotlight عند إنشاء كائن CSSearchableItem . بطبيعة الحال ، يجب أن يستخدم تطبيقك هذا المعرف الفريد لتزويد المستخدم بجزء من المحتوى الذي اختاروه من فهرس البحث. للتبسيط هنا ، نحن فقط NSLog المعرف الفريد.
خلاصة
حتى الآن ، قمنا بفحص جزء واحد فقط من وظائف البحث في iOS 9. لقد قمنا بتشغيل الوظائف الأساسية اللازمة لتحميل فهرس بحث Spotlight الخاص بالهاتف بأشياء قد يجدها المستخدم مفيدة: المستندات وعناصر التقويم وجهات الاتصال وما إلى ذلك. عندما يبحث المستخدم عن شيء ما ويرى نتيجة من تطبيقك وينقر عليها ، سيكون التطبيق قادرًا على معالجة الطلب وعرض العنصر المناسب للمستخدم.
ما لم نناقشه بعد هو التقنيات المتعلقة بالمؤشر العام الذي تبنيه شركة Apple. يهدف هذا الفهرس إلى السماح للمستخدمين بالعثور على محتوى في تطبيقك حتى بدون تثبيته على هواتفهم. سنعالج ذلك في المنشور التالي.