iOS9新特性:App搜索編程
這里基本按照官方文檔, 但是沒有百分百一致, 夾帶了私貨. 下面是一個總的結(jié)構(gòu)圖, 勾勒了一下這個技術(shù)的全貌.

搜索基礎(chǔ)
搜索驅(qū)動用戶參與
蘋果在iOS 9中新造了一個很牛的特性, 就是App Search, 為應(yīng)用提供了暴露內(nèi)容的更多機會, 也增加了操作系統(tǒng)對應(yīng)用本身的控制力. 有了App Search, iOS操作系統(tǒng)變得更像瀏覽器+搜索引擎, 應(yīng)用變得更像一個網(wǎng)站.
- 不需要打開應(yīng)用, 甚至不需要安裝應(yīng)用就可以讓用戶見到應(yīng)用內(nèi)部的內(nèi)容.
-
在Spotlight和Safari搜索的結(jié)果里展示應(yīng)用內(nèi)容, 讓Siri,Reminder使用應(yīng)用內(nèi)容.
Spotlight 搜索

利用兩類索引, 保護(hù)用戶隱私
保護(hù)用戶隱私是iOS9的一項根基功能,為了在提供良好搜索體驗的同時,也保護(hù)用戶隱私, iOS9提供了以下兩種索引:
- 存儲在客戶端設(shè)備上的私有索引數(shù)據(jù)
設(shè)備端的私有索引不會上傳到蘋果服務(wù)器, 也不會在不同的設(shè)備之間進(jìn)行同步. 只有在創(chuàng)建索引的設(shè)備上可以搜索到.這種不會擴散的索引,可以有效的幫助用戶保護(hù)隱私. - 蘋果服務(wù)器端索引
服務(wù)端索引用來存儲可以公開的的數(shù)據(jù), 通過你的網(wǎng)站標(biāo)記提供.
組成搜索的幾種技術(shù)
蘋果在app搜索功能上招數(shù)并不單一,打出了組合拳,可以應(yīng)付多重情況. 在動手開發(fā)之前, 需要先動腦筋想一想, 內(nèi)容存儲在哪兒,是客戶端還是網(wǎng)站;誰可以訪問,是只有我自己, 還是網(wǎng)友們都可以, 然后再選擇合適的接口和技術(shù).
iOS9中用來進(jìn)行內(nèi)容索引的接口有:
- NSUserActivity類是iOS8用來實現(xiàn)handoff的, iOS9中提供的新方法幫助你索引用戶活動, 導(dǎo)航點. 它即支持私有內(nèi)容, 也支持功能內(nèi)容.
- Core Spotlight框架:主攻設(shè)備端,用來在設(shè)備上建立索引, 只支持私有索引.
- Web標(biāo)記:主攻服務(wù)端, 讓相關(guān)的web內(nèi)容也可以被搜索.
- Universal Links. 這是iOS9中用來代替自定義URL schemes的技術(shù). 如果用戶安裝了app, 可以直接打開app, 如果沒有安裝, 可以打開一個網(wǎng)站.
- Smart App Banners. 用在網(wǎng)站上, 用戶在瀏覽器里點擊之后, 如果你安裝了app, 會打開app, 如果沒有, 會到app Store打開App.
- Handoff. 可以實現(xiàn)在mac上點一個鏈接, 然后在iPhone上打開對應(yīng)的App.
影響搜索結(jié)果排名的幾種因素
app搜索的結(jié)果會有排行榜, 決定排名的因素如下:
- 用戶查看你的內(nèi)容的頻率(通過捕獲NSUserActivity來確定)
- 查看你的內(nèi)容的用戶的數(shù)量
- 對于標(biāo)記web內(nèi)容, URL的受歡迎度, 結(jié)構(gòu)化數(shù)據(jù)的數(shù)量.
為了提高排名, 你可以按下面的方法: - 創(chuàng)建擁有吸引力內(nèi)容的app.
- 通過使用前面提到的api, 提高搜索結(jié)果的相關(guān)度.
- 只對用戶最可能感興趣的內(nèi)容建立索引.
- 更新索引保證新鮮
- 在索引中提供高度相關(guān), 豐富的信息.
- 縮短點擊搜索結(jié)果到應(yīng)用展示內(nèi)容這個流程之間的速度.
實現(xiàn)示例
搜索實現(xiàn)的方式取決于app的使用模式和用戶體驗. 所以一下問題需要思考:
- 有沒有一個包含了app內(nèi)容的網(wǎng)站?
- app中是否包含特定用戶的, 或者用戶生成的數(shù)據(jù)?
- app是否包含用戶重復(fù)訪問的內(nèi)容?
下面舉例幾種典型的應(yīng)用如何使用搜索技術(shù):
社交網(wǎng)絡(luò)
社交app的用戶, 喜歡分享, 也有一些私有數(shù)據(jù)需要保護(hù).
所以一個社交app的API使用可能如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch來標(biāo)記可以公開搜索的內(nèi)容和隱私的內(nèi)容. - Core Spotlight:
用來索引在設(shè)備上的不是特別重要以及隱私的數(shù)據(jù). - Web markup:
在網(wǎng)站上, 增加deep links和元數(shù)據(jù), 讓公開的個人信息, 網(wǎng)頁, 群組來豐富搜索結(jié)果. 使用universal links讓用戶能夠點擊網(wǎng)站鏈接打開app.
新聞
典型的新聞app幫助用戶按照主題來訪問內(nèi)容. 用戶先瀏覽新聞標(biāo)題, 然后再細(xì)看感興趣的新聞詳情. app中大多數(shù)的信息是公開的, 但是用戶希望他們自己的瀏覽記錄收到保護(hù). API的使用如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch來標(biāo)記導(dǎo)航點. 比如”時事”,”體育”, 用戶點擊搜索結(jié)果后, 可以直接進(jìn)入”時事”,”體育”欄目. 可以索引用戶最感興趣的欄目. 可以使用expirationDate標(biāo)記有些新聞用戶看完多久之后就不再出現(xiàn)在搜索里. - Core Spotlight:
用來索引最新的新聞, 趨勢, 相關(guān)文章, 標(biāo)題; 索引用戶標(biāo)記為喜歡或者稍后再度的新聞; 從索引里刪除過期的新聞; - Web markup:
在網(wǎng)站上, 增加deep links和元數(shù)據(jù),圖片什么的, 提供豐富的信息. 使用universal links讓用戶能夠點擊網(wǎng)站鏈接打開app.
售票
一個售票app需要便于用戶查找即將發(fā)生的事件(比如某某演唱會要開了), 便于買票, 能夠幫助每個用戶跟蹤自己的發(fā)票和即將發(fā)生的事件(比如我訂的電影票馬上要開場了). API的使用如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch來標(biāo)記場館, 樂隊等的活動. - Core Spotlight:
索引發(fā)票, 喜歡的樂隊, 附近地點的事件, 清理過期的索引; - Web markup:
在網(wǎng)站上, 增加deep links和元數(shù)據(jù),圖片,價格什么的, 提供豐富的信息. 使用universal links讓用戶能夠點擊網(wǎng)站鏈接打開app.
旅行
需求類似于賣票的app. API的使用如下:
- NSUserActivity:
使用eligibleForPublicIndexing和eligibleForSearch來標(biāo)看過的旅館, 經(jīng)典, 酒店, 航班, 路線. - Core Spotlight:
索引預(yù)訂, 附近的經(jīng)典, 收藏的酒店,景點等; - Web markup:
在網(wǎng)站上, 增加deep links和元數(shù)據(jù),圖片,價格, 地址什么的, 提供豐富的信息. 使用universal links讓用戶能夠點擊網(wǎng)站鏈接打開app.