iOS9 Search API 详解

SearchAPI是什么

iOS 9.0 系统以后,下拉屏幕或者向右滑到最后会显示"spotlight"页面(不支持以下可以升级到iOS9的设备:iPhone 4S,iPad 2,iPad第三代,iPad mini, iPod touch第5代)

spotlight.png

在搜索栏中搜索关键词,会显示不同app的内容,如图一

图一.png

点击『豆瓣』一栏里的第一行,直接跳入了『豆瓣』app,显示了『荒野猎人』的页面

图二.png

这就是SearchAPI的一个用法。

官方文档App Search Programming Guide中的介绍是

Search in iOS 9 gives people great ways to access information inside of your app, even when it isn’t installed. When you make your content searchable, users can access activities and content deep within your app through Spotlight and Safari search results, Handoff, Siri Suggestions, and Reminders. Making your content searchable helps you enhance the user experience of your app and improve its discoverability.

iOS 9 的搜索功能为人们获取app中的信息提供了极大的便利,即便是在该app并未安装的情况下。 当你的app中的内容标记为可搜索时,用户可以通过Spotlight,Safari,Handoff,Siri Suggestion ,Reminders来获取到这些页面和内容。让你的app的内容可以被搜索到,这能够帮助用户发现你的app,并且提升用户体验。

App search is easy for you to adopt and customize. You don’t need any prior experience with implementing search, and you control what content gets indexed, which information to show in search results, and where the user goes after tapping a result related to your content.

App search 功能很容易使用和定制。你自己控制哪些内容是被标记为可搜索的,哪些信息是展示在搜索结果中(spotlight,safari等),用户点击了你的搜索结果之后页面跳去哪里,并不需要在此之前有过implementing search的经验。

iOS 9 中隐私性是一个基本的特征。为了在保护用户隐私数据的情况下给用户最好的搜索体验,这里有两种索引(index)方式来存储可被搜索的内容。你可以使用各种搜索相关APIs来对每个item指定合适的索引(index),因此,明白每种索引(index)是如何工作的就至关重要。

iOS 9 provides the following indexes:
A private on-device index. Each device contains a private index whose information is never shared with Apple or synced between devices. When you make an item available in a user’s on-device index, only that user can view the item in search results.
Apple’s server-side index. The server-side index stores only publicly available data that you’ve marked appropriately on your website

iOS 9 提供了两种索引方式:
  • 私有的设备侧索引。每个设备包含私有的索引,被其索引的信息永远不会跟Apple共享或者在设备之间同步。当一个条目被标记为用户侧索引,只有该设备的用户才能在搜索结果中看到该类目。
  • Apple 服务器侧索引。服务器侧索引只存储,你的网站上的,已经恰当的标记为公开可见的数据。
iOS 9 提供了一些APIs:
  • NSUserActivity类中新增了方法和属性。这些可以帮助你索引用户在app的活动,比如visiting a navigtion point ,创建和查看内容。
  • Core Spotlight framework。它提供的APIs能把app特定内容添加到用户侧索引,并且开启跳入到你的app的deep links。(所谓deep link 指的是点击spotlight或者safari的搜索结果,跳进你的app中的指定页面)
  • Web markup。这个能把相关的web 内容可搜索化,帮助你丰富用户的搜索体验。

如何选择合适的APIs?

官方文档给出了下面的信息。

It’s recommended that all apps use NSUserActivity and that they support Handoff. Using the search-related properties of NSUserActivity is the best way to show users the information they care about and to improve the ranking of your search results. As users perform activities in your app, you use NSUserActivity to add the item to the on-device index. By default, an item represented by an NSUserActivity object is private, which means that it is added to the on-device index. If your content includes activities that all users can view, you identify them as eligible for public indexing. Learn more about using NSUserActivity in Index Activities and Navigation Points.

If your app handles persistent user data, such as documents, photos, and other types of content created by or on behalf of users, use the Core Spotlight APIs to index the content. Unlike NSUserActivity, Core Spotlight does not require users to visit the content in order to index it. In addition, you can use CoreSpotlight APIs to index content at any point, such as when the app loads. Note that Core Spotlight helps you make items searchable in the private on-device index; you don’t use Core Spotlight APIs to make items publicly searchable. Learn more about using Core Spotlight APIs in Index App Content.

If your app hosts some or all of its content on a website, use web markup to let Apple’s web crawler (calledApplebot) index your content in Apple’s server-side index and make it available to all iOS users in Spotlight and Safari search results. Learn more about using web markup to make your web content searchable in Mark Up Web Content. Note that search results generated by web markup are shown in countries that are supported by Spotlight Suggestions.

苹果推荐所有app 都使用NSUserActivity 来提供Handoff功能。使用NSUserActivity中搜索相关的属性,是展示用户关心的信息,提升在搜索结果中的排名的最好的方式。用户在你的app中操作的时候,你使用NSUserActivity把当前活动增加到用户侧索引中。默认情况下,使用NSUserActivity抽象的条目是私有的,这意味着它被存储在用户侧索引中。如果你的内容中包括所有用户都可见的活动,你应该把这些内容声明为公开。点击Index Activities and Navigation Points查看更过关于如何使用NSUserActivity的信息。

如果你的app操作了持久化的信息,比如文档,图片,其他类型的(被用户或者为了用户创建的)内容,那你应该使用Core Spotlight APIs来索引它们。不同于NSUserActivity,Core Spotlight并不要求先让用户访问内容才能索引这些。另外,你可以使用CoreSpotlight APIs在任何节点索引数据,比如在app加载的时候。值得注意的是,使用Core Spotlight标记的数据都是用户侧的,你并不能把item标记为公开可搜索的。点击Index App Content查看更多关于使用Core Spotlight APIs的信息。

如果你的app在网站上托管部分或者全部数据,使用web markup 可以让Apple的网页爬虫(叫做Applebot)把内容索引到Apple服务器侧,这使得这些内容在所有iOS 用户的Spotlight 和Safari搜索结果中都是可见的。请注意:使用web markup生成的搜索结果会展示在Spotlight Suggestions支持的国家。

使用NSUserActivity的索引声明为公开内容有什么作用?我在官方文档里找到这样一段话

In iOS 9, marking a public item as eligible for public indexing also adds it to the on-device index and confers an additional advantage: When you use web markup to make your related website content searchable, user engagement with publicly eligible search results from your app can help improve the ranking of your website’s content. When a user taps a searchable activity or state in Spotlight search results, you use NSUserActivity APIs to continue the activity and return the user to the relevant area in your app.

在iOS 9中,把一条公共类目标记为eligibleForPublicIndexing也是存储到on-device index,这给予了更多的功能:当你使用web markup技术把你的相关网页内容可搜索化时,你的app的公开搜索结果的用户参与度,可以帮助你提升你的网页内容的排名。当用户点击了spotlight 搜索结果中的活动或者状态时,使用NSUserActivity APIs 帮助用户继续之前的活动,返回到app中相关页面。
综合上文,使用NSUserActivity把内容标记为公开,可以让安装了app的其它用户搜索到相关信息。举个例子,淘宝电影app。A用户访问了『美人鱼』电影页面,这个时候app内部把该(由美人鱼电影相关信息封装而成)类目标记为公开;然后B用户也执行此操作;C用户,D用户...。当产生了许多个(未知,没公布)相同标记之后(每个用户访问美人鱼页面在其设备上生成一个标记),没有访问过该页面的X用户Y用户Z用户在spotlight中搜索『美人鱼』,也会出现该搜索结果(需要用户安装淘宝电影app)。

隐私

这三种APIs ,跟上文说的两种索引方式是对应的。使用NSUserActivity和Core Spotlight APIs创建的索引都是 on-device index.
使用web markup技术是存储在server-side

As the user uses your app, you create activity objects associated with various navigation points and app states. Each item is added to the on-device index by default. In iOS 9, marking a public item as eligible for public indexing also adds it to the on-device index.

The Core Spotlight framework provides ways to index the content within your app and manage the private on-device index.The items you index using Core Spotlight APIs are not added to Apple’s server-side index or synced between devices.

Because items indexed by Applebot are already public, they are stored on Apple’s server-side index.

辅助功能

除了使用NSUserActivity 和 Core Spotlight的APIs,增加web markup之外,你还应该使用三个关键技术来给用户最好的体验。

  • Univeral links。 在iOS 9 之后,使用universal links技术,用standard HTTP or HTTPS links取代custom URL schemes。Universal links对所有用户有有效:如果用户安装了你的app,link会把他们引入你的app;如果用户没有安装你的app,lin 会在Safari打开你的网站。点击Support Universal Links了解如何使用universal links。

  • Smart App Banners。当用户在Safari中访问你的网页,Smart App Banner 可以让用户启动你的app(如果有安装)或者有机会下载你的app(如果未安装)。点击Promoting Apps with Smart App Banners了解更多关于Smart App Banners 的信息。

  • Handoff。Handoff 允许用户从一个设备切换到另一个设备时继续之前的活动。例如,当在Mac浏览一个网页时,在你的iPad上,会直接进入你的原生app中。在iOS 9 中,Handoff包括了对app search的特殊支持。点击Handoff Programming Guide了解更多关于Handoff 的信息。

关于搜索结果的排名

为了给用户最好的体验,系统会估计用户使用Spotlight或者Safari搜索跳入app的频次。正因为如此,那些用户觉得没什么用的搜索结果会很快的被标记出来,最终不会再搜索结果中展示。
iOS 会根据下面的信息来决定搜索结果展示的顺序:

  • 用户通过搜索访问app内容的频次(only NSUserActivity)
  • 用户通过搜索访问app的数量
  • 使用web markup标记的网页的访问量和有效结构化的数据量。

总得来说,你可以通过以下的事情来提供良好的搜索结果以此鼓励用户使用你的app:

  • app内提供优质内容
  • 使用上文提到的搜索APIs来提升搜索结果与你的app的相关姓
  • 尽可能的只把用户最喜欢的数据供搜索使用
  • 必要的情况下通过移除和更新来保持索引的时效性
  • 提供切实丰富的搜索信息来引导用户点击(搜索结果)
  • 尽可能的减少,用户点击搜索结果到跳入app展示内容,这个过程消耗的时间

点击 Combine APIs to Increase Coverage andImprove the Ranking of Your Results来了解更多关于提升用户搜索体验的信息

实战,对几个app的分析

淘宝电影

对照一台没有安装过淘宝电影app 的iOS 9.2系统的iPhone6Plus,实验组也是iPhone6Plus正常使用淘宝电影,访问频次2周一次。
试验过程略
结果:
1.初次安装未打开的情况下搜索当前上映电影并无结果。
2.启动过app,停留在列表页,成功收到数据后再次搜索,可以搜索出当前上映电影,即便该并未进入过电影详情;断网后依然可搜索。
3.搜索出的结果,断网前后并无区别。
4.半年前的电影,两台设备都无法搜索出,但是在淘宝电影app内搜索出该电影(无论是在app搜索列表或者详情页),spotlight就可以搜索到。

分析:淘宝电影app会在首页或者之前,将最近数据索引。用户app内搜索的结果和访问记录也会被索引。使用的API应该是NSUserActivity,但是是否将属性设置为公开,并无结论。

知乎

分析:知乎也是会索引首页数据和用户访问记录。但是经过断网测试,首页数据的缓存可能是随用户滑动进行,并不是一次性。

百词斩

分析:百词斩的app我用的不多,但是新下载的app,断网后打开app。然后搜索常用单词,都可以搜索到。我怀疑百词斩是直接使用core spotlight 索引了成千上万个单词和常用短语。

关于Search API的一些使用场景
1.展示对应新闻 - 今日头条
2.展示问答帖子 - 知乎
3.展示电影 - 淘宝电影,豆瓣
4.展示电影院 - 淘宝电影
5.展示单词 - 百词斩
6.展示药品 - 用药助手
7.展示地标 - 百度地图
具体如何使用Search APIs,就要看需求而定了。

疑惑
  • NSUserActivity 设置为public的情况,在测试(断网前后对比测试)中并未发现具体例子。可能是测试量级较少。
  • 索引数据究竟最多能索引多少?这个我不知道。但是官网上有这样一句话

Core Spotlight APIs work best when you have no more than a few thousand items.

看样子,至少几千个还是运行的妥妥的。所以,看需求就放心的使用吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的阅读 13,452评论 5 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,639评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,884评论 25 707
  • 现在的生活方式没有让我过得更好,那不如就换一种活法吧。
    94d5f46e96ad阅读 119评论 0 0
  • 前言 最近在看并发编程艺术这本书,对看书的一些笔记及个人工作中的总结。 线程池的优势 Java中的线程池是运用场景...
    二月_春风阅读 1,484评论 0 0