Nasza strona używa cookies. Dowiedz się więcej o celu ich używania i zmianie ustawień w przeglądarce. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Indeksowanie treści aplikacji w iOS

Avi Tsadok iOS Team Leader / Any.do
Zwiększ widoczność swojej aplikacji bardzo małym kosztem, wykorzystując do tego Core Spotlight.
Indeksowanie treści aplikacji w iOS

Dlaczego API do wyszukiwania jest ważne? Większość aplikacji zawiera treści dodane przez użytkownika lub przez samą aplikację. iOS posiada świetną wyszukiwarkę o nazwie Spotlight, która pełni rolę Google na Twoim urządzeniu.

Spotlight przeszukuje zawartość Twojego urządzenia, aplikacje, a nawet strony internetowe. Stworzenie zawartości aplikacji w Spotlight jest naprawdę łatwe. Udostępni Twoje treści nawet dla użytkowników, którzy nie mają zainstalowanej aplikacji.


Wykorzystaj widoczność swojej aplikacji

Apple udostępnia 3 główne API, dzięki którym Twoja aplikacja jest bardziej wykrywalna:

  • Core Spotlight: Indeksuje Twoje treści prywatnie na urządzeniu użytkownika.
  • NSUserActivity: Pozwala udostępniać treści zarówno na urządzeniu, jak i publicznie, śledząc aktywność i stan użytkownika oraz synchronizując je z Apple
  • Znaczniki sieciowe: Indeksują strony internetowe związane z aplikacją (nie będę ich tu omawiał).


Wszystkie 3 interfejsy API są szybkie i proste w użyciu, a przy niewielkim wysiłku możesz sprawić, że użytkownicy będą pobierać wyniki wyszukiwania z Twojej aplikacji. W niektórych przypadkach nawet wtedy, gdy nie mają zainstalowanej aplikacji.


Indeksuj swoje dane za pomocą Core Spotlight

Core Spotlight ma na celu zindeksowanie danych, a przez „dane” rozumiem wszystko, czego chcesz - czy to dokumenty użytkownika, odpowiednie kontakty, adresy, a nawet obrazy.

Istnieją trzy kroki w celu dodania elementu do indeksu Spotlight:

  1. Zdefiniuj atrybuty elementu - tytuł, opis, numer telefonu, obraz itp.
  2. Utwórz element dla indeksu na podstawie wybranych atrybutów.
  3. Dodaj element do indeksu Spotlight.


Przejdźmy przez kolejne kroki.


Zdefiniuj atrybuty elementu - CSSearchableItemAttributeSet

Pierwszy i najważniejszy krok do zindeksowania treści, to zdefiniowanie atrybutów.

Tworzymy instancję CSSearchableItemAttributeSet, a następnie uzupełniamy jej właściwości.

Podczas inicjowania instancji musimy dopasować typ jej zawartości. Typem zawartości musi być UTI utworzony na podstawie ciągu znaków.

Po ustanowieniu atrybutów możesz rozpocząć wypełnianie właściwości, takich jak temat, tytuł, opis, rodzaj twórcy itd.

import CoreSpotlight

class ContactGenerator {
  
  func index() {
        let attributed = CSSearchableItemAttributeSet(itemContentType: "Text")
        attributed.title = "Avi Tsadok"
        attributed.phoneNumbers = ["0544-xxxxxxx"]
        attributed.emailAddresses = ["avixxx@gmail.com"]
        attributed.contentDescription = "iOS Expert"
  }
}


Istnieje kilka rozszerzeń tej klasy, takich jak:

  • CSSearchableItemAttributeSet_Places
  • CSSearchableItemAttributeSet_Events
  • CSSearchableItemAttributeSet_Documents
  • itd.


Posiadają różne zestawy atrybutów dla obiektu.

Spróbuj wypełnić jak najwięcej atrybutów. Bogate zestawy atrybutów przełożą się przetłumaczeniem na wyniki wyszukiwania i lepsze doświadczenie dla użytkownika. Ponadto algorytm wyszukiwania, którego używa Apple, priorytetyzuje najbogatsze rezulataty.

Niektóre atrybuty są powiązane z numerami telefonów, adresami i lokalizacjami. Oznacza to, że za każdym razem, gdy wyniki wyszukiwania zawierają elementy o tych atrybutach, obok wyniku elementu wyszukiwania pojawi się przycisk akcji, który pozwoli użytkownikowi uzyskać szybką odpowiedź na wynik wyszukiwania.


Utwórz element wyszukiwania

To jest krok na jedną linię kodu. Tworzenie elementu wyszukiwania (CSSearchableItem) jest bardzo łatwe i musisz przekazać tylko trzy parametry: identyfikator elementu, identyfikator domeny i przypisany zestaw, który utworzyliśmy w poprzednim zestawie.

import CoreSpotlight

class ContactsIndexer {

    func indexItems() {
        let attributed = CSSearchableItemAttributeSet(itemContentType: "Text")
        attributed.title = "Avi Tsadok"
        attributed.phoneNumbers = ["0544-xxxx"]
        attributed.emailAddresses = ["avixxxxxx@gmail.com"]
        attributed.contentDescription = "iOS Expert"
        
        // create an item from attributed set
        let contactItem = CSSearchableItem(uniqueIdentifier: "123456", domainIdentifier: "Contacts", attributeSet: attributed)
        }
    }

 

  • Identyfikator elementu ma dwie role - jedna ma nadać elementowi unikalne ID, dzięki czemu można go usunąć lub zmodyfikować w przyszłości, a druga polega na tym, że gdy użytkownik kliknie w element i otworzy aplikację, może załadować się odpowiedni ekran na podstawie przekazanego identyfikatora.
  • Identyfikator domeny jest parametrem opcjonalnym i służy do grupowania wyników wyszukiwania dla użytkownika. Może także pomóc w bardzo łatwym usuwaniu elementów z określonej domeny.


Kolejnym atrybutem, który może być przeszukiwany, jest data ważności. Domyślnie data ważności elementu wynosi miesiąc, ale możesz zmienić tę właściwość w dowolnym momencie.


Indeksuj elementy do przeszukiwania za pomocą CSSearchableIndex


Aby zindeksować element, dodajemy go do CSSearchableIndex.

CSSearchableIndex ma singleton o nazwie default. Ten ma metodę o nazwie indexSearchableItems z jednym parametrem, którym jest tablica elementów do indeksowania.

Powinieneś już rozumieć, że najlepszą praktyką jest mapowanie danych na przeszukiwalne elementy, a następnie indeksowanie ich wszystkich razem, zamiast robić to jeden po drugim.

CSSearchableIndex.default().indexSearchableItems([contactSearchableItem]) { (error) in
            if !error {
              print("Completed successfully")
        }
  }


CSSearchableIndex ma dodatkowe metody, takie jak usuwanie wszystkich elementów w indeksie, usuwanie elementów według identyfikatorów lub usuwanie ich według domeny.

        // delete all items
        CSSearchableIndex.default().deleteAllSearchableItems { (error) in
            
        }
        
        // delete certain items by identifiers
        CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["aviID"]) { (error) in
            
        }

        // delete all items from specific domains
        CSSearchableIndex.default().deleteSearchableItems(withDomainIdentifiers: ["contacts"]) { (error) in
            
        }


Indeksuj aktywność użytkownika za pomocą NSUserActivity

Innym sposobem na zapewnienie użytkownikom trafnych wyników wyszukiwania jest użycie czegoś o nazwie NSUserActivity.

NSUserActivity został utworzony w celu śledzenia statusu użytkownika, a następnie zsynchronizowania go z innymi urządzeniami Apple w celu przekazania i zachowania ciągłości. Śledzenie aktywności użytkowników może jednak pomóc Spotlight w uzyskaniu lepszych i dokładniejszych wyników wyszukiwania.

Śledząc aktywność użytkownika połączoną z aplikacją, indeksujesz elementy w wyszukiwarce. Pamiętaj - CSSearchableIndex odzwierciedla to, co ma Twoja aplikacja, a NSUserActivity odzwierciedla to, co użytkownik robi z Twoją treścią.

Podobnie jak przy CSSearchableItem, tworzenie działania jest proste i łatwe:

    func addUserActivity() {
        let userActivity = NSUserActivity(activityType: "com.searchtutorial.www")
        userActivity.title = "Search Tutorial"
        userActivity.isEligibleForSearch = true
        userActivity.isEligibleForHandoff = true
        userActivity.isEligibleForPrediction = true
        userActivity.isEligibleForPublicIndexing = true
        userActivity.keywords = ["search", "tutorial", "spotlight"]
        userActivity.userInfo = ["id" : "tutorial123"]
        userActivity.becomeCurrent()
    }


Innym sposobem na wzbogacenie wyników wyszukiwania jest dołączenie obiektu CSSearchableItemAttributeSet do działania użytkownika. To ta sama klasa, której użyliśmy do indeksowania CSSearchableItem.

    func addUserActivity() {
        let userActivity = NSUserActivity(activityType: "com.searchtutorial.www")
        userActivity.title = "Search Tutorial"
        userActivity.isEligibleForSearch = true
        userActivity.isEligibleForHandoff = true
        userActivity.isEligibleForPrediction = true
        userActivity.isEligibleForPublicIndexing = true
        userActivity.keywords = ["search", "tutorial", "spotlight"]
        userActivity.userInfo = ["id" : "tutorial123"]
        
        let attributed = CSSearchableItemAttributeSet(itemContentType: "Article")
        attributed.title = "Search Tutorial"
        attributed.emailAddresses = ["avixxx@gmail.com"]
        attributed.contentDescription = "How to search your items with Core Spotlight"
        
        userActivity.contentAttributeSet = attributed
        
        userActivity.becomeCurrent()
    }


Pokaż popularne działania

Należy tutaj zauważyć jedną rzecz. Istnieje właściwość o nazwie isEligibleForPublicIndexing. Oznacza to, że ten wynik wyszukiwania może pojawiać się także dla innych użytkowników, nawet jeśli nie mają zainstalowanej Twojej aplikacji! Dlatego nigdy nie ustawiaj tej właściwości na true, chyba że masz pewność, że nie jest to treść prywatna.


Indeksuj swoje treści w tle

Możesz zaindeksować treść w tle, aby zaktualizować ją w wynikach wyszukiwania. Aby to zrobić, musisz utworzyć rozszerzenie indeksu (Spotlight).

To rozszerzenie ma trzy role:

  1. Reindeksowanie danych, gdy użytkownik przywróci aplikację z kopii zapasowej lub odzyska dane.
  2. Ponowane zaindeksowanie danych, jeśli mają wkrótce wygasnąć.
  3. Indeksowanie nowych elementów otrzymanych metodą przeciągnij i upuść (na iPadzie).


Może to brzmieć jak niewielki problem, ale jeśli chcesz, aby indeks był dobrze utrzymany, musisz tego pilnować.


Najlepsze praktyki wyszukiwania


Oto kilka najlepszych praktyk dotyczących wyszukiwania w iOS:

  1. Spróbuj użyć CSSearchableItemAttributeSet z obrazami, aby wyniki wyszukiwania były zauważalne.
  2. Używaj słów kluczowych w NSUserActivity, od trzech do pięciu dla każdego działania.
  3. Zaktualizuj indeks elementów, które można przeszukiwać, usuwając i aktualizując je, aby wyniki były trafne.
  4. Najlepiej jest utworzyć usługę, która może zapewnić CSSearchableItemAttributeSet dla elementu. Jest to nie tylko dobre do testowania, ale możesz także ponownie użyć kodu zarówno dla NSUserActivity, jak i dla CoreSpotlight.
  5. Spróbuj dowiedzieć się, kiedy zaindeksować treść. Może to być ładowanie aplikacji, zmiana danych lub synchronizacja z serwerem.
  6. Zwróć uwagę na datę ważności. Aby Twoje treści funkcjonowały w wynikach wyszukiwania, upewnij się, że ustawiłeś datę ważności i ponownie ją zindeksuj.
  7. Jeśli budujesz rozszerzenie wyszukiwania, udostępnij kod indeksujący głównej aplikacji.


Podsumowanie

To niesamowite, jak wiele korzyści można uzyskać, tak łatwo indeksując treści do wyszukiwania. Postawienie na Spotlight może zbudować lub zwiększyć zaangażowanie wokół Twojej aplikację.


Oryginał tekstu w języku angielskim przeczytasz tutaj.

Masz coś do powiedzenia?

Podziel się tym z 120 tysiącami naszych czytelników

Dowiedz się więcej