Geliştiriciler için iOS 9 Spotlight Search'ün gizemini ortadan kaldırıyor

Yayınlanan: 2022-03-11

iOS'ta yerleşik üç arama noktası vardır: Siri, Spotlight Search ve Safari search. iOS'un en ikonik özelliklerinden biri olan Siri, çoğu iPhone kullanıcısının zaten aşina olduğu bir şey. Ancak birçok kişi, Siri'nin varlığından çok önce iOS'un ayrılmaz bir parçası olan Spotlight aramasının farkında değil. Spotlight Search'e, ana ekranı aşağı kaydırdığınızda veya iOS 9'da yeni olarak, kişisel ana ekranınızdan sağa kaydırdığınızda erişilebilir. Bu, ekranın üst kısmında bir arama çubuğu ortaya çıkarır.

iOS 8 ve önceki sürümlerde bu arama aracının odak noktası telefonun kendisinde arama yapmaktı, bu nedenle sonuç sayfası, telefonunuzdaki uygulamaların yanı sıra e-postalar, mesajlar ve Apple uygulamalarındaki diğer özel öğeleri listeler. Ayrıca, alakalı görünüyorsa bir Wikipedia tanımı da gösterecektir. Son olarak, ek bir adım olarak Safari aracılığıyla web'de arama yapma seçeneği sunar.

Spotlight Search'ün aksine Safari, telefonunuzun dışındaki dünyayla ilgilidir. iOS 8'de kullanıcı Safari araması için hangi arama motorunun kullanılacağını seçebilir: Google, Yahoo, Bing ve DuckDuckGo. Doğal olarak Google, Safari arama isteklerinin çoğunu yönetir. Seçilen arama motorundan bağımsız olarak, önceden doldurulmuş arama terimleri, potansiyel olarak bir Wikipedia eşleşmesiyle Safari'de sunulur.

iOS 9'da Spotlight Search, eskisinden çok daha belirgin ve daha geniş kapsamlı. Aslında ilk gördüğünüz şey kullanım alışkanlıklarınıza göre “Siri Önerileri” oluyor. Örneğin, Safari'yi düzenli olarak öğleden sonra kullanıyorsanız, Siri size o saatlerde önerecektir.

Ve hala "telefonunuzdaki şeyleri" bulabileceğiniz bir yer olsa da, "telefonunuzda olmayan şeyler" için doğrudan bir portal haline geliyor. Zaten Apple'ın kendi arama motoru aracılığıyla web'den alınan yakındaki şeyleri ve haber başlıklarını görüyorsunuz ve diğer web tabanlı sonuçlar şimdi görünmeye başlıyor.

Evet, Apple iOS 9 için bir web arama motoru oluşturdu ki bu çok büyük bir adım. Applebot'a merhaba deyin.

Spotlight'a benzer şekilde, Apple'ın Safari için belirtilen amacı, web'de Google (veya seçilen başka bir sağlayıcı) ile arama yapma olanağı sunmadan önce Apple'ın arama dizininden sonuçları ve önerileri ortaya çıkarmaktır. iOS 9.1'den itibaren Safari, kullanıcının seçtiği arama sağlayıcısından sonuçları sunmaya devam ederek Spotlight aramasının gerisinde kalıyor gibi görünüyor - belki de Apple'a arama özelliklerini daha yavaş bir şekilde kullanıma sunmak ve algoritmalarında ince ayar yapmak için daha fazla zaman vermek için.

iOS 9'un piyasaya sürülmesiyle ilgili özellikle heyecan verici olan şey, ilk kez iOS geliştiricilerine bu arama işlevlerine bağlanma ve uygulamalardan içerik ekleme yeteneği vermesidir. Ayrıca, söz, aramanın nihayetinde kullanıcının telefonunda olmayan sonuçları içereceğidir. Bu çok büyük bir adım.

Bunu sadece bağlam içine koyalım. Google'ın arama motoru, varlıklarınızı Google'ın araması etrafında optimize etme süreci olan "SEO" etrafında inşa edilmiş tüm bir endüstriyi ortaya çıkardı. Tamamen piyasaya sürüldüğünde, Apple'ın arama motoru, genel arama trafiğinin %50'si (ve büyüyen) olan mobil arama pazarının yaklaşık %50'sine sahip olacak. Bu nedenle Applebot büyüktür, yani “Apple Mobil Arama Optimizasyonu” da büyük olacaktır.

Apple Mobil Arama Optimizasyonu çabalarının, mobil kullanıcılar tarafından uygulama keşfi üzerinde normal SEO'dan çok daha büyük bir etkisi olacaktır.

Yeni doğan AMSO endüstrisine hoş geldiniz.

Kötü haber şu ki, tüm bu özelliklerin uygulanması, Apple'dan birçok yeni teknolojinin yanı sıra eskilerine geliştirmeyi de içeriyor ve bu öğelerin kombinasyonu kafa karıştırıcı olabilir. Bu dizinin amacı, çeşitli parçaları gözden geçirmek ve nasıl uygulanabileceklerini netleştirmek. Temel bir şeyle başlayalım ve üzerine inşa edelim.

Geliştiriciler için iOS 9 Spotlight Search'ün gizemini ortadan kaldırıyor

Bu seriyi desteklemek için baştan sona referans olması için basit bir uygulama oluşturdum. Proje burada bulunabilir: https://github.com/rwforsythe/iOS9-Search. Ayrıca bu seri, arama araç setinin diğer unsurlarını kapsamaya devam ettikçe güncellenecektir.

Temel: CoreSpotlight Çerçevesi

iOS 9'da tamamen yeni olan bu çerçeve, kullanıcının keşfetmesi için iPhone'un yerel arama dizinine öğeler eklemenize olanak tanır. Örneğin, iOS 9'dan önce, Spotlight araması yoluyla yalnızca Takvim gibi resmi Apple uygulamalarındaki içerik bulunabilirdi. Artık takvim etkinliklerini CoreSpotlight çerçevesi aracılığıyla yayınlayan herhangi bir uygulama, Spotlight Search ve hatta Siri aracılığıyla bulunabilir.

Buradaki odak noktasının kişisel bilgiler olduğunu unutmayın; Kişisel takvim etkinliklerinizin başka bir telefondaki kullanıcılar tarafından bulunmasını istemezsiniz! Apple, CoreSpotlight çerçevesinin yalnızca her kişinin telefonundaki özel dizinle etkileşime girdiği konusunda çok net. Telefonun kendi dizini dışında içerik yayınlamak için CoreSpotlight API'yi kullanmak mümkün değildir.

Bu, CoreSpotlight'ın zaten herkese açık bilgileri indekslemek için kullanılamayacağı anlamına gelmez. Buluttan bilgi çekmek ve telefonun arama dizinine yerleştirmek için CoreSpotlight'ı kullanmak kesinlikle mümkündür. Bu yalnızca, kişisel ve gizli bilgilerin CoreSpotlight ile endekslenmesi durumunda, bunların gizli kalacağına dair bir Apple garantisidir.

Çerçeve iki bölümden oluşur: Uygulamanın her bir öğeyi ayrıntılı olarak tanımlamasını sağlayan CSSearchableItemAttributeSet nesnesi ve öğeye benzersiz bir kimlik vermek için kullanılan bir CSSearchableItem nesnesi. Her Spotlight girişi, bu nesnelerden bir çiftten oluşur. Bir yerine iki nesne kullanılmasının nedeni, CSSearchableItemAttributeSet nesnelerinin farklı türde bir arama etkileşimi için kullanılmasıdır (daha sonra anlatılacaktır).

Temelleri yapmak oldukça kolaydır.

Örnek koda başvuranlar için CoreSpotlight kurulumu AppDelegate'de yapılır.

 … @import CoreSpotlight; @import MobileCoreServices; …

Yeni işlevsellik için bu iki modül gereklidir.

Demo uygulamasında basitlik sağlamak amacıyla, CoreSpotlight'ı kurmak için özel bir yöntemi çağırmak için application:didFinishLaunchingWithOptions: yöntemi kullanılır:

 if ([CSSearchableItemAttributeSet class]) [self setUpCoreSpotlight]; //Check for iOS version that supports CoreSpotlight API

setUpCoreSpotlight yöntemine geçerek, bir CSSearchableItemAttributeSet nesnesi oluşturarak işleme başlıyoruz:

 CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem];

İçerik Türü , öğenin arama algoritmaları tarafından ele alındığı genel yolu yönetmesi gerektiği için önemlidir. Bu, Apple tarafından iyi belgelenmemiş bir alan olduğundan, "varsayılan" işlemsel kelimedir. Aralarından seçim yapabileceğiniz geniş bir öğe türü menüsü vardır (görüntü türleri, video türleri, ses türleri, bir kişi türü), ancak kullanıcının deneyimi üzerinde ne gibi bir etkisi (varsa) olduğunu belirlemek için deneme yanılma gerekir. Bazı türler, arama sonuçlarında görüntülendiğinde diğerlerinden daha fazla metin içeriği gösteriyor gibi görünüyor. Sonuçla birlikte bir küçük resmin görüntülenip görüntülenmeyeceğini de etkileyebilir. kUTTypeItem, başlamak için harika bir yerdir.

Şimdi nesneyi daha ayrıntılı olarak tanımlayın:

 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;

Görüntüler, videolar vb. gibi medya türlerine özgü birçok olası özellik vardır. Daha fazla bilgi muhtemelen daha iyidir, ancak arama sonuçlarında hangi bilgilerin gerçekten kullanıldığını ve/veya görüntülendiğini belirlemek için deneme yanılma gerekir. Örneğin, yazı yazılırken, nitelik Kümesi yıldız derecelendirmesi verileri içerse bile, belirli bir dizin öğesi için yıldız derecelendirmeleri görüntülenmiyor gibi görünüyor.

Metin özelliklerinin çoğu arama sorgusuna dahil edilmiştir, bu nedenle başlık özelliği görüntülenmese bile metin arama yoluyla bulunabilir. Bu nedenle, anahtar kelimeler özelliğinin başlık özelliğinden temelde nasıl farklı olduğu tam olarak açık değildir.

Daha fazla bilgi için Apple'ın belgesine bakın: developer.apple.com

Son adım, CSSearchableItemAttributeSet'i CSSearchableItem ile paketlemek ve dizine kaydetmektir.

 CSSearchableItem *item1 = [[CSSearchableItem alloc] initWithUniqueIdentifier:@”https://www.notestream.com/streams/564159e4e5c24” domainIdentifier:@"notestream.com" attributeSet:attributeSet];

Burada iki yeni şey var. domainIdentifier özelliği, toplu işlemler için öğeleri birlikte gruplandırmanıza olanak tanır. Örneğin, bir takvim uygulamasındaki @“meetingItem” ve @”reminderItem”, bir türdeki tüm Spotlight girişlerini diğerinden ayrılırken silmenize olanak tanır.

UniqueIdentifier özelliğinin oynayacak daha önemli bir rolü vardır. İlk olarak, kullanıcı CoreSpotlight dizininde (daha sonra tartışılacaktır) bir öğeye tıkladığında uygulamanıza geri iletilir. İkincisi, arama altyapısının diğer öğelerini kullanırken bunun nasıl görünmesi gerektiği konusunda Apple'dan öneriler var. Şimdilik, aslında bu öğeyi benzersiz olarak temsil eden bir URL olan bir dize kullanacağız. Teknik olarak bu özellik, öğeye özel olduğu sürece herhangi bir dize olabilir.

Son adım: oluşturduğunuz öğeleri gerçek dizine itin.

 [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item1, item2, item3] completionHandler: ^(NSError * __nullable error) { if (!error) NSLog(@"Search item(s) journaled for indexing."); }];

Burada dikkat edilmesi gereken birkaç nokta:

  1. Bu yöntem bir dizi nesneyi alır (ve dizine eklenecek çok fazla veri varsa işlemi toplu hale getirmek için kullanılabilecek başka yöntemler de vardır).

  2. Bu yöntemin aslında indeksleme sürecini tamamlamadığını anlamak önemlidir. Tamamlama işleyicisi, yalnızca arama öğeleriniz dizin oluşturma için kuyruğa alındığında çağrılır. Dizin oluşturma işleminin herhangi bir nedenle başarısız olduğu ve uygulamanızın durumu ele alması gerektiği senaryoları işlemek için CSSearchableIndexDelegate'i kullanın.

Tebrikler, telefonun CoreSpotlight arama dizinine öğeler eklediniz!

iOS 9'da Arama Nasıl Çalışır?

Doğal olarak, Apple arama algoritmalarını göğüslerine yakın tutar, bu nedenle örnek uygulamayı yüklemek ve anahtar kelimelerle oynamak faydalı olacaktır. Örneğin, Apple'ın, kullanıcı her harfi yazarken çok farklı sonuçlar vererek sunulan sonuçları en üst düzeye çıkardığı çabucak ortaya çıkıyor:

İlke, sadece birkaç harf yazıldıktan sonra daha uygun olduğu düşünülen sonuçların sunulması gibi görünüyor. Kullanıcı daha fazla harf yazdıkça, bu erken sonuçlar bırakılır ve bunun yerine (başlangıçta daha az olası olduğu tahmin edilen) başka şeyler sunulur.

Daha genel olarak, Apple'ın algoritmaları altında sıralamayı nasıl iyileştirecekleri hakkında söyleyecek yalnızca birkaç şeyi vardır. Bu sayfa Apple'ın önerilerini içerir: Arama Sonuçlarınızı Geliştirin

Apple'ın belgelerinden elde edilen önemli sonuçlardan biri, uygulama içeriği dizine eklemek için birden çok arama teknolojisi kullandığında sıralamanın iyileştirilmesidir. Bir sonraki makalede bu teknolojilerden başka bir tanesine dalacağız. Bu arada, bir kullanıcı bir arama sonucunu tıkladığında senaryoyu işlemek için hala kod uygulamamız gerekiyor.

Kullanıcı Tıkladığında

Dizini potansiyel arama sonuçlarıyla doldurmak için kodu oluşturduk, ancak kullanıcı bir sonucu tıkladığında ne olur? Cevap, CoreSpotlight'ın UIApplicationDelegate protokolünden application:continueUserActivity:restorationHandler: yöntemini ödünç almasıdır. Bu, ilk olarak iOS 8'de, kullanıcı etkinliklerinin cihazdan cihaza aktarılmasına izin veren devir mekanizması için tanıtıldı (örneğin, bir kullanıcı bir iWatch'ta bir web URL'si görür, onu iPhone Safari tarayıcısından almak için devir işlemini kullanır ve nihayetinde onu görüntüler) ofise vardıklarında Mac'lerinde.)

İlk zorluk, yöntemin bir Handoff etkinliği nedeniyle mi yoksa Spotlight Search'ten mi çağrıldığını belirlemektir. Activity parametresinin ActivityType özelliği size söyleyecektir, ancak kod iOS 8'de çalışabilirse, bu durumda bir çökmeyi önlemeniz gerekir.

İşte bazı basit kodlar burada nasıl görünebilir:

 - (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; }

Kod satırına dikkat edin:

 NSString * activityIdentifier = [activity.userInfo valueForKey:CSSearchableItemActivityIdentifier];

Bu, CSSearchableItem nesnesi oluşturulduğunda spot dizine yerleştirilen benzersiz tanımlayıcıyı çıkarır. Doğal olarak uygulamanız, kullanıcıya arama dizininden seçtikleri içerik parçasını sunmak için bu benzersiz tanımlayıcıyı kullanmalıdır. Burada basitlik için, biz sadece benzersiz tanımlayıcıyı NSLog'a alıyoruz.

Özet

Şimdiye kadar, iOS 9'un arama işlevinin yalnızca bir bölümünü inceledik. Telefonun Spotlight arama dizinini kullanıcının yararlı bulabileceği şeylerle yüklemek için gereken temel işlevleri inceledik: belgeler, takvim öğeleri, kişiler vb. Kullanıcı bir şey aradığında, uygulamanızdan bir sonuç gördüğünde ve tıkladığında, uygulama isteği işleyebilir ve kullanıcı için uygun öğeyi görüntüleyebilir.

Henüz tartışmadığımız şey, Apple'ın oluşturduğu halka açık endeksle ilgili teknolojiler. Bu dizin, kullanıcıların uygulamanızdaki içeriği telefonlarına yüklenmeden bile bulmasını sağlamak için tasarlanmıştır. Bunu bir sonraki yazıda ele alacağız.