在WWDC 2015会议上,苹果官方公布了iOS9。除开许多新的特性和增强功能,这次升级也给了开发者们一个机会让他们的app里的内容能通过Spotlight搜索功能被发现和使用。在iOS9中可用的新APIs允许你去索引APP里面的内容或者界面状态,通过Spotlight来让用户使用。 这些新的搜索APIs的三大组件为:
NSUserActivity 类, 它是为可被看见的APP内容而设计的
Core Spotlight 框架, 为任何APP内容而设计的
web markup,为这一类型的APP设计的,就是APP的内容在某个网站上有镜像
在这里,我将会向你展示可以怎样在你的应用中使用NSUserActivity类以及 Core Spotlight 框架。
绑定数据源,使其能被搜索
- (void)saveFriend {
NSMutableArray <CSSearchableItem *> *searchableItems = [NSMutableArray array];
// 将Friend里的每个属性绑定到CSSearchableItemAttributeSet中
for (Friend *friend in self.friendArray) {
CSSearchableItemAttributeSet *attribute = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"image"];
attribute.title = friend.name;
attribute.contentDescription = friend.webUrl;
attribute.thumbnailData = UIImagePNGRepresentation(friend.image);
CSSearchableItem *item = [[CSSearchableItem alloc]initWithUniqueIdentifier:friend.f_id domainIdentifier:@"hahahaha" attributeSet:attribute];
[searchableItems addObject:item];
}
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"%@",error);
} else {
NSLog(@"被点击了");
}
}];
}
在App delegate里实现下面的方法能够处理自定义事件
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
NSString *f_id = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
ViewController *vc = (ViewController *)self.window.rootViewController;
[vc loadImage:f_id];
return true;
}
具体请看Demo