iOS9系列专题二——全新的搜索功能api(一)

简介: iOS9系列专题二——全新的搜索功能api

更加智能的搜索方案——iOS9搜索功能新api


一、引言


       iOS9中为我们提供了许多新的api,搜索功能的加强无疑是其中比较显眼的一个。首先,我们先设想一下:如果在你的app中定义一种标识符,在siri和搜索中,可以用过这个标识符搜索到你的app,是不是很棒?不,这还差得远,你可以定义任意的数据,使其在搜索和siri中可以快速检索到,这样的搜索功能是不是非常酷?不,还有更cool的,你甚至可以在你的网站中添加一些标志,使apple的爬虫可以检索到,那样,即使用户没有安装你的app,也可以在搜索中获取到相应的信息,这太强大了,对吧。


二、3种全新的搜索模式


‍1、NSUserActivity‍


       我们可以在项目中使用相应的函数来添加一些用户的活跃元素,使我们可以在搜索中通过搜索这样的活跃元素展现我们的app。例如:


   //创建一个对象,这里的type用于区分搜索的类型

   NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType: @"myapp"];

   //显示的标题

   userActivity.title = @"我的app";

   // 搜索的关键字

   userActivity.keywords = [NSSet setWithArray: @[@"sea",@"rch"]];

   // 支持Search

   userActivity.eligibleForSearch = YES;

   //提交设置

   [userActivity becomeCurrent];

在下面的函数中,我们可以处理用户点击搜索后的回调:


- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:

{

NSString *activityType = userActivity.activityType;

   if ([activityType isEqual: @"myapp"]){

       // Handle restoration for values provided in userInfo

       // do something


       return YES;

   }

   return NO;

   //处理回调

}

TIP:这种方式添加的关键字搜索,必须创建全局变量,否则无法进行搜索:



2、CoreSpotlight


       CoreSpotlight是一种更加自由的搜索方式,可以通过添加类似item的模型,将app中的数据展示在搜索栏中,CoreSpotlight框架类似提供了一些增、删、改、查的操作,可是使我们自由的进行搜索属性的设置。


(1)认识3个类


在iOS9中,新增加了3个类,通过对这三个类的操作与配合,我们可以轻易的在app中添加CoreSpotlight搜索的功能。


CSSearchableItemAttributeSet:设置类,这个类用于设置搜索标签里的icon,内容,图片等。主要用法如下:


//这个类的核心方法只有一个init方法,通过一个类型字符串进行创建,字符串用于在回调中区分

@interface CSSearchableItemAttributeSet : NSObject <NSCopying,NSSecureCoding>

- (instancetype)initWithItemContentType:(nonnull NSString *)itemContentType;

@end

//更多的属性设置在其扩展类中,例如:

@interface CSSearchableItemAttributeSet (CSGeneral)


//展示的名称

@property(nullable, copy) NSString *displayName;


//名称数组

@property(nullable, copy) NSArray<NSString*> *alternateNames;


//完整的路径

@property(nullable, copy) NSString *path;


//链接url

@property(nullable, strong) NSURL *contentURL;


//图片链接的url

@property(nullable, strong) NSURL *thumbnailURL;


//设置图片数据

@property(nullable, copy) NSData *thumbnailData;


//设置一个标识符

@property(nullable, copy) NSString *relatedUniqueIdentifier;


@property(nullable, strong) NSDate *metadataModificationDate;


//内容类型

@property(nullable, copy) NSString *contentType;


@property(nullable, copy) NSArray<NSString*> *contentTypeTree;


//搜索的关键字数组

@property(nullable, copy) NSArray<NSString*> *keywords;


//标题信息

@property(nullable, copy) NSString *title;


@end


CSSearchableItem:搜索标签类,通过这个类,来创建响应的搜索标签。主要内容如下:


//这个类主要用于创建搜索的标签

@interface CSSearchableItem : NSObject <NSSecureCoding, NSCopying>

//init方法

- (instancetype)initWithUniqueIdentifier:(nullable NSString *)uniqueIdentifier //Can be null, one will be generated

                       domainIdentifier:(nullable NSString *)domainIdentifier

                           attributeSet:(CSSearchableItemAttributeSet *)attributeSet;

//相应 的属性

@property (copy) NSString *uniqueIdentifier;


@property (copy, nullable) NSString *domainIdentifier;


@property (copy, null_resettable) NSDate * expirationDate;


@property (strong) CSSearchableItemAttributeSet *attributeSet;


@end


CSSearchableIndex:这个类,我个人理解,类似一个manager的作用,通过它对标签进行增、删、改、查等操作:


@interface CSSearchableIndex : NSObject


@property (weak,nullable) id<CSSearchableIndexDelegate> indexDelegate;


//判断设备是否支持

+ (BOOL)isIndexingAvailable;

//取系统的searchIndex管理者

+ (instancetype)defaultSearchableIndex;

//一般情况下,我们不需要重新创建对象

- (instancetype)initWithName:(NSString *)name;

- (instancetype)initWithName:(NSString *)name protectionClass:(nullable NSString *)protectionClass;


//设置索引标签

- (void)indexSearchableItems:(NSArray<CSSearchableItem *> *)items completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;


//删除指定id索引标签

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


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


//删除所有索引标签

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


@end

目录
相关文章
|
4月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
5月前
|
机器学习/深度学习 JSON 监控
淘宝拍立淘按图搜索与商品详情API的JSON数据返回详解
通过调用taobao.item.get接口,获取商品标题、价格、销量、SKU、图片、属性、促销信息等全量数据。
|
6月前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
4月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
4月前
|
存储 API 数据库
按图搜索1688商品的API接口
本文介绍如何利用阿里云ImageSearch服务实现1688商品的按图搜索功能。通过提取图像特征向量并计算相似度,结合Flask搭建API接口,可快速构建基于图片的商品检索系统,提升电商用户体验。
477 0
|
4月前
|
JSON API 开发者
1688按关键词搜索商品的API接口技术指南
本文介绍如何使用1688开放平台API实现商品关键词搜索,涵盖API概述、权限申请、调用步骤、Python代码示例及注意事项,助力开发者高效集成商品搜索功能,适用于电商自动化、价格监控等场景,内容基于官方文档,确保准确可靠。
484 0
|
4月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
5月前
|
SQL 运维 关系型数据库
【产品升级】Dataphin V5.0版本发布:助力出海业务、增全量一体集成、异步调用API等更多功能等你发现
Dataphin是瓴羊推出的智能数据建设与治理平台,基于阿里巴巴内部实践,提供一站式数据建设与治理能力。V5.0版本研发新增支持Databricks作为离线计算引擎、支持MySQL数据库一键增全量同步、支持管理Hudi、Delta Lake表等;资产运营与消费持续提效,支持批量编辑目录名称及描述、Quick BI仪表板的上架管理等功能,增加资产可用性与盘点效率。
321 8
|
5月前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
127 0
Java Stream API 的强大功能
|
5月前
|
JSON 自然语言处理 监控
淘宝关键词搜索与商品详情API接口(JSON数据返回)
通过商品ID(num_iid)获取商品全量信息,包括SKU规格、库存、促销活动、卖家信息、详情页HTML等。

热门文章

最新文章