Krótko o wyszukiwaniu zawartości aplikacji z Core Spotlight w iOS

Krótko o wyszukiwaniu zawartości aplikacji z Core Spotlight w iOS

Dzisiaj omówię jeden z frameworków dodanych w iOS 9: Core Spotlight. API pozwala na dodanie zawartości do wyszukiwarki spotlight, czyli np. aplikacja służąca do przeglądania filmów może dodać filmy, aktorów, reżyserów oraz pozwala zareagować, jeśli użytkownik wybrał naszą pozycję. Możemy go wtedy przenieść do odpowiedniego miejsca w aplikacji.

Core Spotlight  – wyszukiwanie zawartości

Na potrzeby wpisu stworzyłem projekt, w którym listuję pracowników Holdapp.

Podzielę całość na dwie części:

  • Zindeksowanie naszych pracowników
  • Obsługa zdarzenia, gdy użytkownik wybierze jakiegoś pracownika

Indeksowanie zawartości

Żeby zindeksować pracowników należy:

  1. Stworzyć obiekt: CSSearchableItemAttributeSet.
  2. Dodać mu odpowiednie dla naszego przypadku atrybuty. Należy również dodać, że można wyświetlać nie tylko teksty, ale też obrazki, numery, daty i punkty na mapie (wszystkie opcje są dostępne tutaj).
  3. Stworzyć obiekt: CSSearchableItem z unikalnym identyfikatorem, domeną i wcześniej stworzonym obiektem CSSearchableItemAttributeSet.
  4. Dodać listę CSSearchableItem do CSSearchableIndex.
// Mamy stworzoną listę employees, która jest wypełniona obiektami Employee
 var searchableItems = [CSSearchableItem]()
        for (i, employee) in employees.enumerate() {
//1.
            let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
//2.
            searchableItemAttributeSet.title = employee.name
            searchableItemAttributeSet.thumbnailURL = NSBundle.mainBundle().URLForResource(employee.imageName, withExtension: "png")

            var keywords = [String]()
            keywords.appendContentsOf(employee.appsMade)
            keywords.appendContentsOf(employee.favouriteLanguages)

            searchableItemAttributeSet.keywords = keywords
//3.
            let searchableItem = CSSearchableItem(uniqueIdentifier: "com.hldp.team.\(i)", domainIdentifier: "hldp_team", attributeSet: searchableItemAttributeSet)
            print(searchableItem)
            searchableItems.append(searchableItem)
        }
//4.
        CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems) { (error) -> Void in
            if error != nil {
                print(error?.localizedDescription)
            }
        }

Obsługa zdarzenia

Gdy użytkownik wybierze jedną z naszych pozycji w spotlight, zostanie wykonana metoda w AppDelegate, mianowicie:

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool

Przy czym:

  • application to obiekt aplikacji,
  • userActivity to obiekt, który służy do odpowiedniego zareagowania na to co użytkownik wybrał, posiada no property: activityType, który jest równy uniqueIdentifier z obiektu CSSearchableItem,
  • restorationHandler to blok, który można wywołać, gdy jest potrzeba kontynuowania aktywności.

Funkcja pozwala na dostosowanie aplikacji do wykonanej akcji użytkownika. Jeśli obsłużymy akcję zwracamy true w innym wypadku zwracamy false.

Reasumując, Core Spotlight jest bardzo prosty i przejrzysty w implementacji. Kilka linijek kodu może bardzo zwiększyć widoczność aplikacji i ułatwić dostęp do odpowiedniego miejsca dla użytkownika.

Bartek

Bartek Byra

iOS Developer

Dowiedz się więcej

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2023

Wygrana w kategorii
MCOMMERCE ROZWÓJ

23

opinie klientów

Clutch logo