Demystifying iOS 9 Spotlight Search untuk Pengembang
Diterbitkan: 2022-03-11Ada tiga titik pencarian yang terpasang di iOS: Siri, Pencarian Spotlight, dan pencarian Safari. Siri, salah satu fitur paling ikonik di iOS, adalah sesuatu yang sudah dikenal oleh sebagian besar pengguna iPhone. Tetapi banyak orang tidak mengetahui pencarian Spotlight - sesuatu yang telah menjadi bagian integral dari iOS jauh sebelum Siri ada. Pencarian Spotlight dapat diakses saat Anda menggeser layar beranda ke bawah, atau saat baru menggunakan iOS 9, geser ke kanan dari layar beranda pribadi Anda. Ini mengungkapkan bilah pencarian di bagian atas layar.
Fokus alat pencarian ini di iOS 8 dan sebelumnya adalah mencari telepon itu sendiri, jadi halaman hasilnya mencantumkan aplikasi yang ada di ponsel Anda, serta email, pesan, dan item pribadi lainnya di dalam aplikasi Apple. Ini juga akan menampilkan definisi Wikipedia jika tampaknya relevan. Terakhir, ia menawarkan opsi untuk mencari web melalui Safari sebagai langkah tambahan.
Berbeda dengan Pencarian Spotlight, Safari adalah segalanya tentang dunia di luar ponsel Anda. Di iOS 8, pengguna dapat memilih mesin pencari mana yang akan digunakan untuk pencarian Safari: Google, Yahoo, Bing, dan DuckDuckGo. Secara alami Google menangani sebagian besar permintaan pencarian Safari. Terlepas dari mesin pencari yang dipilih, istilah pencarian yang telah diisi sebelumnya disajikan di Safari, berpotensi dengan kecocokan Wikipedia.
Di iOS 9, Pencarian Spotlight jauh lebih menonjol dan cakupannya lebih luas daripada sebelumnya. Faktanya, hal pertama yang Anda lihat adalah "Saran Siri" berdasarkan pola penggunaan Anda. Misalnya, jika Anda menggunakan Safari secara teratur di sore hari, Siri akan menyarankannya untuk Anda sekitar waktu itu.
Dan, meskipun masih menjadi tempat untuk menemukan "hal-hal di ponsel Anda", itu menjadi portal langsung untuk "hal-hal yang tidak ada di ponsel Anda". Anda sudah melihat hal-hal di sekitar dan berita utama yang bersumber dari web melalui mesin pencari Apple sendiri, dan hasil berbasis web lainnya baru mulai muncul sekarang.
Ya, Apple telah membuat mesin pencari web untuk iOS 9, yang merupakan langkah yang sangat besar. Sampaikan salam untuk Applebot.
Dalam nada yang mirip dengan Spotlight, tujuan yang dinyatakan Apple untuk Safari juga untuk memunculkan hasil dan saran dari indeks pencarian Apple, sebelum menawarkan kemampuan untuk mencari web dengan Google (atau penyedia pilihan lainnya). Pada iOS 9.1, Safari tampaknya tertinggal di belakang pencarian Spotlight dengan terus menyajikan hasil dari penyedia pencarian yang dipilih pengguna — mungkin untuk memberi Apple peluncuran fitur pencariannya yang lebih lambat dan lebih banyak waktu untuk menyempurnakan algoritmenya.
Apa yang sangat menarik tentang peluncuran iOS 9 adalah bahwa untuk pertama kalinya, ini memberi pengembang iOS kemampuan untuk menghubungkan ke fungsi pencarian ini dan memasukkan konten dari dalam aplikasi . Lebih jauh, janjinya adalah bahwa pencarian pada akhirnya akan menyertakan hasil yang tidak ada di ponsel pengguna . Ini adalah langkah besar.
Mari kita menempatkan ini ke dalam konteks. Mesin pencari Google telah melahirkan seluruh industri yang dibangun di sekitar "SEO" — proses mengoptimalkan aset Anda di sekitar pencarian Google. Ketika diluncurkan sepenuhnya, mesin pencari Apple akan memiliki sekitar 50% dari pasar pencarian seluler, yang merupakan 50% (dan terus bertambah) dari keseluruhan lalu lintas pencarian. Oleh karena itu Applebot besar, yang berarti "Pengoptimalan Pencarian Seluler Apple" juga akan besar.
Upaya Pengoptimalan Pencarian Seluler Apple akan memiliki dampak yang jauh lebih besar pada penemuan aplikasi oleh pengguna seluler daripada SEO biasa.
Selamat datang di industri AMSO yang baru lahir.
Berita buruknya adalah bahwa penerapan semua fitur ini melibatkan banyak teknologi baru dari Apple serta peningkatan ke yang lama, dan kombinasi dari elemen-elemen ini dapat membingungkan. Tujuan dari seri ini adalah untuk menelusuri berbagai bagian dan mengklarifikasi bagaimana mereka dapat diimplementasikan. Mari kita mulai dengan sesuatu yang mendasar dan membangunnya.
Untuk mendukung seri ini, saya telah membuat aplikasi sederhana untuk referensi di seluruh. Proyek ini dapat ditemukan di sini: https://github.com/rwforsythe/iOS9-Search. Ini juga akan diperbarui karena seri ini terus mencakup elemen lain dari perangkat pencarian.
Yayasan: Kerangka Inti Spotlight
Kerangka kerja ini, benar-benar baru di iOS 9, memungkinkan Anda untuk menyumbangkan item ke indeks pencarian lokal iPhone untuk ditemukan oleh pengguna. Misalnya, sebelum iOS 9, hanya konten dalam aplikasi resmi Apple, seperti Kalender, yang dapat ditemukan melalui pencarian Spotlight. Sekarang, aplikasi apa pun yang menerbitkan acara kalendernya melalui kerangka kerja CoreSpotlight dapat ditemukan melalui Pencarian Spotlight dan bahkan Siri.
Perhatikan bahwa fokus di sini adalah pada informasi pribadi; Anda tidak ingin acara kalender pribadi Anda ditemukan oleh pengguna di ponsel lain! Apple sangat jelas bahwa kerangka CoreSpotlight berinteraksi secara eksklusif dengan indeks pribadi di telepon setiap orang. Tidak mungkin menggunakan CoreSpotlight API untuk memublikasikan konten di luar indeks ponsel itu sendiri.
Itu tidak berarti bahwa CoreSpotlight tidak dapat digunakan untuk mengindeks informasi publik yang sudah ada. Sangat mungkin untuk menggunakan CoreSpotlight untuk menarik informasi dari awan dan menempatkannya ke dalam indeks pencarian telepon. Ini hanyalah jaminan dari Apple bahwa jika informasi pribadi dan rahasia diindeks dengan CoreSpotlight, itu akan tetap rahasia.
Kerangka kerja ini hadir dalam dua bagian: objek CSSearchableItemAttributeSet yang memungkinkan aplikasi mendeskripsikan setiap item secara detail, dan objek CSSearchableItem yang digunakan untuk memberikan ID unik pada item. Setiap entri Spotlight terdiri dari sepasang objek ini. Alasan menggunakan dua objek alih-alih satu adalah karena objek CSSearchableItemAttributeSet digunakan untuk jenis interaksi pencarian yang berbeda (dijelaskan nanti).
Cukup mudah untuk melakukan dasar-dasarnya.
Bagi mereka yang mereferensikan kode contoh, pengaturan CoreSpotlight dilakukan di AppDelegate.
… @import CoreSpotlight; @import MobileCoreServices; …
Kedua modul ini diperlukan untuk fungsionalitas baru.
Untuk kesederhanaan dalam aplikasi demo, metode application:didFinishLaunchingWithOptions: digunakan untuk memanggil metode khusus untuk menyiapkan CoreSpotlight:
if ([CSSearchableItemAttributeSet class]) [self setUpCoreSpotlight]; //Check for iOS version that supports CoreSpotlight API
Pindah ke metode setUpCoreSpotlight , kami memulai proses dengan membuat objek CSSearchableItemAttributeSet :
CSSearchableItemAttributeSet * attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem];
Jenis Konten penting karena seharusnya mengatur cara umum di mana item diperlakukan oleh algoritme pencarian. "Seharusnya" adalah kata operatif, karena ini adalah area yang tidak didokumentasikan dengan baik oleh Apple. Ada banyak menu jenis item untuk dipilih (jenis gambar, jenis video, jenis audio, jenis kontak), tetapi percobaan dan kesalahan diperlukan untuk menentukan apa dampaknya (jika ada) terhadap pengalaman pengguna. Beberapa jenis tampaknya menampilkan lebih banyak konten teks daripada yang lain saat ditampilkan di hasil pencarian. Ini juga dapat memengaruhi apakah gambar mini ditampilkan bersama dengan hasilnya. kUTTypeItem adalah tempat yang bagus untuk memulai.
Sekarang gambarkan objek secara lebih rinci:
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;
Ada banyak kemungkinan properti, khusus untuk jenis media seperti gambar, video, dan sebagainya. Lebih banyak informasi mungkin lebih baik, tetapi trial and error diperlukan untuk menentukan informasi apa yang sebenarnya digunakan dan/atau ditampilkan dalam hasil pencarian. Pada saat penulisan, misalnya, peringkat bintang tampaknya tidak ditampilkan untuk item indeks tertentu, meskipun atributSet berisi data peringkat bintang.

Sebagian besar properti teks disertakan dalam kueri penelusuran, jadi meskipun properti judul tidak ditampilkan, teks dapat ditemukan melalui penelusuran. Oleh karena itu tidak sepenuhnya jelas bagaimana properti kata kunci secara fundamental berbeda dari properti judul.
Lihat dokumen Apple untuk informasi lebih lanjut: developer.apple.com
Langkah terakhir adalah mengemas CSSearchableItemAttributeSet dengan CSSearchableItem dan mendaftarkannya ke index.
CSSearchableItem *item1 = [[CSSearchableItem alloc] initWithUniqueIdentifier:@”https://www.notestream.com/streams/564159e4e5c24” domainIdentifier:@"notestream.com" attributeSet:attributeSet];
Dua hal baru di sini. Properti domainIdentifier memungkinkan Anda untuk mengelompokkan item bersama-sama untuk operasi batch. Misalnya, @"meetingItem" dan @"reminderItem" di aplikasi kalender akan memungkinkan Anda untuk menghapus semua entri Spotlight dari satu jenis sambil meninggalkan yang lain.
Properti uniqueIdentifier memiliki peran yang lebih penting untuk dimainkan. Pertama, ini diteruskan kembali ke aplikasi Anda saat pengguna mengklik item dalam indeks CoreSpotlight (dibahas nanti). Kedua, ada rekomendasi dari Apple tentang seperti apa tampilannya saat menggunakan elemen lain dari infrastruktur pencarian. Untuk saat ini, kami akan menggunakan string yang sebenarnya adalah URL yang secara unik mewakili item ini. Secara teknis properti ini bisa berupa string apa pun, asalkan unik untuk item tersebut.
Langkah terakhir: dorong item yang telah Anda buat ke dalam file index.
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item1, item2, item3] completionHandler: ^(NSError * __nullable error) { if (!error) NSLog(@"Search item(s) journaled for indexing."); }];
Beberapa poin untuk dibuat di sini:
Metode ini mengambil larik objek (dan ada metode lain yang dapat digunakan untuk mengelompokkan proses jika ada banyak data yang akan diindeks).
Penting untuk disadari bahwa metode ini tidak benar-benar menyelesaikan proses pengindeksan. Handler penyelesaian dipanggil hanya ketika item pencarian Anda telah diantrekan untuk pengindeksan. Gunakan CSSearchableIndexDelegate untuk menangani skenario di mana proses pengindeksan itu sendiri gagal karena beberapa alasan dan aplikasi Anda perlu menangani situasi tersebut.
Selamat, Anda telah menambahkan item ke indeks pencarian CoreSpotlight ponsel!
Cara Kerja Pencarian di iOS 9
Secara alami, Apple menyimpan algoritme pencarian mereka dekat dengan dada mereka, jadi ada baiknya menginstal aplikasi sampel dan bermain-main dengan kata kunci. Misalnya, dengan cepat menjadi jelas bahwa Apple memaksimalkan hasil yang disajikan dengan memberikan hasil yang sangat berbeda saat pengguna mengetik setiap huruf:
Sepertinya prinsipnya adalah hasil pemikiran yang lebih tepat akan disajikan setelah hanya beberapa huruf yang diketik. Saat pengguna mengetik lebih banyak huruf, hasil awal tersebut dihilangkan dan hal-hal lain (awalnya diperkirakan lebih kecil kemungkinannya) disajikan sebagai gantinya.
Secara umum, Apple hanya memiliki beberapa hal untuk dikatakan tentang cara meningkatkan peringkat di bawah algoritme mereka. Halaman ini berisi rekomendasi Apple: Tingkatkan Hasil Pencarian Anda
Salah satu kunci take-aways dari dokumentasi Apple adalah bahwa peringkat ditingkatkan ketika aplikasi menggunakan beberapa teknologi pencarian untuk mengindeks konten. Kami akan membahas teknologi ini di artikel berikutnya. Sementara itu, kita masih perlu mengimplementasikan kode untuk menangani skenario ketika pengguna mengklik hasil pencarian.
Saat Pengguna Mengklik
Kami telah membuat kode untuk mengisi indeks dengan hasil pencarian potensial, tetapi apa yang terjadi ketika pengguna mengklik hasil? Jawabannya adalah CoreSpotlight meminjam metode application:continueUserActivity:restorationHandler:
dari protokol UIApplicationDelegate. Ini awalnya diperkenalkan di iOS 8 untuk mekanisme handoff yang memungkinkan aktivitas pengguna diteruskan dari perangkat ke perangkat (misalnya pengguna melihat URL web di iWatch, menggunakan handoff untuk mengambilnya di browser Safari iPhone, dan akhirnya melihatnya di Mac mereka ketika mereka sampai di kantor.)
Tantangan pertama adalah menentukan apakah metode tersebut dipanggil karena aktivitas Handoff atau dari Pencarian Spotlight. Properti activityType dari parameter aktivitas akan memberi tahu Anda, tetapi jika kode mungkin berjalan di iOS 8, Anda harus menghindari crash dalam kasus itu.
Berikut adalah bagaimana beberapa kode sederhana mungkin terlihat di sini:
- (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; }
Perhatikan baris kode:
NSString * activityIdentifier = [activity.userInfo valueForKey:CSSearchableItemActivityIdentifier];
Ini mengekstrak pengidentifikasi unik yang ditempatkan ke dalam indeks sorotan saat objek CSSearchableItem dibuat. Secara alami, aplikasi Anda harus menggunakan pengidentifikasi unik ini untuk menyajikan kepada pengguna bagian konten yang mereka pilih dari indeks pencarian. Untuk kesederhanaan di sini, kami hanya NSLog pengidentifikasi unik.
rekap
Sejauh ini, kami telah memeriksa hanya satu bagian dari fungsi pencarian iOS 9. Kami telah menjalankan fungsionalitas inti yang diperlukan untuk memuat indeks pencarian Spotlight ponsel dengan hal-hal yang mungkin berguna bagi pengguna: dokumen, item kalender, kontak, dan sebagainya. Saat pengguna mencari sesuatu, melihat hasil dari aplikasi Anda dan mengkliknya, aplikasi akan dapat menangani permintaan dan menampilkan item yang sesuai untuk pengguna.
Apa yang belum kita bahas adalah teknologi yang berhubungan dengan indeks publik yang sedang dibangun Apple. Indeks ini dimaksudkan untuk memungkinkan pengguna menemukan konten di aplikasi Anda bahkan tanpa menginstalnya di ponsel mereka. Kami akan mengatasinya di posting berikutnya.