Table of Contents

Εισαγωγή

Οι σύγχρονοι χρήστες κινητών περιμένουν άμεση πρόσβαση σε πληροφορίες. Η ενσωματωμένη αναζήτηση σε επίπεδο συστήματος στο iOS app σας μειώνει δραματικά την τριβή, επιτρέποντας στους χρήστες να βρουν περιεχόμενο χωρίς να ανοίξουν την εφαρμογή σας πρώτα. Το [[LPT:0]]Core Spotlight API[[LPT:1]] είναι το ενσωματωμένο πλαίσιο της Apple για την ευρετηρίαση περιεχομένου εφαρμογών στην παγκόσμια αναζήτηση Spotlight της συσκευής. Όταν ένας χρήστης ψάχνει από την Αρχική οθόνη ή μέσα στην προβολή αναζήτησης, τα ευρετηριωμένα στοιχεία της εφαρμογής σας εμφανίζονται παράλληλα με αποτελέσματα από Mail, Messages, και άλλες εφαρμογές συστήματος. Αυτό το άρθρο παρέχει έναν ολοκληρωμένο, έτοιμο οδηγό παραγωγής για την εφαρμογή του Core Spotlight, καλύπτοντας τα πάντα από τη βασική σύνδεση ευρετηρίου και τον συντονισμό απόδοσης.

Κατανόηση του Πυρήνα Προβολέα και των Οφελών Του

Το Core Spotlight είναι ένα ελαφρύ, φιλικό προς την ιδιωτική ζωή σύστημα ευρετηρίασης. Ζει εξ ολοκλήρου σε ⁇ συσκευή ⁇ δεν αφήνει δεδομένα το τηλέφωνο του χρήστη εκτός αν χρησιμοποιείτε ρητά το CloudKit. Αυτό το καθιστά ιδανικό για προσωπικό περιεχόμενο όπως σημειώσεις, επαφές, έγγραφα, ή οποιοδήποτε δεδομένα που παράγονται από τον χρήστη. Τα κύρια οφέλη περιλαμβάνουν:

  • Αυξημένη δέσμευση ⁇ Οι χρήστες ανακαλύπτουν περιεχόμενο που μπορεί να ξέχασαν, ενισχύοντας την επαναλαμβανόμενη χρήση.
  • Αδιάλειπτη πλοήγηση ⁇ Η τοποθέτηση ενός αποτελέσματος αναζήτησης μπορεί να ανοίξει την εφαρμογή σας απευθείας στη σχετική οθόνη.
  • Δυνατότητα offline ⁇ Τα στοιχεία που έχουν ευρετηριαστεί παραμένουν αναζητήσιμα ακόμη και χωρίς συνδεσιμότητα στο διαδίκτυο.
  • Χαμηλό κόστος υλοποίησης ⁇ Το API είναι μικρό, καλά τεκμηριωμένο και ενσωματώνεται εύκολα με τα υπάρχοντα μοντέλα δεδομένων.

Το κεντρικό φως του προβολέα λειτουργεί παράλληλα NSUserActivity ευρετηρίαση, αλλά για στατικό ή συχνά ενημερωμένο περιεχόμενο, η απευθείας CSSearchableItem ευρετηρίαση σας δίνει καλύτερο έλεγχο.

Προαπαιτούμενα και ⁇

Πριν από την εγγραφή κώδικα, βεβαιωθείτε ότι το έργο σας έχει ρυθμιστεί σωστά:

  1. Η εφαρμογή σας πρέπει να στοχεύει iOS 9 ή αργότερα[[LFT:1]] (το API έκανε το ντεμπούτο του με το iOS 9).
  2. Ενεργοποίηση Διακοπτικό προβολέα δυνατότητα σε Xcode ⁇ κάτω από Υπογραφή & Δυνατότητες Προσθήκη του δικαιώματος “Διαφάνειας Προβολέα”. Αυτό συχνά περιλαμβάνεται αυτόματα κατά την εισαγωγή του πλαισίου.
  3. Εισαγωγή του πλαισίου του κεντρικού προβολέα και των υπηρεσιών MobileCore (για αναγνωριστικά τύπου): και .

Δεν απαιτείται καμία πρόσθετη ρύθμιση του εξυπηρετητή ή άδεια χρήστη. Η ευρετηρίαση συμβαίνει ασύγχρονα στο παρασκήνιο.

Δημιουργία και ευρετηρίαση αναζητήσιμων αντικειμένων

Ο πυρήνας του Core Spotlight είναι το αντικείμενο . Κάθε αντικείμενο αποτελείται από:

  • A μοναδικός αναγνωριστικός κωδικός (π.χ., ) ⁇ χρησιμοποιείται αργότερα για να χειριστεί την επιλογή ή τις ενημερώσεις.
  • Ένα προαιρετικό αναγνωριστικό τομέα ⁇ στοιχεία που σχετίζονται με ομάδες (π.χ., ).
  • Ένα σετ χαρακτηριστικών ([]] ⁇ περιγράφει το περιεχόμενο με ιδιότητες όπως , , ], ], και άλλα.

Εδώ είναι ένα πλήρες παράδειγμα Swift που ευρετηριάζει μια μόνο σημείωση:

import CoreSpotlight
import MobileCoreServices

func indexNote(note: Note) {
 let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
 attributeSet.title = note.title
 attributeSet.contentDescription = note.body
 attributeSet.keywords = [note.title] + note.tags
 if let imageData = note.thumbnail?.pngData() {
 attributeSet.thumbnailData = imageData
 }

 let item = CSSearchableItem(
 uniqueIdentifier: "com.yourapp.note.\(note.id)",
 domainIdentifier: "com.yourapp.notes",
 attributeSet: attributeSet
 )
 // Optionally set expiration date (default is one month)
 // item.expirationDate = Date.distantFuture

 CSSearchableIndex.default().indexSearchableItems([item]) { error in
 if let error = error {
 print("Indexing error: \(error.localizedDescription)")
 } else {
 print("Note indexed successfully.")
 }
 }
}

Ιδιότητες ρύθμισης χαρακτηριστικών

Η κληρονομεί από [] και προσφέρει δεκάδες ιδιοκτησίες. Για τις περισσότερες εφαρμογές τα ακόλουθα είναι απαραίτητα:

  • ⁇ Σύντομο, περιγραφικό κείμενο που εμφανίζεται εξέχοντα.
  • ⁇ Ένα μακρύτερο κομμάτι που φαίνεται κάτω από τον τίτλο.
  • ⁇ Εντολή του για εναλλακτικούς όρους αναζήτησης.
  • ή ⁇ Οπτική προεπισκόπηση.
  • ⁇ Συνδέει στοιχεία μαζί (π.χ., σημειώσεις γονέα ⁇ παιδιού).

Για το περιεχόμενο των μέσων, χρησιμοποιήστε ιδιότητες τύπου όπως , ] ή .

Ενημέρωση και διαγραφή ευρετηρίου περιεχομένου

Όταν αλλάζει το περιεχόμενο της εφαρμογής σας, πρέπει να διατηρείτε το ευρετήριο σε συγχρονισμό. Χρησιμοποιήστε τις ίδιες [[LFT:23]] μεθόδους:

Ενημέρωση ενός αντικειμένου

Καλέστε με το ίδιο μοναδικό αναγνωριστικό ⁇ το API αντικαθιστά αυτόματα την παλιά καταχώρηση.

Διαγραφή αντικειμένων

Χρήση ή για την αφαίρεση του μπαγιάτικου περιεχομένου:

CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.note.123"]) { error in
 // handle
}

Οι εργασίες παρτίδας είναι αποτελεσματικές: περνούν τις συστοιχίες σε [[LFT:28]] ή [[LFT:29]]. Για πλήρη επαναφορά, χρησιμοποιήστε [[LFT:30]] (μεγάλη ανάγκη).

Χειρισμός Δραστηριότητας χρήστη και Βαθιά σύνδεση

Όταν ένας χρήστης χρησιμοποιεί ένα αποτέλεσμα Spotlight, η εφαρμογή σας λαμβάνει κλήση μέσω της συνέχειας. Εφαρμογή της ακόλουθης μεθόδου ανάθεσης στην ] ή :

func application(_ application: UIApplication,
 continue userActivity: NSUserActivity,
 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

 if userActivity.activityType == CSSearchableItemActionType {
 if let userInfo = userActivity.userInfo,
 let identifier = userInfo[CSSearchableItemActivityIdentifier] as? String {
 // Navigate to the item with this identifier
 navigateToContent(identifier: identifier)
 return true
 }
 }
 return false
}

Κράτος αποκατάστασης

Για μια ομαλότερη εμπειρία, εφαρμόστε επίσης για να εμφανίσετε κατάσταση φόρτωσης. Σε εφαρμογές με βάση τη σκηνή (iOS 13+), χρησιμοποιήστε τη μέθοδο .

Βαθιά σύνδεση με την NSUSerActivity

Το κεντρικό φως λειτουργεί επίσης με το μηχανισμό . Αν έχετε ήδη ευρετηριάσει δραστηριότητες μέσω [[LFT:39]]], μπορείτε να προσθέσετε τη σημαία [[LFT:40]]. Ωστόσο, για τον λεπτομετρημένο έλεγχο των τίτλων και των περιγραφών, χρησιμοποιήστε [[[LFT:41]] απευθείας.

Βέλτιστες πρακτικές για την αποτελεσματική ευρετηρίαση

Ακολουθώντας αυτές τις οδηγίες, το περιεχόμενο σας παραμένει σχετικό και performant:

1. Δείκτης μόνο σημαντικό περιεχόμενο

Μην index κάθε μικροσκοπικό κομμάτι των δεδομένων. Εστίαση σε στοιχεία οι χρήστες είναι πιθανό να αναζητήσουν: πρόσφατα έγγραφα, σελίδες υψηλής αξίας, ή σελιδοδείκτη περιεχόμενο.

2. Καθορίστε τις ημερομηνίες λήξης της κατάλληλης περιόδου

Εξ ορισμού, τα στοιχεία λήγουν μετά από ένα μήνα. Για στατικό περιεχόμενο, ρυθμίστε [[LFT:42]]. Για δεδομένα ευαίσθητα στο χρόνο (π.χ. υπενθυμίσεις γεγονότων), χρησιμοποιήστε μια ρεαλιστική ημερομηνία.

3. Χρησιμοποιήστε τους αναγνωριστικούς τομέα Σοφά

Τα αναγνωριστικά τομέα σας επιτρέπουν να διαγράψετε όλα τα αντικείμενα από μια ομάδα ταυτόχρονα. Για παράδειγμα, αν ένας χρήστης διαγράψει ένα φάκελο, καλέστε .

4. Παρέχετε σημαντικές λέξεις-κλειδιά

Περιλαμβάνουν συνώνυμα, κοινά ορθογραφικά, και εναλλακτικές ονομασίες. Αποφύγετε την υπερφόρτωση? 5 ⁇ 10 καλά-επιλεγμένες λέξεις-κλειδιά είναι αρκετά.

5. Αποφύγετε την ευρετηρίαση διπλής περιεχομένου

Αν αναπαραγάγετε αντικείμενα (π.χ. τον ίδιο τίτλο σε διαφορετικούς τομείς), οι χρήστες βλέπουν συγκεχυμένα αποτελέσματα. Αποτυπώστε στο επίπεδο εφαρμογής.

6. Επιχειρήσεις παρτίδας για μαζικές ενημερώσεις

Κατά τον συγχρονισμό πολλών αντικειμένων (π.χ., μετά από μια αποκατάσταση σύννεφου), τα τοποθετείτε σε συστοιχίες 50 ⁇ 100 για να αποφύγετε το μπλοκάρισμα του κύριου νήματος. Χρησιμοποιήστε [[LFT:44]] με μια συστοιχία, όχι πολλαπλές μεμονωμένες κλήσεις.

Επιδόσεις και παρατηρήσεις μπαταρίας

Το κεντρικό φως του φωτός τρέχει μια διαδικασία φόντου χαμηλής προτεραιότητας.

  • Συχνότητα επαναindexing περιορισμών ⁇ Μόνο reindex όταν τα δεδομένα αλλάζουν πραγματικά, όχι σε κάθε app λανσάρουν.
  • Μεγάλες λειτουργίες ⁇ Χρήση και [διαθέσιμη στις ]) για ατομικές ενημερώσεις.
  • Αποφύγετε τις βαριές εικόνες ⁇ θα πρέπει να είναι μικρές (π.χ., 64×64 βαθμοί, JPEG συμπιεσμένες).
  • Χρησιμοποιήστε τον προεπιλεγμένο δείκτη ⁇ είναι αρκετό για όλες σχεδόν τις εφαρμογές. Σπάνια απαιτείται η δημιουργία προσαρμοσμένων ευρετηρίων.

Η τεκμηρίωση του Core Spotlight της Apple τονίζει ότι η ευρετηρίαση πρέπει να αντιμετωπίζεται ως “πυρκαγιά και λησμονιά” ⁇ μην περιμένετε συγχρονισμένα για την ολοκλήρωση των κλήσεων στο κύριο νήμα.

Δοκιμή ενσωμάτωσης του κεντρικού προβολέα

Debugging Spotlight αποτελέσματα μπορεί να είναι δύσκολο, επειδή δεν εμφανίζονται πάντα αμέσως. Ακολουθήστε αυτή τη στρατηγική δοκιμών:

  1. Δοκιμές προσομοίωσης ⁇ Χρήση προσομοιωτή iOS (iOS 15 ή αργότερα).Μετά την ευρετηρίαση, περιμένετε λίγα δευτερόλεπτα, στη συνέχεια τραβήξτε προς τα κάτω την Αρχική οθόνη για αναζήτηση. Να γνωρίζετε ότι τα αποτελέσματα μπορεί να πάρει περισσότερο χρόνο στον Προσομοιωτή.
  2. Δοκιμές συσκευών ⁇ Πάντα δοκιμή σε φυσική συσκευή.
  3. Επαναφορά του ευρετηρίου ⁇ Χρήση της εφαρμογής ⁇ : Γενικά → Αναζήτηση Προβολέα → εναλλαγή της εφαρμογής σας και σε. Αυτό καθαρίζει το δείκτη και αναγκάζει μια νέα αρχή.
  4. Επαλήθευση διαγραφής[[LFT:1]] ⁇ Αφού διαγράψετε ένα στοιχείο, εξασφαλίστε ότι το παλιό αποτέλεσμα δεν εμφανίζεται πλέον. Μερικές φορές το σύστημα αποθηκεύει αποτελέσματα· δώσ' το μέχρι 30 δευτερόλεπτα.
  5. Ελέγξτε την κονσόλα αποσφαλμάτωσης ⁇ Ενεργοποίηση [[LFT:50]] υλοτομία με πέρασμα [[LUT:51]] στα επιχειρήματα σχήματος του Xcode.

Ένας χρήσιμος πόρος είναι WWDC 2015 «Introducing Core Spotlight», ο οποίος καλύπτει θεμελιώδεις έννοιες που εξακολουθούν να ισχύουν σήμερα.

Συμπέρασμα

Το Core Spotlight API είναι ένα ισχυρό, μη χρησιμοποιηθέν εργαλείο που μπορεί να μετατρέψει τον τρόπο αλληλεπίδρασης των χρηστών με την εφαρμογή σας. Με την προσθήκη σχετικού, μέχρι και ενημερωμένου περιεχομένου στο δείκτη αναζήτησης του συστήματος, θα παρέχει μια τριβή ⁇ λιγότερο διαδρομή από την αναζήτηση στο περιεχόμενο ⁇ ενίσχυση της δέσμευσης και της διατήρησης. Ξεκινήστε μικρά: δείκτη πιο σημαντικό περιεχόμενο σας πρώτα, δοκιμή διεξοδικά, και στη συνέχεια να επεκταθεί για να καλύψει δευτερεύοντα αντικείμενα. Θυμηθείτε να κρατήσει καθαρό δείκτη σας, χρησιμοποιήστε μοναδικά αναγνωριστικά με συνέπεια, και να χειριστεί τη δραστηριότητα του χρήστη κλήσεις με χάρη. Με τα βήματα που περιγράφονται σε αυτό το άρθρο, είστε έτοιμοι να παραδώσει μια εμπειρία αναζήτησης πρώτης κατηγορίας που αισθάνεται εγγενές στο iOS.

Για περαιτέρω ανάγνωση, συμβουλευτείτε τον επίσημο Πλαίσιο Προβολέων Κορεσμού και τον Οδηγός Προγραμματισμού Αναζήτησης Εφαρμογών.