{ 完整節目筆記 https://weakself.dev/episodes/29 }
搜尋是 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
Twitter @weak_self
Share this post