行動應用程式開發新 перспектива

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

SpringOne2gx,我們宣布了在社群媒體和行動應用程式開發領域令人振奮的新計畫。幾週前,Craig Walls 發布了 Spring Social。今天,Roy Clarkson 發布了 Spring MobileSpring 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 用戶端。接下來我將依序介紹這些專案。

Spring Mobile

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

在 Greenhouse 中,我們從伺服器端偵測開始。具體來說,我們的目標是,如果裝置是行動裝置,則應用不同的頁面佈局。由此衍生出一個通用的「裝置解析器抽象」,這是 Spring Mobile 1.0.0.M1 的定義性功能。此功能的一些重點包括

  1. HandlerInterceptor,它使用 DeviceResolver 來偵測發起當前 HttpServletRequest 的裝置。
  2. 能夠將偵測到的裝置注入到 @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 用戶端,出現了另一組挑戰。我們需要透過 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 用戶端都在您的本機環境中執行。

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

摘要

我對我們正在進行的所有新計畫感到非常興奮,尤其是我們在社群和行動領域所做的事情。這些專案的第一個里程碑僅僅是開始。我鼓勵您參與對您有用的專案,並幫助我們將它們做到最好。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

領先一步

VMware 提供訓練和認證,以加速您的進展。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看全部