使用CoreSpotlight进行应用内搜索和索引

梦幻独角兽 2021-07-06 ⋅ 17 阅读

iOS的 CoreSpotlight 框架提供了一种简单而强大的方式用于在应用内进行搜索和索引。通过将应用的内容索引化后,用户可以直接从设备主屏幕搜索应用的特定内容,而无需打开应用。本文将介绍如何使用 CoreSpotlight 框架来实现这一功能。

添加 CoreSpotlight 框架到项目中

首先,在 Xcode 中打开你的项目。在工程导航器中,选择你的应用目标,然后点击 "Build Phases"。在 "Link Binary With Libraries" 部分,点击 "+" 按钮,然后选择 CoreSpotlight.framework。此时,Xcode会自动将该框架添加到你的项目中。

创建索引

要使用 CoreSpotlight 创建索引,你需要创建一个 CSSearchableItemAttributeSet 对象,并将其与一个 CSSearchableItem 对象关联。CSSearchableItemAttributeSet 是一个包含了与搜索内容相关的属性的对象,如标题、副标题、关键字、描述等。下面是一个示例:

import CoreSpotlight
import MobileCoreServices

func indexContent() {
    // 创建一个 CSSearchableItemAttributeSet 对象
    let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
    attributeSet.title = "标题"
    attributeSet.contentDescription = "这是一个示例内容"
    attributeSet.keywords = ["关键词1", "关键词2", "关键词3"]
    
    // 创建一个 CSSearchableItem 对象与 CSSearchableItemAttributeSet 关联
    let item = CSSearchableItem(uniqueIdentifier: "com.yourapp.uniqueidentifier", domainIdentifier: "com.yourapp", attributeSet: attributeSet)
    
    // 将 CSSearchableItem 对象添加到搜索引擎中
    CSSearchableIndex.default().indexSearchableItems([item]) { (error) in
        if let error = error {
            print("添加索引失败:\(error.localizedDescription)")
        } else {
            print("添加索引成功")
        }
    }
}

可以通过创建和添加多个 CSSearchableItem 来索引不同类型的内容,以便更精确地进行搜索。

监听搜索事件

要在搜索时从 iOS 主屏幕启动你的应用程序或响应搜索结果,你需要在你的 AppDelegate 中实现一个方法。在该方法内,你可以通过标识符来确定搜索的内容,并根据其进行相应的操作。下面是一个示例:

import CoreSpotlight

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        if let identifier = userActivity.userInfo? [CSSearchableItemActivityIdentifier] as? String {
            // 根据标识符处理搜索结果
            handleSearchResult(identifier)
        }
    }
    
    return true
}

删除索引

如果你需要在应用中删除已经创建的索引,可以使用 deleteSearchableItems(withIdentifiers:completionHandler:) 方法。可以通过指定标识符来删除特定项,或者使用 deleteAllSearchableItems(completionHandler:) 方法删除所有项目。

CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.uniqueidentifier"]) { (error) in
    if let error = error {
        print("删除索引失败:\(error.localizedDescription)")
    } else {
        print("删除索引成功")
    }
}

结论

CoreSpotlight 是一个非常有用的框架,可以帮助用户快速找到你的应用中的特定内容。结合标识符和属性集合,你可以轻松创建和管理搜索功能。希望本文对你掌握 CoreSpotlight 的使用有所帮助!


全部评论: 0

    我有话说: