歡迎光臨
每天分享高質量文章

我們是如何使用 Electron 構建 Linux 桌面應用程式的 | Linux 中國

這是借助 Electron 框架,構建一個在 Linux 桌面上原生運行的開源電子郵件服務的故事。

— Nils Ganther

 

Tutanota 是一種安全的開源電子郵件服務,它可通過瀏覽器使用,也有 iOS 和 Android 應用。其客戶端代碼在 GPLv3 下發佈,Android 應用程式可在 F-Droid 上找到,以便每個人都可以使用完全與 Google 無關的版本。

由於 Tutanota 關註開源和 Linux 客戶端開發,因此我們希望為 Linux 和其他平臺發佈一個桌面應用程式。作為一個小團隊,我們很快就排除了為 Linux、Windows 和 MacOS 構建原生應用程式的可能性,並決定使用 Electron 來構建我們的應用程式。

對於任何想要快速交付視覺一致的跨平臺應用程式的人來說,Electron 是最適合的選擇,尤其是如果你已經有一個 Web 應用程式,想要從瀏覽器 API 的束縛中擺脫出來時。Tutanota 就是這樣一個案例。

Tutanota 基於 SystemJS 和 Mithril,旨在為每個人提供簡單、安全的電子郵件通信。因此,它必須提供很多用戶期望從電子郵件客戶端獲得的標準功能。

由於採用了現代 API 和標準,其中一些功能(如基本的推送通知、搜索文本和聯繫人以及支持雙因素身份驗證)很容易在瀏覽器中提供。其它功能(例如自動備份或無需我們的服務器中轉的 IMAP 支持)需要對系統資源的限制性訪問,而這正是 Electron 框架提供的功能。

雖然有人批評 Electron “只是一個基本的包裝”,但它有明顯的好處:

◈ Electron 可以使你能夠快速地為 Linux、Windows 和 MacOS 桌面構造 Web 應用。事實上,大多數 Linux 桌面應用都是使用 Electron 構建的。
◈ Electron 可以輕鬆地將桌面客戶端與 Web 應用程式達到同樣的功能水準。
◈ 發佈桌面應用程式後,你可以自由使用開發功能添加桌面端特定的功能,從而增強可用性和安全性。
◈ 最後但同樣重要的是,這是讓應用程式具備原生的感覺、融入用戶系統,而同時保持其識別度的好方法。   ### 滿足用戶的需求

Tutanota 不依靠於大筆的投資資金,而是依靠社區驅動的專案。基於越來越多的用戶升級到我們的免費服務的付費計劃,我們有機地發展我們的團隊。傾聽用戶的需求不僅對我們很重要,而且對我們的成功至關重要。

提供桌面客戶端是 Tutanota 用戶最想要的功能,我們感到自豪的是,我們現在可以為所有用戶提供免費的桌面客戶端測試版。(我們還實現了另一個高度要求的功能 —— 搜索加密資料 —— 但這是另一個主題了。)

我們喜歡為用戶提供簽名版本的 Tutanota 並支持瀏覽器中無法實現的功能,例如通過後臺行程推送通知。現在,我們計劃添加更多特定於桌面的功能,例如 IMAP 支持(而不依賴於我們的服務器充當代理),自動備份和離線可用性。

我們選擇 Electron 是因為它的 Chromium 和 Node.js 的組合最適合我們的小型開發團隊,因為它只需要對我們的 Web 應用程式進行最小的更改。在我們開始使用時,可以將瀏覽器 API 用於所有功能特別有用,隨著我們的進展,慢慢地用更多原生版本替換這些組件。這種方法對附件下載和通知特別方便。

調整安全性

我們知道有些人關註 Electron 的安全問題,但我們發現 Electron 在 Web 應用程式中微調訪問的選項非常令人滿意。你可以使用 Electron 的安全文件和 Luca Carettoni 的Electron 安全清單等資源,來幫助防止 Web 應用程式中不受信任的內容發生災難性事故。

實現特定功能

Tutanota Web 客戶端從一開始就構建了一個用於行程間通信的可靠協議。我們利用 Web 執行緒在加密和請求資料時保持用戶界面(UI)響應性。當我們開始實現我們的移動應用時,這就派上用場,這些應用程式使用相同的協議在原生部分和 Web 視圖之間進行通信。

這就是為什麼當我們開始構建桌面客戶端時,很多用於本機推送通知、打開郵箱和使用檔案系統的部分等已經存在,因此只需要實現原生端(Node.js)。

另一個便利是我們的構建過程使用 Babel 轉譯器,它允許我們以現代 ES6 JavaScript 編寫整個代碼庫,併在不同環境之間混合和匹配功能模塊。這使我們能夠快速調整基於 Electron 的桌面應用程式的代碼。但是,我們也遇到了一些挑戰。

剋服挑戰

雖然 Electron 允許我們很容易地與不同平臺的桌面環境集成,但你不能低估投入的時間!最後,正是這些小事情占用了比我們預期更多的時間,但對完成桌面客戶端專案也至關重要。

特定於平臺的代碼導致了大部分阻礙:

◈ 例如,視窗管理和托盤仍然在三個平臺上以略有不同的方式處理。
◈ 註冊 Tutanota 作為預設郵件程式並設置自動啟動需要深入 Windows 註冊表,同時確保以 UAC 兼容的方式提示用戶進行管理員訪問。
◈ 我們需要使用 Electron 的 API 作為快捷方式和選單,以提供複製、粘貼、撤消和重做等標準功能。

由於用戶對不同平臺上的應用程式的某些(有時不直接兼容)行為的期望,此過程有點複雜。使三個版本感覺像原生的需要一些迭代,甚至需要對 Web 應用程式進行一些適度的補充,以提供類似於瀏覽器中的文本搜索的功能。

總結

我們在 Electron 方面的經驗基本上是積極的,我們在不到四個月的時間內完成了該專案。儘管有一些相當耗時的功能,但我們感到驚訝的是,我們可以輕鬆地為 Linux 提供一個測試版的 Tutanota 桌面客戶端。如果你有興趣,可以深入瞭解 GitHub 上的原始碼。

已同步到看一看
赞(0)

分享創造快樂