29: 來做 Side Project 系列之好用的搜尋功能
weak self - Een podcast door 一三、波肥
Categorieën:
搜尋是 app 常有的功能。本集來聊怎麼把搜尋的體驗做好一些呢?Bonus 則是探討如何讓 app 支援 iOS Spotlight Search,提高使用者回流的機會。
{ 完整節目筆記請按我 }
開場閒聊做 UI 的另類方法
聊了 13 在嘗試用 userflow unit tests + SwiftUI preview 的 UI 另類開發方式。
搜尋外部資料
很多 app 有資料搜尋的功能,大致上可以分成搜尋外部資料、過濾內部資料兩種。先說第一種:
- 要打遠端 API 或從區網取得資料
- 限制 query 頻率,不能隨打即找
- 考慮不可控的回應時間
- 捨棄已經不符合目前搜尋條件的結果
- API 可以提供搜尋建議
- Debounce vs throttle
過濾內部資料
- 直接讀取裝置上的資料庫
- 效能可控,幾乎可以一邊打字一邊顯示結果
也是要測量
- 沒有 API,所以自己保留搜尋條件的歷史
保留搜尋條件變成資料入口,曾是 Evernote 的特色之一
要能夠清除搜尋歷史
更好的話是讓使用者能關掉這個功能,因為不是每個人都喜歡留下記錄
如果是靜態資料,可以 cache 搜尋結果
搜尋介面實作
- 通常搜尋結果會是列表,所以可能是 UITableView 放在 UINavigationController 裡面
- 用 UISearchController,是把搜尋框「藏」在 navigation bar,往下捲動時搜尋框會看不到。如果搜尋功能真的很少用到的話還算可以考慮。效果可以參考系統設定的搜尋功
- 如果搜尋是重要入口的話,還是傳統方法把 UISearchBar 放在 navigationItem.titleView 比較簡單實際,bug 也比較少…
支援 iOS 搜尋
除了 app 內的搜尋以外,也可以支援 iOS 的搜尋。有幾個方法:
- 用 NSUserActivity 把使用者操作過的動作,或是點開過的項目加到 index
這個有做沒有壞處,還可以順便支援 Handoff 跟 Siri Shortcuts 等等
- 用 Core Spotlight framework 批次操作
CS 的 index 是 private、on-device
甚至可以做成 app extension
甚至可以拿 CSSearchQuery 來做自己 app 的搜尋引擎。也就是 app 內與外都共用同一個 index 跟搜尋引擎(但我沒有這樣做過)
- 如果有內容相通的網站,可以寫 web markup 來支援 Applebot 爬蟲
適用於公開資料
支援 Twitter Cards 與 Facebook 的 App Links 標準
如果網站想要導流到 app 的話,可以搭配 Universal Links 和 Smart Banner 一起規劃
App Search API Validation Tool
詳情都可以查看 App Search Programming Guide。但是這份文件已經很久沒更新,放在 Archive。
講起來好像很複雜,但是加個 NSUserActivity 沒有幾行程式碼。
更多 weak self
- 聽眾信箱 [email protected]
- 官網 https://weakself.dev
- 主持人 一三、波肥、喬喬
- Twitter @weak_self
- 提問箱
- 贊助 weak self