搶先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多在 SpringOne2gx 大會上,我們宣佈了社交媒體和移動應用開發領域令人興奮的新舉措。幾周前,Craig Walls 釋出了 Spring Social。今天,Roy Clarkson 釋出了 Spring Mobile 和 Spring Android。在這篇文章中,我想重點介紹這些專案,並分享 Spring 如何旨在簡化移動應用開發。
如果您參加了今年的 SpringOne2gx 大會,您一定見過 Greenhouse,這是一個我們為社群構建的應用程式,同時也是 Spring 技術的參考和驅動。Craig 向您展示了 Greenhouse 的一些社交元素,例如將您的帳戶連線到 Twitter 和 Facebook 的能力。此外,還有許多移動元素。具體來說,Greenhouse 可以兼作移動 Web 應用,並擁有原生的 iPhone 版 Greenhouse 和 Android 客戶端。
就像當今的許多組織一樣,我們必須回答“要瞄準哪些移動平臺?”這個基本問題。最終,我們選擇投資於 iPhone 和 Android 使用者的原生體驗,同時還開發了一個跨平臺的移動 Web 應用。我們選擇原生開發是基於應用程式是面向消費者的事實,而且大量潛在消費者(應用程式開發者)擁有 iPhone 和 Android 裝置。與此同時,移動 Web 應用旨在提供一個可在跨平臺工作的良好基礎體驗,這在 WebKit 和 HTML 5 興起的今天成為可能。
從我們的開發工作中,誕生了對 Spring Framework 的貢獻:首先是 Spring Mobile 專案,它為開發移動 Web 應用提供了對 Spring MVC 的擴充套件;其次是 Spring Android 專案,它支援開發與基於 Spring 的後端通訊的原生 Android 客戶端。我將依次介紹這些專案。
在 Greenhouse 中,我們從伺服器端檢測開始。具體來說,我們的目標是在裝置是移動裝置時應用不同的頁面佈局。由此誕生了通用的“裝置解析器抽象”,這是 Spring Mobile 1.0.0.M1 的核心特性。該特性的一些亮點包括:
<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 還包含:
最近,我們也開始探索結合 CSS 3 Media Queries 與 JavaScript 進行客戶端檢測。這種方法的優點是不需要特殊的伺服器端處理,除非您打算改變傳送給裝置的語義內容,而不僅僅是最佳化樣式。並非所有瀏覽器都支援 Media Queries,所以這可能不是您的選擇,但如果您目標使用者是使用基於 WebKit 的瀏覽器的智慧手機,您應該沒問題。總的來說,先為移動端設計應用,然後逐步增強以適應桌面端的方法對我來說感覺相當優雅。
對於 Android 客戶端,出現了一系列不同的挑戰。我們需要透過 HTTPS 經由 REST 與伺服器交換資料,並且由於這些資料是使用者特定的,我們需要使用者登入。我們沒有使用 Basic Auth(這將需要我們將使用者名稱和密碼憑證儲存在裝置本身),而是選擇了 OAuth。
OAuth 是一個新興標準,提供基於令牌的授權方案。本質上,使用者名稱和密碼被換取一個訪問令牌,而訪問令牌用於請求受保護的資源。這意味著您只需在裝置上儲存訪問令牌即可實現“記住我”功能。此外,我們選擇實施登入過程,客戶端將您帶到伺服器的網站進行連線授權。這樣,客戶端永遠不會看到您的使用者名稱和密碼,這對於允許第三方客戶端針對您的 API 進行開發(這也是我們想要鼓勵的)非常重要。最後,如果使用者的手機被盜或以其他方式被入侵,可以使訪問令牌無效,而不會有使用者名稱和密碼洩露的風險。
從這項工作中,我們產生了在 Android 環境中讓 Spring Framework 的特定模組工作的願望。具體來說,我們的目標是使用 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 客戶端都在您的本地環境中執行起來。
如果您對功能、路線圖有疑問,或者只想與開發團隊進行討論,請訪問我們的社群論壇。我們非常重視您的反饋。
我對我們正在進行的所有新舉措感到非常興奮,特別是我們在社交和移動領域所做的一切。這些專案的第一個里程碑僅僅是個開始。我鼓勵您參與對您有用的專案,並幫助我們使其儘可能做到最好。