iOS 9:快速让你的APP支持spotlight搜索
2023-04-18 14:55:43 时间
iOS9中支持为app中的内容做索引以支持spotlight搜索,感觉是个很有新意的功能。需要提到的是这些索引是存在本地设备中的,不会同步到icloud中,更换了设备就没有了。
效果就是这样:
创建支持搜索的内容
支持搜索的内容的类是CSSearchableItem。
可以展示的属性有标题,一段描述文字,还有缩略图。这里建议给每个item设置一个过期时间(expirationDate)。
首先创建表示一个配置展示内容的对象CSSearchableItemAttributeSet
- let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String)
- // Add metadata that supplies details about the item.
- attributeSet.title = "July Report.Numbers"
- attributeSet.contentDescription = "iWork Numbers Document"
- attributeSet.thumbnailData = DocumentImage.jpg
attributeSet也支持电话号码,和地理坐标。右边会有对应的动作,如果是支持导航会有一个箭头。(因为我的app里不需要这功能,我自己没有试过)
- attributeSet.phoneNumbers;
- attributeSet.latitude;
- attributeSet.longitude;
创建CSSearchableItem
uniqueIdentifier相当于这条数据的id。domainIdentifier则表示相关的域。苹果还提供了一组api对这些索引进行修改删除操作,domainIdentifier可以当做参数,比如可以讲一个域下的所有索引删除。
- let item = CSSearchableItem(uniqueIdentifier: "1", domainIdentifier: "file-1", attributeSet: attributeSet)
将CSSearchableItem添加至系统
- CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in
- if error != nil {
- print(error?.localizedDescription)
- }
- else {
- print("Item indexed.")
- }
- }
tips
大部分的app可能还要兼容iOS8,这里介绍下swift下的判断方法。
如果是在一个方法里要使用iOS9的api,使用下面来判断(xcode7也会提醒你)。
- if #available(iOS 9.0, *) {
- }
如果是自己写的一整个方法想表示只在iOS9可用,用下面的关键字加在方法头表示
- @available(iOS 9.0, *)
直接贴我的项目代码了。
用户搜索后选中打开app的处理
在app delegate里添加这个回调就好了。
- func application(UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject]? -> Void) -> Bool {
- }
在OC下的方法是这个
- -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
- }
通过这个可以取到创建CSSearchableItem时设置的identifier
- NSString* identifier=userActivity.userInfo[CSSearchableItemActivityIdentifier];
接着就可以用这个identifier取出对应的数据,进行处理了。
参考链接:
相关文章
- 一个Java程序员对2011年的回顾
- 大数据发展历程
- Android高级进阶之路【一】Android中View绘制流程浅析
- 可信服务管理(Trusted Service Manager)介绍
- GIS应用|快速开发REST空间分析服务
- 未来十年微软长盛不衰的两项战略
- 领域驱动设计模式的收益与挑战
- cocos 3.0 一键打包android平台应该注意的细节
- 数智化时代,驱动企业转型升级的“三驾马车”是什么?
- 基于MINA构建高性能的NIO应用
- 使用Rainbond实现离线环境软件交付
- 工作流引擎 jBPM 5.2 发布
- 微信小程序Minium自动化测试(三)
- 桌面应用抢先体验,这次有点料!
- 甲骨文Java专利遭拒 起诉Android侵权受挫
- 云计算的应用领域及发展前景
- Java效率真的很低吗?Android为何要采用?
- Android高级进阶之路【二】十分钟彻底弄明白 View 事件分发机制
- 庖丁解牛之-Android平台RTSP|RTMP播放器设计
- 手机直付,超级方便