Mobil

Uygulama içeriğinize Core Spotlight nasıl eklenir?

iOS 9'daki en önemli eklemelerden biri, uygulamaların iOS sistem genelinde arama özelliği olan Spotlight ile çift yönlü iletişim kurabilmesiydi. Bunun anlamı, uygulamalar, içeriklerinin Spotlight arama sonuçlarında gösterilmesini isteyebilir ve kullanıcı bu arama sonuçlarından birine dokunursa, uygulama başlatılır ve doğru içeriği yükleyebilmesi için neye tıkladığı söylenir.

Storyboard üzerinden 3 adet view controller oluşturalım ve bu view controller’ların storyboardid’lerini sırasıyla Screen1, Screen2 ve Screen3 olarak tanımlayalım.

Kod tarafında nasıl yapacağımıza geçelim.

 

1 - Index işlemi

Öncelikle uygulamada ilk açılan ekranın controller dosyasına aşağıdaki 2 adet kütüphaneyi ekliyoruz.

import CoreSpotlight

import MobileCoreServices


Daha sonra aşağıdaki struct modelimizi yaratıyoruz.
 

struct SpotlightModel {
        var id: String   // App delegate dosyamızda kontrol edeceğimiz id bilgisi
        var title: String  // Spotlight search kısmında uygulama adı kısmı
        var content:String: String   // Spotlight search kısmında uygulama açıklama kısmı
        var keywords:[String]    // Spotlight search kısmında arandığında çıkmasını istediğimiz kelimeler
}

Modelimizi yarattıktan sonra bu modelden oluşturulan bir array oluşturuyoruz.

var matches:[SpotlightModel] = [SpotlightModel]()

Aşağıdaki metod ile indexleme işlemini yapıyoruz.

func indexSearchableItems(){
        // add search items
        let screen1 = SpotlightModel(id: "1", title: "Bayri", content: "Screen 1", keywords: ["screen 1, screen1"])
        let screen2 = SpotlightModel(id: "2", title: "Bayri", content: "Screen 2", keywords: ["screen 2, screen2"])
        let screen3 = SpotlightModel(id: "3", title: "Bayri", content: "Screen 3", keywords: ["screen 3, screen3"])
        matches.append(screen1)
        matches.append(screen2)
        matches.append(screen3)
        var searchableItems = [CSSearchableItem]()
        for match in matches {
            let searchItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
            searchItemAttributeSet.title = match.title
            searchItemAttributeSet.contentDescription = match.content
            searchItemAttributeSet.keywords = match.keywords
            let searchableItem = CSSearchableItem(uniqueIdentifier: match.id, domainIdentifier: "matches", attributeSet: searchItemAttributeSet)
            searchableItems.append(searchableItem)
        }
        CSSearchableIndex.default().indexSearchableItems(searchableItems) { (error) -> Void in
            if error != nil {
                print(error?.localizedDescription ?? "Error")
            }
        }
    }


 

2 - Indexlenen ekranın açılma işlemi

AppDelegate.swift dosyanıza import CoreSpotlight ekleyin. 

Ardından aşağıdaki metodu Spotlight Search kısmından dönen değeri karşılamak için AppDelegate.swift dosyamıza ekliyoruz.

Kod içerisindeki uniqueIdentifier değişkeni yukarıda indexlemiş olduğumuz bilgidir. Bu değere göre açmamız gereken sayfayı açıyoruz. 

 

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if userActivity.activityType == CSSearchableItemActionType {
            if let uniqueIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
                if(uniqueIdentifier == "1"){
                    let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                    let homePage = mainStoryboard.instantiateViewController(withIdentifier: "Screen1") as! Screen1ViewController
                    self.window?.rootViewController = homePage
                }else if(uniqueIdentifier == "2"){
                    let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                    let homePage = mainStoryboard.instantiateViewController(withIdentifier: "Screen2") as! Screen2ViewController
                    self.window?.rootViewController = homePage
                }else if(uniqueIdentifier == "3"){
                    let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                    let homePage = mainStoryboard.instantiateViewController(withIdentifier: "Screen3") as! Screen3ViewController
                    self.window?.rootViewController = homePage
                }
                window?.makeKeyAndVisible()
            }
        }
        return true
    }

 

Uygulamamız kullanıma hazır.