weak self podcast
weak self
29: 來做 Side Project 系列之好用的搜尋功能
0:00
-57:11

29: 來做 Side Project 系列之好用的搜尋功能

搜尋是 app 常有的功能。本集來聊怎麼把搜尋的體驗做好一些呢?Bonus 則是探討如何讓 app 支援 iOS Spotlight Search,提高使用者回流的機會。

{ 完整節目筆記 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 的搜尋。有幾個方法:

  1. NSUserActivity 把使用者操作過的動作,或是點開過的項目加到 index 這個有做沒有壞處,還可以順便支援 HandoffSiri Shortcuts 等等

  2. Core Spotlight framework 批次操作 CS 的 index 是 private、on-device 甚至可以做成 app extension 甚至可以拿 CSSearchQuery 來做自己 app 的搜尋引擎。也就是 app 內與外都共用同一個 index 跟搜尋引擎(但我沒有這樣做過)

  3. 如果有內容相通的網站,可以寫 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

Discussion about this episode

User's avatar