iOS9新特性:App搜索编程
这里基本按照官方文档, 但是没有百分百一致, 夹带了私货. 下面是一个总的结构图, 勾勒了一下这个技术的全貌.
搜索基础
搜索驱动用户参与
苹果在iOS 9中新造了一个很牛的特性, 就是App Search, 为应用提供了暴露内容的更多机会, 也增加了操作系统对应用本身的控制力. 有了App Search, iOS操作系统变得更像浏览器+搜索引擎, 应用变得更像一个网站.
- 不需要打开应用, 甚至不需要安装应用就可以让用户见到应用内部的内容.
-
在Spotlight和Safari搜索的结果里展示应用内容, 让Siri,Reminder使用应用内容.
利用两类索引, 保护用户隐私
保护用户隐私是iOS9的一项根基功能,为了在提供良好搜索体验的同时,也保护用户隐私, iOS9提供了以下两种索引:
- 存储在客户端设备上的私有索引数据
设备端的私有索引不会上传到苹果服务器, 也不会在不同的设备之间进行同步. 只有在创建索引的设备上可以搜索到.这种不会扩散的索引,可以有效的帮助用户保护隐私. - 苹果服务器端索引
服务端索引用来存储可以公开的的数据, 通过你的网站标记提供.
组成搜索的几种技术
苹果在app搜索功能上招数并不单一,打出了组合拳,可以应付多重情况. 在动手开发之前, 需要先动脑筋想一想, 内容存储在哪儿,是客户端还是网站;谁可以访问,是只有我自己, 还是网友们都可以, 然后再选择合适的接口和技术.
iOS9中用来进行内容索引的接口有:
- NSUserActivity类是iOS8用来实现handoff的, iOS9中提供的新方法帮助你索引用户活动, 导航点. 它即支持私有内容, 也支持功能内容.
- Core Spotlight框架:主攻设备端,用来在设备上建立索引, 只支持私有索引.
- Web标记:主攻服务端, 让相关的web内容也可以被搜索.
- Universal Links. 这是iOS9中用来代替自定义URL schemes的技术. 如果用户安装了app, 可以直接打开app, 如果没有安装, 可以打开一个网站.
- Smart App Banners. 用在网站上, 用户在浏览器里点击之后, 如果你安装了app, 会打开app, 如果没有, 会到app Store打开App.
- Handoff. 可以实现在mac上点一个链接, 然后在iPhone上打开对应的App.
影响搜索结果排名的几种因素
app搜索的结果会有排行榜, 决定排名的因素如下:
- 用户查看你的内容的频率(通过捕获NSUserActivity来确定)
- 查看你的内容的用户的数量
- 对于标记web内容, URL的受欢迎度, 结构化数据的数量.
为了提高排名, 你可以按下面的方法: - 创建拥有吸引力内容的app.
- 通过使用前面提到的api, 提高搜索结果的相关度.
- 只对用户最可能感兴趣的内容建立索引.
- 更新索引保证新鲜
- 在索引中提供高度相关, 丰富的信息.
- 缩短点击搜索结果到应用展示内容这个流程之间的速度.
实现示例
搜索实现的方式取决于app的使用模式和用户体验. 所以一下问题需要思考:
- 有没有一个包含了app内容的网站?
- app中是否包含特定用户的, 或者用户生成的数据?
- app是否包含用户重复访问的内容?
下面举例几种典型的应用如何使用搜索技术:
社交网络
社交app的用户, 喜欢分享, 也有一些私有数据需要保护.
所以一个社交app的API使用可能如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch来标记可以公开搜索的内容和隐私的内容. - Core Spotlight:
用来索引在设备上的不是特别重要以及隐私的数据. - Web markup:
在网站上, 增加deep links和元数据, 让公开的个人信息, 网页, 群组来丰富搜索结果. 使用universal links让用户能够点击网站链接打开app.
新闻
典型的新闻app帮助用户按照主题来访问内容. 用户先浏览新闻标题, 然后再细看感兴趣的新闻详情. app中大多数的信息是公开的, 但是用户希望他们自己的浏览记录收到保护. API的使用如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch来标记导航点. 比如”时事”,”体育”, 用户点击搜索结果后, 可以直接进入”时事”,”体育”栏目. 可以索引用户最感兴趣的栏目. 可以使用expirationDate标记有些新闻用户看完多久之后就不再出现在搜索里. - Core Spotlight:
用来索引最新的新闻, 趋势, 相关文章, 标题; 索引用户标记为喜欢或者稍后再度的新闻; 从索引里删除过期的新闻; - Web markup:
在网站上, 增加deep links和元数据,图片什么的, 提供丰富的信息. 使用universal links让用户能够点击网站链接打开app.
售票
一个售票app需要便于用户查找即将发生的事件(比如某某演唱会要开了), 便于买票, 能够帮助每个用户跟踪自己的发票和即将发生的事件(比如我订的电影票马上要开场了). API的使用如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch来标记场馆, 乐队等的活动. - Core Spotlight:
索引发票, 喜欢的乐队, 附近地点的事件, 清理过期的索引; - Web markup:
在网站上, 增加deep links和元数据,图片,价格什么的, 提供丰富的信息. 使用universal links让用户能够点击网站链接打开app.
旅行
需求类似于卖票的app. API的使用如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch来标看过的旅馆, 经典, 酒店, 航班, 路线. - Core Spotlight:
索引预订, 附近的经典, 收藏的酒店,景点等; - Web markup:
在网站上, 增加deep links和元数据,图片,价格, 地址什么的, 提供丰富的信息. 使用universal links让用户能够点击网站链接打开app.