搜索类API:NSUserActivity 、CoreSpotlight、Web Markup

iOS 9中的搜索为用户提供了一种新的方式来访问应用内部的信息,即使未安装。当您将内容设为可搜索时,用户可以通过Spotlight和Safari搜索结果,Handoff和Siri建议,访问应用内深层的活动和内容。使用与搜索相关的API,您可以决定将哪些内容编入索引,在搜索结果中显示哪些信息,以及在点击应用或网站的结果后重定向用户的位置。

主要有三种搜索类的API:
1、NSUserActivity,索引用户活动以及App的状态。
2、iOS 9新增的CoreSpotlight.framework提供了增、删、改、查等搜索API,可以索引App的内容。
3、Web Markup,Web内容可被搜索。
前两个属于 私人设备上的索引。
最后一个属于 苹果的服务器端索引。

NSUserActivity

NSUserActivity是iOS 8专为Handoff推出的API,iOS 9之后得到了提升。Spotlight可以将activity编入索引,而NSUserActivity就好比网页浏览器的历史堆栈(history stack),使用户能在Spotlight上搜到最近的活动。

Web Markup

Web Markup在网页上显示App的内容并编入Spotlight索引,如此一来即便没有安装某个App,苹果的索引器也能在网页上搜索特别的标记(markup),在Safari或Spotlight上显示搜索结果。
显示未安装App的搜索结果是一大亮点,有望为开发者带来更多潜在用户。公布在搜索API上的App深链接则储存在苹果的cloud index中。更多详情,请参阅苹果的“Web Markup使用指南(Use Web Markup to Make App Content Searchable)”。

CoreSpotlight

NSUserActivity帮助储存用户历史,而全新的Core Spotlight则能将App中的任何内容编入索引,实质是在用户设备上提供基础的Core Spotlight索引渠道,满足用户另外一个需求。

代码:

#import 


NSMutableArray  *searchableItems = [NSMutableArray array];
    CSSearchableItemAttributeSet *attribute = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"ceshiStyle"];
    
    attribute.title = @"测试标题";

    attribute.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:@"ceshi.png"]);
    
    CSSearchableItem *item = [[CSSearchableItem alloc]initWithUniqueIdentifier:@"001" domainIdentifier:@"ceshiNumber" attributeSet:attribute];
    
    
    [searchableItems addObject:item];
    
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
        if (error != nil) {
            NSLog(@"%@",error);
        }
    }];
        

然后在AppDelegate的代理方法中接收点击搜索结果的userInfo

#pragma mark - CoreSpotlight
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    
    NSString *ceshiNumber = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
    //ceshiNumber = 001
  
    return true;
}

最后需要提到的就是索引的删除。CoreSpotlight给我们提供了三个方法来进行删除分别是:

- (void)deleteSearchableItemsWithIdentifiers:(NSArray *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler; 

- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;

 - (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler; 

根据identifier来删除,根据domain来删除以及删除所有的索引。

关于Web Markup,我们只需要在自己的官网的代码中的head里面加入代码:



affiliate-data和app-argument参数都是可选的,

文章借鉴自:http://www.csdn.net/article/2015-07-16/2825222-search-apis

你可能感兴趣的:(搜索类API:NSUserActivity 、CoreSpotlight、Web Markup)