擁抱 Spring 移動應用開發

工程 | Keith Donald | 2010年11月20日 | ...

SpringOne2gx 大會上,我們宣佈了在社交媒體和移動應用程式開發領域令人興奮的新舉措。幾周前,Craig Walls 釋出了 Spring Social。今天,Roy Clarkson 釋出了 Spring MobileSpring Android。在這篇文章中,我將重點介紹這些專案,並分享 Spring 如何旨在簡化移動應用程式開發。

移動應用開發中的選擇

如果您參加了今年的 SpringOne2gx,您就會看到 Greenhouse,這是我們為社群構建的一個應用程式,它同時也是 Spring 技術的一個參考和驅動。Craig 向您展示了 Greenhouse 的一些社交元素,例如將您的帳戶與 Twitter 和 Facebook 連線的功能。它還有許多移動元素。具體來說,Greenhouse 既可以作為行動網路應用程式,又支援原生的 Greenhouse for iPhone 和 Android 客戶端。

像當今許多組織一樣,我們必須回答一個基本問題:“要針對哪些移動平臺?”最終,我們選擇為 iPhone 和 Android 使用者投資原生體驗,同時還開發了一個跨平臺的行動網路應用程式。我們選擇原生的決定是由於該應用程式面向消費者,並且大量潛在消費者(應用程式開發人員)擁有 iPhone 和 Android 裝置。同時,行動網路應用程式旨在提供一個跨平臺工作的良好基線體驗,這在 WebKit 和 HTML 5 興起的今天成為可能。

從我們的開發工作中,產生了 Spring Framework 的貢獻:首先是 Spring Mobile 專案,它為開發行動網路應用程式提供了 Spring MVC 的擴充套件;其次是 Spring Android 專案,它支援開發與基於 Spring 的後端通訊的原生 Android 客戶端。我將依次介紹這些專案。

Spring Mobile

我們解決的第一個問題是設計一個讓移動訪問者愉快使用的網路應用程式。雖然智慧手機可能有一個功能強大的網路瀏覽器,但它的螢幕仍然很小,需要考慮到這一點。處理這個問題基本上有兩種方法
  1. 檢測發起網路請求的裝置,併為移動裝置提供單獨的站點。
  2. 提供一個站點,但透過使用 CSS 3 媒體查詢和 JavaScript 逐步增強桌面使用者體驗。
今天在實際中可以找到這兩種技術的示例;例如,會議網站 Lanyrd 透過客戶端檢測進行增強,而 SpeakerRate 使用伺服器端檢測將移動訪問者重定向到單獨的站點(透過安裝 Firefox 使用者代理切換器並將您的使用者代理設定為 iPhone,您自己看看)。

在 Greenhouse 中,我們從伺服器端檢測開始。具體來說,如果裝置是移動裝置,我們旨在應用不同的頁面佈局。由此產生了通用的“裝置解析器抽象”,這是 Spring Mobile 1.0.0.M1 的決定性功能。此功能的一些亮點包括

  1. 一個 HandlerInterceptor,它使用 DeviceResolver 檢測發起當前 HttpServletRequest 的 Device。
  2. 能夠將檢測到的 Device 注入 @Controller 方法和檢視模板,以根據裝置型別改變邏輯。
以下是 Greenhouse 程式碼庫中的一些用法示例。首先,檢視 /WEB-INF/spring/appServlet/servlet-context.xml 中的攔截器定義

<interceptors>
    <!-- On pre-handle, detect the device that originated the web request -->
    <beans:bean class="org.springframework.mobile.device.mvc.DeviceResolvingHandlerInterceptor" />
</interceptors>

現在,如果裝置不是移動裝置,則有條件地呈現某些內容的 JSP 模板


Please try again<c:if test="${!currentDevice.mobile}"> or <a href="<c:url value="/signup" />">sign up</a></c:if>.

最後,如果裝置是移動裝置,則更改的基於 Tiles 的頁面佈局


    <definition name="page" templateExpression="/WEB-INF/layouts/${currentDevice.mobile ? 'mobile/' : 'standard/'}page.jsp" />

除了這些功能之外,Spring Mobile 1.0.0.M1 還提供了

  1. 一個 HandlerInterceptor,它將移動訪問者重定向到另一個 URL。如果您的移動站點確實是一個單獨的應用程式,這很有用。以 Flickr 為例,如果您從手機訪問 www.flickr.com,它會將您重定向到 m.flickr.com
  2. 一個 DeviceResolver 實現,它委託給 WURFL 進行裝置檢測。WURFL 提供了龐大的裝置及其功能資料庫。當您需要了解更多有關發起請求的裝置的資訊時,例如其特定的螢幕尺寸、製造商、型號、首選標記或其他功能,這很有用。

最近,我們也開始探索使用 CSS 3 媒體查詢JavaScript 來執行客戶端檢測。這種方法的優點是不需要特殊的伺服器端處理,除非您旨在改變您傳送到裝置的語義內容,而不僅僅是最佳化樣式。並非所有瀏覽器都支援媒體查詢,因此它們可能不適合您,但如果您針對基於 WebKit 瀏覽器的智慧手機,您應該沒問題。總的來說,首先為移動裝置設計應用程式,然後逐步增強桌面體驗的方法對我來說感覺非常優雅。

Spring Android

對於 Android 客戶端,出現了一系列不同的挑戰。我們需要透過 REST 經 HTTPS 與伺服器交換資料,並且由於這些資料是使用者特定的,我們要求使用者登入。我們沒有使用基本身份驗證(我們需要在裝置本身儲存使用者名稱和密碼憑據),而是選擇了 OAuth。

OAuth 是一種新興標準,提供基於令牌的授權方案。本質上,使用者名稱和密碼被交換為訪問令牌,訪問令牌用於對受保護資源發出請求。這意味著您只需將訪問令牌與裝置一起儲存即可實現“記住我”功能。此外,我們選擇實現登入過程,即客戶端會將您帶到伺服器的網站進行連線授權。透過這種方式,客戶端永遠不會看到您的使用者名稱和密碼,如果您允許第三方客戶端針對您的 API 進行開發(我們也希望鼓勵這樣做),這一點很重要。最後,如果使用者的手機被盜或受到其他損害,可以在不冒使用者名稱和密碼洩露風險的情況下使訪問令牌失效。

從這項工作中,產生了使 Spring Framework 的特定模組在 Android 環境中工作的願望。具體來說,我們旨在將 RestTemplate 用於 REST API 呼叫,並將 Spring Security 用於 OAuth 客戶端。

我很高興宣佈 Spring Android 的第一個里程碑版本釋出了一個“Android 就緒”的 RestTemplate。我們正在 Greenhouse 中使用它,我們鼓勵您在自己的 Android 應用程式中將其用作 REST 客戶端。請檢視下面的使用示例


RestTemplate restTemplate = new RestTemplate(new CommonsClientHttpRequestFactory());
Event event = restTemplate.getForObject("https://myapp.com/event/{name}", Event.class, "springone2gx");

在未來的里程碑版本中,您可以期待 Spring Framework 的更多功能在 Android 環境中得到支援,例如 Spring Security OAuth 客戶端。

入門

最好的入門方法是在您自己的本地開發環境中親自體驗 Greenhouse 應用程式。作為參考,Greenhouse 使用 Spring Mobile 和 Spring Android 專案,以及 Spring MVC、Security、Social 和 Integration。 專案頁面提供了一份指南,向您展示如何在幾分鐘內讓 Web 應用程式、iPhone 客戶端和 Android 客戶端都在您的本地環境中執行。

如果您對功能、路線圖有疑問,或者只想與開發團隊進行討論,請訪問我們的社群論壇。我們重視您的反饋。

總結

我對我們正在進行的所有新舉措感到非常興奮,尤其是在社交和移動領域所做的工作。這些專案的第一個里程碑只是一個開始。我鼓勵您參與對您有用的專案,並幫助我們盡最大努力使其達到最佳狀態。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有