SpotLight和NSUserActivity的使用
2016-05-01 22:55
357 查看
1.1 NSUserActivity的基本使用
NSUserActivity一开始是专门用于IOS8的handoff功能
NSUserActivity *activity2 = [[NSUserActivity alloc]initWithActivityType:domainIdentifier];
Handoff是iOS8新出的一个功能,它可以在你的iPhone、iPad和Mac上自由切换未完成的邮件,未制作完的文档,在有人拨打你的 iPhone,你正在使用iPad,这时候就不需要放下iPad区接听电话,而可以直接在iPad上接听。这些功能可能在不经意间就方便了我们的生活。
现在也可以通过这个类来使用到我们的App搜索上
用到SpotLight的相关API首先需要我们添加两个FrameWork
同时需要我们导入头文件
当需要有存一些参数如进房信息等方便接下来的操作,我们可以通过
设置NSUserActivity 里面的 userInfo属性,userInfo是一个字典,方便存入我们的需要的参数信息。
NSUserActivity使用的时候需要 self.activity= activity 强引用,然后再执行[activitybecomeCurrent];添加到索引库里面去。
NSUserActivityDelegate会在activity存进去前会回调下面的方法
-(void)userActivityWillSave:(NSUserActivity*)userActivity
{
}
为了提高我们的索引的易搜索性,我们可以通过设置keywords。
并通过设置eligibleForPublicIndexing和eligibleForSearch来动态显示或者隐藏该索引。
[[CSSearchableIndexdefaultSearchableIndex] deleteAllSearchableItemsWithCompletionHandler:^(NSError){
}
NSUserActivity 删除需要把指针置为nil 而且执行上面的方法
当搜索出来的结果并且点击进去的时候,会回调AppDelegate的这个方法,同时我们可以获得userActivity中的所有参数信息,并可以通过该参数信息来进行一系列的操作。
-(BOOL)application:(UIApplication*)application continueUserActivity:(NSUserActivity *)userActivityrestorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
1.2显示更多信息
CSSearchableItemAttributeSet
为了显示更多的信息,我们用到了CssearchableItemAttributeSet这个类
通过以下语句来使得userActivity显示更多的信息
userActivity.contentAttributeSet= attributeSet
显示的图片
attributeSet.thumbnailData= UIImageJPEGRepresentation([UIImage imageNamed:@"123"], 0.9);
显示的内容摘要
attributeSet.contentDescription= @"sssssdd"
显示标题(上下同时设置的时候会以上面为标准)
attributeSet.title= @"wo ai wzy123"
是否支持打电话
attributeSet.supportsPhoneCall = @1;
attributeSet.phoneNumbers = @[@"13189254221"];
是否支持导航(同时这个需要设置经度和纬度)打开后会直接进入到地图搜索
attributeSet.supportsNavigation= @1;
attributeSet.latitude= @1;
attributeSet.longitude= @2;
2.1 CSSearchableItem 的基本使用
这是IOS9以上才能用的一个类,CoreSpotlight框架上的
苹果Spotlight处于全局搜索的位置,在其下方将会有一个全新的界面,在顶端搜索栏这里你可以通过键盘输入文字或者用Siri语音下达命令。整个界面显示了最近通话过的联系人、使用过的应用程序,以及你可能感兴趣的去处
使用CSSearchableItem的时候同样也需要我们先定义一个
CSSearchableItemAttribute
CSSearchableItemAttributeSet*attributeSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:(NSString *) kUTTypeContact];
attributeSet.title = @"timefwj";
attributeSet.contentDescription =@"helllocococcocococ";
attributeSet.supportsPhoneCall = @1;
attributeSet.phoneNumbers =@[@"13380886920"];
attributeSet.emailAddresses =@[@"306788159@qq.com"];
attributeSet.keywords =@[@"hellod"];
然后通过上面的CSSearchableItemAttribut和UniqueIdentifier和一个domainIdentifier来初始化一个CSSearchableItem
CSSearchableItem*item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"kg.fwj"domainIdentifier:@"kg.fwj1" attributeSet:attributeSet];
与上面的UserActivity不同的是,CSSearchableItem 不能存参数到某一个容器里面去,当点击搜索出来的结果后,同样是回调AppDelegate里面的方法
通过以下方法添加到容器里面去
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * _Nullable error) {
}];
-(BOOL)application:(UIApplication*)application continueUserActivity:(NSU
4000
serActivity *)userActivityrestorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
通过上面的方法我们同样可以获得一个userActivity,这个userActivity 只拥有@"kCSSearchableItemActivityIdentifier"一个键,通过这个值可以获得上面初始化CSSearchableItem中UniqueIdentifier
混用的时候通过判断activityType来确定是userActivity还是CSSearchableItem
ifuserActivity.activityType == Employee.domainIdentifier,
let activityObjectId =userActivity.userInfo?["id"]
as? String {
//1
objectId = activityObjectId
}else if userActivity.activityType ==
CSSearchableItemActionType,
let activityObjectId = userActivity
.userInfo?[CSSearchableItemActivityIdentifier] as? String {
//2
objectId = activityObjectId
}
2.2 CSSearchableIndex 的基本使用
这个类是负责把初始化好的CSSearchableIndex添加到索引库中去,添加进去后就可以通过SpotLight搜索出来
[[CSSearchableIndexdefaultSearchableIndex] indexSearchableItems:@[item]completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@",error.localizedDescription);
}
}];
通过UniqueIdentifier或者domainIdentifier 来删除CSSearchableItem 这也是和UserActivity不同的地方,UserActivity删除的时候并没有不可以通过标识来删除
[[CSSearchableIndexdefaultSearchableIndex] deleteSearchableItemsWithDomainIdentifiers:@[@"KG.TestSpotlight"]completionHandler:^(NSError * _Nullable error) {
if(error)
{
NSLog(@"%@",error);
}
}];
[[CSSearchableIndexdefaultSearchableIndex] deleteSearchableItemsWithIdentifiers:@[@"kg.fwj"]completionHandler:^(NSError * _Nullable error) {
}];
批量导入CSSearchableItem
//批量的时候可能出现问题,然后获取到ClientState来确定从哪里重新开始添加进去
这时需要new一个CSSearchableIndex出来而不是用本来的[[CSSearchableIndex defaultSearchableIndex]
CSSearchableIndex *index = [CSSearchableIndexnew];
[index fetchLastClientStateWithCompletionHandler:^(NSData *_Nullable clientState, NSError * _Nullable error) {
NSLog(@"%@",clientState);
[index beginIndexBatch];
[indexindexSearchableItems:@[item,item2] completionHandler:nil];
[indexdeleteSearchableItemsWithIdentifiers:@[] completionHandler:nil];
[indexendIndexBatchWithClientState:clientState completionHandler:^(NSError * _Nullableerror) {
}];
}];
3.1 Spotlight Index Extension
A Core Spotlight app extension provides your app theopportunity to run maintenance operations on its index when the app is notrunning. In the event your app's index is lost or did not properly save thesystem may call your extension
to perform its duty.
Core Spotlight app的扩展提供了您的应用程序的机会,运行维护操作时,该应用程序的索引是不运行。在事件中,您的应用程序的索引是丢失或未正确保存系统可调用您的扩展来执行它的职责。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- APP添加CNZZ统计插件教程 Android版添加phonegap
- C++深度优先搜索的实现方法
- 基于文本的搜索
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- 使用Sphinx对索引进行搜索
- asp 多关键词搜索的简单实现方法
- C#使用foreach语句搜索数组元素的方法