iOS9开放的新API--Spotlight使用指南_IOS

1.Spotloight是什么?

  Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。

  Demo演示

  

2.如何集成Spotlight

  a.添加所需要的框架 

复制代码 代码如下:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
#import <CoreSpotlight/CoreSpotlight.h>
#import <MobileCoreServices/MobileCoreServices.h>
#endif

  注,很多APP都是支持iOS9以下的,因此加入#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000,可以解决iOS9以下设备运行崩溃的问题

  b.创建CSSearchableItemAttributeSet 对象

复制代码 代码如下:

CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
   
    attributeSet.title = spotlightTitle;                // 标题
    attributeSet.keywords = keywords;                   // 关键字,NSArray格式
    attributeSet.contentDescription = spotlightDesc;    // 描述
    attributeSet.thumbnailData = photo;                 // 图标, NSData格式

  // 把图片转换成NSData的方法
  UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]

  c.创建可检索条目CSSearchableItem

复制代码 代码如下:

// spotlightInfo 可以作为一些数据传递给接受的地方
// domainId      id,通过这个id来判断是哪个spotlight
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];

  d.添加检索入口

复制代码 代码如下:

[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {
     if (error) {
        NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);
     }
}];

  ========完整代码========

复制代码 代码如下:

- (void)insertSearchableItem:(NSData *)photo spotlightTitle:(NSString *)spotlightTitle description:(NSString *)spotlightDesc keywords:(NSArray *)keywords spotlightInfo:(NSString *)spotlightInfo domainId:(NSString *)domainId {
   
    CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
   
    attributeSet.title = spotlightTitle;                // 标题
    attributeSet.keywords = keywords;                   // 关键字,NSArray格式
    attributeSet.contentDescription = spotlightDesc;    // 描述
    attributeSet.thumbnailData = photo;                 // 图标, NSData格式
   
    // spotlightInfo 可以作为一些数据传递给接受的地方
    // domainId      id,通过这个id来判断是哪个spotlight
    CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];
   
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {
        if (error) {
            NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);
          
        }
    }];
}

  ========加载本地图片的使用方法========

复制代码 代码如下:

[self insertSearchableItem:UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]) spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];

  ========加载网络图片的使用方法========

复制代码 代码如下:

 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://hiphotos.baidu.com/doc/pic/item/eaf81a4c510fd9f905f61934262dd42a2934a48e.jpg"]];
        [self insertSearchableItem:data spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];
    });

  ========删除所有spotlight的方法========

复制代码 代码如下:

[[CSSearchableIndex defaultSearchableIndex] deleteAllSearchableItemsWithCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error.localizedDescription);
}
}];

  ========删除指定的spotlight的方法========

复制代码 代码如下:

[[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithDomainIdentifiers:@"domainId" completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error.localizedDescription);
}
}];

  ========点击spotlight后的响应方法========

复制代码 代码如下:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
// 接受事先定义好的数值,如果是多个参数可以使用把json转成string传递过来,接受后把string在转换为json
NSLog(@"传递过来的值%@", uniqueIdentifier);
}
return YES;
}

  备注:

复制代码 代码如下:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
  // 相关spotlight的方法等
#endif

// Spotlight支持iOS9以上设备运行,对与低版本的设备需加入这个防止崩溃问题

时间: 2024-08-03 06:37:34

iOS9开放的新API--Spotlight使用指南_IOS的相关文章

百度发布 PaddlePaddle 新 API;微软更新 Linux 平台虚拟机 DSVM 等 | AI 开发者头条

▲ 内容预览 百度发布 PaddlePaddle 新 API,以及免费手册<使用 PaddlePaddle 进行深度学习> 微软更新 Linux 平台的数据科学虚拟机(DSVM) 谷歌发布机器学习数据清理服务 Cloud Dataprep 每日推荐阅读 什么是数据虚拟化:一个数据的大超市 █ 百度发布 PaddlePaddle 新 API 昨日,百度宣布已完成 PaddlePaddle 新 API 的内测版本.PaddlePaddle 是百度研发的深度学习开源平台,于去年 9 月对公众开放,称

B2B电子商务:迎来免费开放的新时代

据艾瑞咨询统计数据显示,2011年中国中小企业B2B电子商务营收规模达131亿元,比2010年增长35.1%,呈现出稳定增长态势,但同比增幅下滑明显,低于2010同期47.4%的增长率.阿里巴巴.焦点科技.生意宝等国内主要B2B电子商务上市企业日前先后公布的业绩显示,2011年较以往年度的增长均出现不同程度的下降,各大运营商的业绩普遍欠佳,也在一定程度上表明当前B2B业务模式正逐渐遭遇发展瓶颈,面临转型压力. 尽管中国在线B2B电子商务经过了十三年的发展,但其主要盈利模式--"付费会员制&quo

Google+开放第一批API接口:不能访问交友圈

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 9月16日消息,据国外媒体报道,Google+现已开放第一批API编程接口,但是只能读,且不能访问交友圈. 大约一周前,媒体曾预测Google+的API开放至少还要等上几个月.然而预测后的第二天,Google便募集了"可信赖"的开发者对Google+的API进行了内部测试.Google当时很不喜欢媒体公布这些消息,并试图找

安卓新功能传闻:新API、企业应用、数据加密

据消息人士透露,作为谷歌下一个Android版本开发的一部分,谷歌正致力于开发一些特定的功能,以能够在黑莓.苹果和三星面前成为领头羊,谷歌在这方面的主要努力是:增加一些功能,让Android在商业和企业买家眼中具有吸引力. Android系统总裁Sundar Pichai目前正主动提升Android系统的安全性,可能的功能包括直接在芯片上存储敏感信息.强大的数据加密以及需要额外身份验证(像指纹这样的生物特征信息)应用程序的兼容性. 而一些新API,主要是用于管理设备.远程应用程序(比如能够远程消

淘宝的无线逻辑:两腿走路 开放与新商业生态

中介交易 SEO诊断 淘宝客 云主机 技术大厅 这是一个看上去既熟悉.又近乎完全陌生的未知市场.淘宝需要做的,是以更开放的心态去主动融合各方力量. 5月初,一个普通的周二晚8点,杭州的淘宝无线办公室里依然人来人往,墙上贴着振奋人心的企业标语,还有一张很引人注目的招聘海报--"无线事业部,推荐有奖",招聘对象涉及从产品开发到运营的各各环节.据说自2009年成立发展至今,淘宝无线一共也不过100余人,虽然眼下急需用人,但阿里巴巴对新员工某些素质的严格要求,再加上移动电子商务的特殊性,淘宝无

《指环王OL》后续版本将开放一个新地区:伊宁威治

多玩网讯 中华网游戏集团(CDC Games)旗下魔幻网游<指环王OL>后续版本中,将会开放一个新地区:伊宁威治.而现在,这个新地区已经在美服正式开放,想知道这个新地区都有哪些内容吗?今天就带大家一起来游览一下这个"被遗忘的国度". 游戏中,伊宁威治位于埃里吉翁的以南.登兰德以北与埃里吉翁接壤,所以在伊宁威治可以感受到一些埃里吉翁的氛围.但是其本身也有很多自己的特色,从大雪飘飞的崇山峻岭,到红色的峭壁岩石,再到旷野中零落的村庄,甚至还可以看到一些刚铎特色的建筑.[page]

Snapchat发布新API来提升其广告领域地位

Snapchat在其广告API中新发布了一些重要的自助服务功能.这些新增功能可以让需要投放广告的公司自助地购买广告,也可以发挥高级定向广告的优势. 之前Facebook等公司已提供了自助广告API并与AB测试工具进行了对接,这可以让广告主针对用户群使用不同场景进行尝试,进而了解最有效的广告投放方式.同时他们还提供了工具让广告主可以通过编程的方式来创建理想的广告.Snapchat的这次更新可以助其赶上这些竞争对手. 如今,编程式的广告投放正在以极快的速度增长.根据eMarketer的报告,2016

OSRAM Sylvania 向开发者开放 Lightify REST API

OSRAM Sylvania最近宣布将为开发者社区提供开放的Lightify REST API,开发者可将其集成于自己的iOS和Android应用,以及网站中Lightify是一种涵盖硬件.云,以及移动设备的物联网(IoT)体系,通过OSRAM的iOS和Android免费应用,可以使用移动服务控制Lightify LED灯泡的灯光. 例如,最近有人使用Lightify为欧洲歌唱大赛(Eurovision Song Contest)增色添彩:瑞典斯德哥尔摩的七座地标式建筑通过不同色彩体现电视观众对

PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用基础

1.新浪微博开放平台(http://open.weibo.com/wiki/index.php/Quickstart) 开放的是什么:开放平台开放给开发者的是每一个用户的用户关系,开发者不在向传统应用那样面对单个开发者而是面对用户身后的整个好友圈.每一个API都是围绕好友与好友之间的交流来提供相关的功能,如发送微博,查看好友资料等等. 为什么要使用开放平台?开放平台可以加快应用的推广.每个用户可以影响到周围的好友,一旦应用真的优秀,用户可以方便的推荐给好友,好友又可以再推荐给他的好友.开放平台让