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

作者: 没故事的卓同学 | 来源:发表于2015-09-22 00:37 被阅读4161次

    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取出对应的数据,进行处理了。



    参考链接:

    Index App Content

    Session 709 — Introducing Search APIs

    相关文章

      网友评论

      本文标题:iOS9:快速让你的APP支持spotlight搜索

      本文链接:https://www.haomeiwen.com/subject/ewdicttx.html