你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 快速上手 Core Spotlight

快速上手 Core Spotlight

編輯:IOS開發基礎

1453980234873.jpg

Core Spotlight 作為新版 iOS 提供的眾多特性之一很少被我們注意到,但作為 App 開發者,它確實很實用, 讓我們的 App 有更多的暴露機會。

了解 Core Spotlight

關於 Core Spotlight, 顧名思義,就是 iOS Spotlight 提供的服務了。至於什麼是 Spotlight, 一張圖一目了然:

1.png

通過 Core Spotlight, 我們可以讓自己的 App 出現在 Spotlight 搜索結果中。 光這一點,就非常強大了。 畢竟這是激發我們活躍用戶的一個渠道。

Core Spotlight 技術細節

Core Spotlight 提供的接口還是很簡單的。 它的原理是一種注冊機制, 我們預先把我們 App 中的內容注冊到系統中, 然後系統會根據我們注冊的條目在搜索的時候進行匹配, 如果匹配成功, 就會展現到搜索結果中。

這個注冊項叫做 CSSearchableItem ,它需要三個信息, uniqueIdentifier, domainIdentifier 和 attributeSet。

  • uniqueIdentifier - 搜索項的唯一標識,類似於應用的 Bundle ID,我們可以在以後通過這個標識來進行後續處理。

  • domainIdentifier - 搜索項的域標識,可以把它理解為一個分組 ID,比如我們要對某個分組做批量操作,就可以用這個 ID 來匹配。

  • attributeSet - 搜索項的屬性集合,其中包括它顯示在搜索結果中的標題,描述信息等。

我們先從 attributeSet 說起:

let attr = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
attr.title = "我是標題"
attr.contentDescription = "描述信息"
attr.thumbnailData = UIImagePNGRepresentation(icon)

上面這段代碼完成了 attributeSet 的創建。 它的構造方法接受一個 itemContentType 參數,這個表示我們要創建的搜索項所對應的數據類型,我們這裡使用的是kUTTypeText,它表示文本數據。

接下來也不難理解,分別設置了這個搜索項的標題,描述和縮略圖。這些信息都會展現在搜索結果界面中,同時他們也會作為搜索匹配的依據。

有了這些信息,我們就可以創建 CSSearchableItem 了:

let item = CSSearchableItem(uniqueIdentifier: "/file.txt", domainIdentifier: "open-file", attributeSet: attr)

SSearchableItem 接受 3 個參數,第一個就是 uniqueIdentifier,接下來是 domainIdentifier,最後是我們剛剛創建的attributeSet。

我們使用文件路徑作為 uniqueIdentifier 參數傳入,這樣當用戶點擊搜索項調起我們自己的 App 的時候,就可以根據這個路徑打開相應的文件了。

創建後搜索項後,我們還要做最後一步操作,就是把它注冊到 Spotlight 的搜索系統中:

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item], completionHandler: { error in
})

到此為止,Core Spotlight 的注冊過程就完成了。如果你把上面的代碼放到你的 App 工程中,然後運行程序,就可以在 Spotlight 搜索框中搜索到自己 App 的內容了。

處理 Spotlight 調起

Spotlight 的注冊工作完成了,如果沒有什麼異常情況,你應該可以在搜索結果中看到自己的應用內容了。現在我們開始處理點擊搜索結果項後的調起操作:

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        if let uniqueIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
            mainViewController?.openFile(uniqueIdentifier)  //打開相應文件
        }
    }
    return true
}

當我們點擊 Spotlight 搜索項的時候, 系統會調用我們 APPDelegate 的 application:continueUserActivity 方法, 這裡我們判斷 activity 類型。 只有類型為 CSSearchableItemActionType 的才是來自 Spotlight 的跳轉。

然後在 userInfo 中,我們可以通過 CSSearchableItemActivityIdentifier 這個 key 來得到相應搜索項的 uniqueIdentifier。 在我們這個例子中,它就是我們要打開文件的路徑。 然後調用相應的文件處理方法就完成了。

到此為止,我們處理 Core Spotlight 的基本流程就完成了。先是完成了注冊,然後處理了搜索項點擊。

維護 Spotlight 索引

我們創建完 Spotlight 索引後, 還要對他進行一些維護工作。 比如當我們相應的文件內容或文件名被修改後,我們同時也要更新 Core Spotlight 索引, 更新的方法同樣使用 indexSearchableItems 方法:

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([newItem]) { error in
}

另外,如果文件被刪除了, 我們還要記得也同時刪除它的索引, 刪除索引有三種方法:

通過 uniqueIdentifier 刪除

func deleteSearchableItemsWithIdentifiers(identifiers: [String], completionHandler: ((NSError?) -> Void)?)

通過 domainIdentifier 刪除

func deleteSearchableItemsWithDomainIdentifiers(domainIdentifiers: [String], completionHandler: ((NSError?) -> Void)?)

刪除本應用所有的索引

func deleteAllSearchableItemsWithCompletionHandler(completionHandler: ((NSError?) -> Void)?)

結論

經過一番折騰後,大家是不是覺得 Core Spotlight 的接口還挺簡單的。我自己覺得挺方便的。 不過雖然簡單,但它的作用還是挺大的。合理使用 Core Spotlight 索引,無疑是增加我們 App 入口機會的一個好方法。 當然注冊索引的時候一定要合理,比如我們的 App 是一個文本編輯器,那麼就可以將每個文本文件作為索引。 如果我們是一個新聞 App 那麼每條新聞作為索引就最合適不過。這樣用戶點擊進來就正好是他們想要的東西,對這個 App 的好感也會有所提高。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved