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

weak self podcast

線上收聽與節目筆記

搜尋是 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
  2. Core Spotlight framework 批次操作
    • CS 的 index 是 private、on-device
    • 甚至可以做成 app extension
    • 甚至可以拿 CSSearchQuery 來做自己 app 的搜尋引擎。也就是 app 內與外都共用同一個 index 跟搜尋引擎(但我沒有這樣做過)
  3. 如果有內容相通的網站,可以寫 web markup 來支援 Applebot 爬蟲

詳情都可以查看 App Search Programming Guide。但是這份文件已經很久沒更新,放在 Archive。

講起來好像很複雜,但是加個 NSUserActivity 沒有幾行程式碼。

更多 weak self


weak self podcast logo

weak self podcast

集結弱弱的我,也可以組成強大的社群。在 iOS 開發圈打滾的台灣工程師,專為 Apple & iOS 開發者而製作的 Podcast。主持人一三波肥。內容涵蓋了 iOS 與 Apple 開發圈的新知討論、踩坑經驗、人物採訪、社群活動、職場生活。

回首頁聽眾朋友怎麼說?weak self 歷史

線上收聽

可使用 OvercastListen NotesGoogle Podcasts 網站。

訂閱方式

weak self 支援任何 podcast 播放軟體,只要訂閱我們的 RSS 網址即可。

Listen on Apple Podcasts Listen on Google Podcasts Listen on Overcast Listen on Pocket Casts Listen on Spotify Listen in Castro

贊助 weak self

謝謝,請見說明