简介
<CoreSpotlight>是 iOS9 / Xcode7 提供的一组新的API来帮助你建立起你的应用中的索引。CoreSpotlight是用来处理用户数据
要使用CoreSpotlight首先要在工程->Build Phases->Link Binary With Libraries->搜索CoreSpotlight引入Framework
搜索结果的初始化以及添加
CSSearchableItemAttributeSet :声明CSSearchableItem包含的元数据。
CSSearchableItemAttributeSet 方法 点击此处查看效果
1 | /*应用内搜索object,想搜索到多少种界面就要创建多少个set ,每个set都要对应一个item*/ |
CSSearchableItem 是CSSearchableItemAttributeSet的内容
CSSearchableItem 方法
1 | //UniqueIdentifier每个搜索都有一个唯一标示,当用户点击搜索到得某个内容的时候,系统会调用代理方法,会将这个唯一标示传给你,以便让你确定是点击了哪一个,方便做页面跳转 |
CSSearchableIndex 将初始好的items加入到搜索数据源里
1 | [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[firstItem] completionHandler:^(NSError * _Nullable error) { |
用户点击搜索结果的交互
类似remote消息,在”AppDelegate.m”里面实现以下方法
1 | - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{ |
索引的删除
CSSearchableIndex 提供了三种方法来删除索引
1 | [CSSearchableIndex defaultSearchableIndex]//系统SearchableIndex的单例 |
总结
关于CSSearchableItemAttributeSet
- contactKeywords的搜索索引,经过测试,一段长文字spotlight可以自动模糊匹配,比如将key设为“这是spotlight第一条搜索结果”输入“这是”、“zhes”、“第一条”···都会匹配搜索结果,key的长度没有进行验证
- 经测试缩略图的添加可以采用URL的方式,不用唤醒app,应该是系统自动根据URL读取其中的data
- 通过查看CSSearchableItemAttributeSet的头文件推测搜索结果支持国际化语言
关于UniqueIdentifier和domainIdentifier的设定
- 可以通过统一的前缀来设置关联,用于区分跳转以及删除和关闭某些敏感信息的搜索结果
- 通过UniqueIdentifier携带的信息来区分类别以及执行跳转至后的动作
关于搜索结果的插入
- 通过把玩新浪微博以及即刻脉脉之后发现,搜索的结果应该是之前打开app加载好的数据,相当于做了一个缓存,而之前没有加载的数据是不会搜索到的,所以猜测这个搜索是不能唤起app内部执行网络请求的。比如我之前微博没有关注“谢娜”,在spotlight搜索“谢娜”没有搜索结果,当我在微博里点进去谢娜的主页之后再出来搜索结果就出现了。
- 插入逻辑可以在数据请求成功后对不同的Model异步进行thumbData、title、description的处理
关于搜索结果的删除和关闭app在spotlight的显示
- 初步设想首先根据UniqueIdentifier和domainIdentifier对搜索结果进行分类,删除的时候调用CSSearchableIndex的方法统一删除,并且在插入搜索结果的工具类里进行Model屏蔽
参考文档
iOS 9之应用内搜索(CoreSpotlight)API - CocoonJin的博客
iOS 9 应用内搜索(CoreSpotlight)的使用 - 魅风追影
Apple Core Spotlight 文档