iOS9 中允许对这一个,我们只可以在Spotlight中依照

2019-09-13 11:20栏目:大奖888官网登录
TAG:

原稿地址

iOS9新特性 - Search APIs

在IOS9之前,你不得不用spotlight通过app的名字找到呼应的app。但随着iOS9 Search APIs 的宣布,开辟者能够经过在app内部的从头到尾的经过中树立目录,通过搜寻关键字来走入到app钦赐的内容区域。

The 3 APIs

NSUserActivity

The NSUserActivity 在iOS8的 Handoff 使用中有介绍到。到了iOS9中,你能够选拔NSUserActivity寻觅相关的“活跃消息”。你能够提供部分首要词给那些“活跃音信”, 意味着spotlight能够寻觅它们。这么些操作约等于你在浏览网页的时候,有历史记录的作用同样。客户能够因此spotlight快速的开荒近日的“活跃消息”。

Web Markup

Web 马克up 允许 apps 映射它们的故事情节到网页上边,然后方便spotlight在网页中快速搜索内容。Apple的索引器将会扮演爬虫的剧中人物,在网页下边检索这么些被马克up的故事情节。那些音讯在Safari和Spotlight都足以搜寻。

Core Spotlight

Core Spotlight是iOS9中的二个新框架,它同意检索在app中的内容。NSUserActivity在保存客商的历史记录是很有用的;而Core Spotlight能够搜索任何你想要的数码。

使用Core Spotlight APIs

NSUserActivity 和 Web 马克up APIs 相对来说是很轻松采纳的,而 Core Spotlight 是有好几良莠不齐的。为了演示Core Spotlight是什么职业的,我们创建贰个比较轻便的德姆o用来展现朋友列表。然后您点击任性多少个有相恋的人的名字,你能够见见朋友的头像的切实可行消息。在演示具体的流程此前,大家先看看最终效果图。

在示范效果中能够观看,作者在spotlight中搜寻有关朋友音信,能够看出他们的大致消息,然后点击一条音信,便得以跳转到自个儿app中的具体的相恋的人详细情况。

图片 1

 

代码解析:

1. Demo的协会一点也不细略,正是一个导航调控器,根调控器是二个UITableViewController,用来展现朋友名称列表。大家定义为FriendTableViewController。

2. 当点击列表中的三个有恋人名称后,就能跳转到详细的情况页面,我们定义为FriendViewController。

3. 有着的朋友数据消息,大家用一个管理类来保管。大家定义为DataSource。这么些处理类的天职:

1)存款和储蓄全数的爱人数据音讯。

2)保存客商新闻到Core Spotlight的索引器中。

自然,每一条顾客音讯对应一个模型,定义如下:

Person.h

 

@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *identifer;
@property (nonatomic, copy) NSString *icon;
- (instancetype)initWithName:(NSString *)name identifer:(NSString *)identifer icon:(NSString *)icon;
@end

Person.m

 

 

@implementation Person
- (instancetype)initWithName:(NSString *)name identifer:(NSString *)identifer icon:(NSString *)icon {
    if (self = [super init]) {
        self.name = name;
        self.identifer = identifer;
        self.icon = icon;
    }
    return self;
}
@end

 

DataSource.h的措施列表如下:

 

@interface Datasource : NSObject
- (NSArray *)dataList;
- (Person *)findFriendWithId:(NSString *)identifer;
- (void)savePeopleToIndex;
@end

1)dataList方法正是赢得具有的客商列表数据新闻。

 

2)findFriendWithId: 方法正是依据客户Id获取模型数据。

3)savePeopleToIndex正是保存全体顾客数量新闻到Core Spotlight的索引器中。

DataSource.m 文件中的代码

 

@implementation Datasource

- (NSArray *)dataList {
    Person *becky = [[Person alloc] initWithName:@Becky identifer:@1 icon:@becky];

    Person *ben = [[Person alloc] initWithName:@Ben identifer:@2 icon:@ben];

    Person *jane = [[Person alloc] initWithName:@Jane identifer:@3 icon:@jane];

    Person *pete = [[Person alloc] initWithName:@Pete identifer:@4 icon:@pete];

    Person *ray = [[Person alloc] initWithName:@Ray identifer:@5 icon:@ray];

    Person *tom = [[Person alloc] initWithName:@Tom identifer:@6 icon:@tom];

    return @[becky, ben, jane, pete, ray, tom];
}

- (Person *)findFriendWithId:(NSString *)identifer {
    for (Person *p in self.dataList) {
        if ([p.identifer isEqualToString:identifer]) {
            return p;
        }
    }
    return nil;
}

- (void)savePeopleToIndex {
    // prepare
    NSMutableArray *searchableItems = [NSMutableArray array];
    for (Person *p in self.dataList) {
        // Create an attribute set for an item that represents an image.
        CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@image];
        attributeSet.title = p.name;
        attributeSet.contentDescription = [NSString stringWithFormat:@This is an entry all about the interesting person called %@, p.name];
        attributeSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:p.icon]);

        CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:p.identifer domainIdentifier:@com.ios9daybyday.SearchAPIs.people attributeSet:attributeSet];
        [searchableItems addObject:item];
    }

    // save
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
        if (error) {
            NSLog(@error message:%@, error.localizedDescription);
        }
    }];
}

@end

代码的首要部分正是savePeopleToIndex方法,定义的searchableItems正是用来存款和储蓄相关的可照本宣科的音讯;而代码中的CSSearchableIndex的单例方法indexSearchableItems是确实的将searchableItems中的内容存款和储蓄到Core Spotlight中的操作。

 

然后我们看看FriendTableViewController的列表体现页面包车型客车重大代码

 

- (void)viewDidLoad {
    [super viewDidLoad];
    Datasource *dataSource = [Datasource alloc];
    self.dataList = [dataSource dataList];

    [dataSource savePeopleToIndex];
}

此地的savePeopleIndex就将内容存款和储蓄到Core Spotlight中了。

 

前几天你运转程序,那一个多上将会被寄放起来了。当你在spotlight中找找你的恋人,他们将会冒出,效果图如下:

图片 2

那时候尝试点击一项,不过它不会跳转到app的钦点区域,只会跳转到对应的app,因为咱们还从来不点名要跳转的钦点区域。

咱俩得以在调用continueUserActivity代理方法的时候内定app的行事。代码如下:

 

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0) {

    NSString *friendID = userActivity.userInfo[@kCSSearchableItemActivityIdentifier];
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    [navigationController popToRootViewControllerAnimated:NO];

    FriendTableViewController *friendVC = (FriendTableViewController *)navigationController.viewControllers.firstObject;
    [friendVC showFriendWithId:friendID];

    return YES;
}

第1句代码: 获取你在spotlight中点击的对象的id。

 

第2、3句代码: 获取到根的领航调控,何况pop掉栈中兼有的调节器。

第4句代码: 跳转到app的钦点地点。

此处的代码能够能够开掘,以前我们保留到Core SpotLight索引器中的内容未来得以采纳userActivity.userInfo字典实行获取了。大家所关注的就是friend Id,它是被封存到索引器中作为Person这些指标的kCSSearchableItemActivityIdentifier.

正如您所见的,左上角有三个 Back to search选项,客商能够点击这里再次来到客商列表。

那篇文章中,并不曾关联到索引器的去除操作,想要通晓删除的具体操作,能够参照他事他说加以考察以下的几个点子:

 

deleteSearchableItemsWithIdentifiers
deleteSearchableItemsWithDomainIdentifiers
deleteAllSearchableItemsWithCompletionHandler

 

- Search APIs 在IOS9在此以前,你只可以用spotlight通过app的名字找到相应的app。但随着iOS9 Search APIs 的颁发,开辟者可以透过在app内部的内容...

本文翻译自Chris Grant的《iOS 9 Day by Day :: Day 1 :: Search APIs》(https://www.shinobicontrols.com/blog/ios9-day-by-day-day1-search-apis)。多谢克莉丝Grant的费力职业!

在 iOS9 在此以前,你不得不在 spotlight 中输加入关贸总协定协会键字,比如选用名字,搜索到应用。在 iOS9 中苹果提供了一套 Search APIs。允许开拓者选取接纳的内容,索引起来供 spotlight 进行查找,同期能够设置在 spotlight 中的体现效果,以及点击之后什么响应。

iOS 9在此以前,大家只可以在Spotlight中依据名字寻找应用程序。苹果在iOS 9上引进了寻觅API,允许开拓者在利用内钦赐能够被Spotlight索引和表现的内容。

3个新的查找相关API

三个API

NSUserActivity

NSUSerActivity

iOS 8引入NSUserActivity API是为着Handoff,而iOS 9允许大家对活动张开检索。给这几个移动设置元数据(Metadata)后,Spotlight就足以对它们进行索引。全数的移动会跟浏览网页同样造成一个历史记录栈。客户能够在Sptlight里快捷张开已部分活动。

NSUserAcitivity 在介绍 iOS8 的 Handoff 时引入,iOS9 中允许对那些activities 进行查找。你能够提供元数据给这个 activities, 那意味 sptlight 能够索引那些内容。类似于浏览器体现网页的做法(你张开过的野史页面被记录了下去),顾客可以神速的在 Spotlight中检索,展开近日的 activities。

Web Markup

Web 马克up允许应用程序将它们的内容映射到三个网址,进而在Spotlight里举办索引。顾客无需在配备上设置Spotlight里出现的采纳。苹果的索引器能够抓取我们的网址来赢得所需的音信,抓取结果通过Safari和Spotlight提须求顾客。

在一向不安装使用的设备上举办展示是二个那个首要的风味,那能扩展大家的运用在潜在顾客前的揭露度。应用程序暴光给寻找API的深浅链接被寄放在苹果的云索引服务器上。更加多关于Web 马克up的音讯请查看《Use Web Markup to Make App Content Searchable》。

Web Markup

CoreSpotlight

CoreSpotlight是贰个新的iOS 9框架,它同意大家在应用程序里对任何内容开展索引。NSUserActivity也得以用于保存客商历史。本质上它给大家提供了访谈CoreSpotlight索引的力量。

Web 马克up 允许应用镜像自个儿的源委,并在 Spotlight 中树立目录。顾客并无需应用设置在团结的设备上来体现搜索结果。苹果的爬虫本人去抓取你网址上打了 markup 的从头到尾的经过,这么些剧情稍后会提供给 Safari 和 Spotlight。

使用Core Spotlight API

NSUserActivity与Web 马克up API用起来要比CoreSpotlight要简明。下边大家由此一个简易的采纳来声明Core Spotlight API如何职业。那么些程序会展现一个密友列表,当点击名字能够看看三个相片。能够在GitHub上找到示例代码。

图片 3

应用程序使用Storyboard创设分界面,个中带有三个FriendTableViewController突显老铁列表,而FriendViewController展示好友详细的情况。

图片 4

知音信息保存在名叫Datasource的类中。大家在这一个类里创造保存好朋友新闻的数据模型,何况带有操作Core Spotlight索引的代码。

先是,大家重写Datasource类中的init()措施,在里边创制贰个Person对象的数组。这么些数量足以储存在数据库恐怕后台服务器,这里只是为着演示,所以只是选择部分非常轻巧的测验数据。

override init() {
    let becky = Person()
    becky.name = "Becky"
    becky.id = "1"
    becky.image = UIImage(named: "becky")!

    ...

    people = [becky, ben, jane, pete, ray, tom]
}

例如数据被贮存在在people数组里,Datasource就以及可以选用了。

FriendTableViewController在体现亲密的朋友列表前要先创立七个Datasource对象。

let datasource = Datasource()

cellForRowAtIndexPath函数中显示好朋友名称:

let person = datasource.people[indexPath.row]
cell?.textLabel?.text = person.name

实则,这么些着重的特色,以至并无需顾客安装了你的利用在自身的配备上。这样能够将您的采纳显示给更加多的潜在客商。苹果的云服务,将您的运用的内容索引起来,让您的行使和 public Search APIs 保持三个深度连接。越多关于Web Markup 的开始和结果,能够翻阅苹果官方的文书档案 《Use Web 马克up to Make App Content Searchable》。

保存people入口到Core Spotlight

上边我们运用iOS 9中新的API来将数据保存到Core Spotlight中。回到Datasource类,定义四个名字为savePeopleToIndex的函数。FriendTableViewController在视图被加后得以调用该措施。

savePeopleToIndex方法中遍历people数组中的各个人,而且创办对应的CSSearchableItem,然后将它们存款和储蓄在一个临时数组searchableItems中。

let attributeSet = CSSearchableItemAttributeSet(itemContentType: "image" as String)
attributeSet.title = person.name
attributeSet.contentDescription = "This is an entry all about the interesting person called (person.name)"
attributeSet.tumbnailData = UIImagePNGRepresentation(person.image)
let item = CSSearchableitem(uniqueIdentifier: person.id, domainIdentifier: "com.ios9daybyday.SearchAPIs.people", attributeSet: attributeSet)
searchableItems.append(item)

末了一步是在私下认可的CSSearchableIndex上调用indexSearchableItems。这一步实际上是将数据保存到CoreSpotlight,那样顾客就足以在Spotlight的检索结果中观察它们了。

图片 5

CoreSpotlight

响应客户挑选

当顾客观察Spotlight中的寻觅结果后,有十分的大只怕会点击它们。可是这么做的结果只是展开了使用的主分界面。倘诺希望在点击了一个情人后,展现它的详细意况,大家还索要做越来越多的业务。首先须求定制AppDelegate中通过continueUserActivity开辟应用后推行的UIApplicationDelegae的方法。

下边是一体艺术的实现:

func appliction(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    //查找用户ID
    let friendID = userActivity.userInfo?["kCSSearchableItemActivityIdentifier"] as! String

    //查找根视图控制器并且显示用户信息
    let navigationController = (window?.rootViewController as! UINavigationController)
    navigationController.popToRootViewControllerAnimated(false)
    let friendTableViewController = navigationController.viewControllers.first as! FriendTableViewController
    friendTableViewController.showFriend(friendID)

    return true
}

笔者们见到从前经过indexSearchableItems函数寄存在CoreSpotlight索引里的数据,能够从userActivity.userInfo字典中获得到。大家感兴趣的数码是各样亲密的朋友的ID,它被当作kCSSearchableItemActivityIdentifier仓库储存在目录中。

一经大家将userInfo中的数据抽出来,就足以去获取应用程序的领航调节器,而且跳转到根视图,然后通过friendTableViewController里的showFriend艺术呈现好朋友详细情况。结果如下:

图片 6

在荧屏的左上角有贰个“重返寻找”的选项,点击能够回到寻觅分界面。

CoreSpotlight 是 iOS9 提供的新 Freamework,允许你索引你的运用内容。当使用它的 Api,你能够低价的将你欢快的数额,索引起来,NSUserActivity 援救存款和储蓄顾客的采纳历史。它令你的使用能够底层的和 CoreSpotlight 进行三番五次,将引得存款和储蓄在顾客设备上。

亲自过问计算

在上面的演示代码里,大家得以看看什么样将应用程序的数据整合到CoreSpotlight目录。然后Spotlight如何将大家指引到程序中对应的页面。

咱俩还平素不提到到怎么样将数据从索引中移除,但一而再保持索引中的数据为流行的很要紧。如若急需从CoreSpotlight中移除老的数码,请查看deleteSearchableItemsWithIdentifiersdeleteSearchableItemsWithDomainIdentifiersdeleteAllSearchableItemsWithCompletionHandler方法。

使用 Core Spotlight APIs

好人民的显要

将尽恐怕多的剧情索引到Spotlight和Safari看起来很科学,但如此做事先绝对要记得三思。成为多个对iOS生态系统有益的好人民不唯有能够令你的顾客体验越来越好,况且会挑起苹果的引人注目。它们做了相当多职业去追踪、剖析怎么样污源创立者,并将它们放到最末尾。

NSUserActivity 和 Markup 更简约和轻易选用部分, CoreSpotlight 则绝对复杂一些。为了示范Core Spotlight APIs 是怎么工作的,让大家来创立三个简便的使用。那几个利用体现自己的三个爱人列表,点击朋友的名字可以查阅照片。你能够在 Github 上找到源文件。

越来越多信息

至于寻觅API的更多新闻,建议观察WWDC的Session 709:《Introducing Search APIs》。也能够翻阅《NSUserActivity Class Reference》和《CoreSpotlight文档》。本文的以身作则代码能够在Github获取到。

图片 7

大卫营教育

大卫营教育(Dive In Education),专一做IT职业教育!紧跟时流,不作伪!不忘初心!

  • 官网:David营教育http://www.diveinedu.com
  • 在线录制:大卫营大学http://v.diveinedu.com
  • 问答网:用尽全力俱乐部http://divein.club

本条利用有二个简短的 storyboard, 富含八个 controller, FriendTableViewController 呈现三个列表,每行展现叁个爱人的名字, FriendViewController 呈现朋友的详细新闻。

图片 8

第一,大家重载 Datasource 类的 init() 方法,创设和仓储多少个暗含 Person 对象的数组。你只怕希望从数据库中,或许您的服务器加载数据,这里只是为着彰显,所以大家选拔成立轻巧的固步自封数据。

图片 9

若果数据存款和储蓄到了 People 那一个数组中,Datasource 类就筹算好能够用了。

今后数据计划好了,在FriendTableViewController 中开创贰个 instance, 给 table 的 cell 来呈现数据。

图片 10

在 cellForRowAtIndexPath 方法中,展现内容

图片 11

今昔,模拟数据已经希图好了。我们用 iOS9 提供的新 API 把她们存款和储蓄到 Core Spotlight 中。回到Datasource 类中,大家创制多少个 savePeopleToIndex 方法。那个能够在FriendTableViewController的视图加载成功后调用。

图片 12

终极一步是调用 CSSearchableIndex的indexSearchableItems 方法。它会真的的把 items 存款和储蓄到CoreSpotlight 中,那样顾客就能够寻找和展示出结果了。

图片 13

好了,当您运维一下你的使用后,数据就索引起来了,当您在 spotlight 中查找时,朋友的音讯出来了。

图片 14

响应顾客的当选事件

今昔顾客观望了搜寻的结果,希望她们会点击一下。不过,尽管今后他们点击了,会怎样啊?只会展开你的运用。如果你指望跳转至呈现顾客点击的爱人的详细新闻,你还索要再做一小点做事。当顾客用点击的秘技打开应用时。,大家得以经过 UIApplicationDelegate 中的continueUserActivity,具体规定利用的一言一动。

图片 15

如你所见,我们事先,通过 indexSearchableItems 方法,存款和储蓄在 CoreSpotligh t中的音讯,未来得以让 userActivity.userInfo 字典使用了。大家独一感兴趣的是 friend ID, 以前大家 items 的 kCSSearchableItemActivityIdentifier 存款和储蓄在了目录中。

例如我们从 userInfo 字典中获得数码,大家找到应用的 navigation controller, 然后退到root(不用动画,以防客商开掘异样),然后调用 showFriend 方法。小编不详细讲那个了。由此可知,大意上正是依赖 friend ID, 找到 friend 的详细音讯的数额,然后 push 了二个新的 ViewController 来展示他。那就是所有的操作了,现在,当顾客点击一个结实时,应用被张开,同一时候到了这些心上人的详细页面。

图片 16

如你所见,在利用左上角有三个“回到搜索”的开关,能够让客户一直便捷的回到到Spotlight,当然也足以在运用中,点击标准按键,来切换页面。

Demo 总结

在地点的demo中,大家来得了,多么简单就足以把施用的内容索引到 CoreSpotlight 中,对于用户寻找一定内容多么有帮忙,多么庞大的抓住客商展开你的行使。

咱俩从未出示什么从索引中移除数据。那对你的话很主要,要时时保持 spotlight 中的数据是前卫的。要领悟怎么移除旧的多寡,能够翻阅相关文档,查看deleteSearchableItemsWithIdentifiers, deleteSearchableItemsWithDomainIdentifiers 和 deleteAllSearchableItemsWithCompletionHandler那八个艺术。

好人民准绳的要紧

看起来存款和储蓄尽也许多的剧情到 Spotlight 和 Safari 中是个好主意,可是指望大家能够在 iOS 的生态系统中做个好百姓,遵从让顾客欢快的法规。而且 Apple 也会小心到您的一坐一起,他们设置了连带的条条框框,一旦发觉恶意的行使 Spotlight,你的故事情节很轻易被移到找出的末段。

拉开阅读

想领悟更多的关于Search APIs的内容,推荐您看看WWDC 二零一四的 session 709, Introducing Search APIs. 你也会对阅读文书档案《NSUserActivity Class Reference》和《documentation for CoreSpotlight》感兴趣。

末尾,别忘了,倘诺您想试一试我们刚成立的demo,能够到Githubthub中去下载。

越多内容,请移步 iOS9 Day-by-Day.

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于大奖888官网登录,转载请注明出处:iOS9 中允许对这一个,我们只可以在Spotlight中依照