領先一步
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 專案,它為 Spring MVC 提供擴充功能,用於開發行動 Web 應用程式;其次是 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 媒體查詢 與 JavaScript 來執行用戶端偵測。除非您的目標是改變您傳送到裝置的語意內容,而不僅僅是最佳化樣式,否則這種方法具有不需要特殊伺服器端處理的優點。並非所有瀏覽器都支援媒體查詢,因此它們可能不適合您,但如果您 以使用 WebKit 瀏覽器的智慧型手機為目標,您應該沒問題。總體而言,首先為行動裝置設計您的應用程式,然後逐步增強桌面體驗的方法,對我來說相當優雅。
對於 Android 用戶端,出現了另一組挑戰。我們需要透過 HTTPS 經由 REST 與伺服器交換資料,並且由於該資料是使用者特定的,因此我們要求使用者登入。我們沒有使用基本身份驗證(Basic Auth),那樣我們需要在裝置本身上儲存使用者名稱和密碼憑證,而是選擇了 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");
在未來的里程碑版本中,您可以期待在 Android 環境中支援更多 Spring Framework 的功能,例如 Spring Security OAuth 用戶端。
最好的入門方法是實際體驗,在您自己的本機開發環境中瀏覽 Greenhouse 應用程式。作為參考,Greenhouse 使用了 Spring Mobile 和 Spring Android 專案,以及 Spring MVC、Security、Social 和 Integration。專案頁面 提供了一個 指南,向您展示如何在幾分鐘內讓 Web 應用程式、iPhone 用戶端和 Android 用戶端都在您的本機環境中執行。
如果您對功能、路線圖有疑問,或者只是想與開發團隊進行討論,請務必造訪我們的 社群論壇。我們重視您的意見回饋。
我對我們正在進行的所有新計畫感到非常興奮,尤其是我們在社群和行動領域所做的事情。這些專案的第一個里程碑僅僅是開始。我鼓勵您參與對您有用的專案,並幫助我們將它們做到最好。