iOS 9:快速让你的APP支持spotlight搜索

移动开发
iOS9中支持为app中的内容做索引以支持spotlight搜索,感觉是个很有新意的功能。需要提到的是这些索引是存在本地设备中的,不会同步到icloud中,更换了设备就没有了。

[[151508]]

iOS9中支持为app中的内容做索引以支持spotlight搜索,感觉是个很有新意的功能。需要提到的是这些索引是存在本地设备中的,不会同步到icloud中,更换了设备就没有了。

效果就是这样:

blob.png

创建支持搜索的内容

支持搜索的内容的类是CSSearchableItem。

可以展示的属性有标题,一段描述文字,还有缩略图。这里建议给每个item设置一个过期时间(expirationDate)。

blob.png

首先创建表示一个配置展示内容的对象CSSearchableItemAttributeSet


  1. let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String) 
  2. // Add metadata that supplies details about the item. 
  3. attributeSet.title = "July Report.Numbers" 
  4. attributeSet.contentDescription = "iWork Numbers Document" 
  5. attributeSet.thumbnailData = DocumentImage.jpg 

attributeSet也支持电话号码,和地理坐标。右边会有对应的动作,如果是支持导航会有一个箭头。(因为我的app里不需要这功能,我自己没有试过)


  1. attributeSet.phoneNumbers; 
  2. attributeSet.latitude; 
  3. attributeSet.longitude; 

blob.png

创建CSSearchableItem

uniqueIdentifier相当于这条数据的id。domainIdentifier则表示相关的域。苹果还提供了一组api对这些索引进行修改删除操作,domainIdentifier可以当做参数,比如可以讲一个域下的所有索引删除。


  1. let item = CSSearchableItem(uniqueIdentifier: "1", domainIdentifier: "file-1", attributeSet: attributeSet) 

将CSSearchableItem添加至系统


  1. CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in 
  2.   if error != nil { 
  3.      print(error?.localizedDescription) 
  4.   } 
  5.      else {  
  6.          print("Item indexed."
  7.   } 

tips

大部分的app可能还要兼容iOS8,这里介绍下swift下的判断方法。

如果是在一个方法里要使用iOS9的api,使用下面来判断(xcode7也会提醒你)。


  1. if #available(iOS 9.0, *) { 

如果是自己写的一整个方法想表示只在iOS9可用,用下面的关键字加在方法头表示


  1. @available(iOS 9.0, *) 

直接贴我的项目代码了。

blob.png

blob.png

用户搜索后选中打开app的处理

在app delegate里添加这个回调就好了。


  1. func application(UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject]? -> Void) -> Bool { 

在OC下的方法是这个


  1. -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{ 

通过这个可以取到创建CSSearchableItem时设置的identifier


  1. NSString* identifier=userActivity.userInfo[CSSearchableItemActivityIdentifier]; 

接着就可以用这个identifier取出对应的数据,进行处理了。

参考链接:

责任编辑:倪明 来源: CocoaChina
相关推荐

2015-08-20 09:00:23

ios9api

2015-07-17 11:12:43

IOS搜索API

2013-04-16 16:01:51

APP支持iPhoneiOS开发

2020-08-26 19:24:51

iOS 14App Attest防护

2015-08-20 09:19:46

ios9uistackview

2013-07-12 13:24:19

App诱惑

2012-01-05 09:19:25

iOSApp应用

2013-07-05 13:48:47

App

2015-09-22 10:59:45

iOS 9功能

2018-11-19 15:06:23

Python算法

2018-04-24 10:05:13

Docker工具交付

2013-07-30 15:24:53

App应用体验

2013-09-18 15:56:18

Testin王军App

2015-09-16 09:02:10

IOS9新功能搜索业务

2012-07-09 11:20:59

2016-03-02 17:55:03

app用户加载

2013-02-01 17:36:35

App开发者用户体验

2020-11-20 10:40:20

PyTorch神经网络代码

2013-11-25 11:25:05

产品设计App设计产品经理

2020-04-26 15:38:28

Docker容器
点赞
收藏

51CTO技术栈公众号