Day 11: AeroGear 推送服务器:使应用的通知推送变得简单
在今天的“30天學習30種新技術”, 我打算去擴展一下昨天開發的 PhoneGap 應用,加上推送通知的功能。推送通知允許應用去通知或者警告用戶,即使是在程序沒有打開的情況下。例如,如果我們有一個允許通知推送的 Twitter 應用,當 Twitter 上有人提到你或者關注你了,Twitter 應用也會推送一個通知給你,即使這個應用沒有在運行。
幾周以前,我讀到一篇 Jay Balunas 寫的一篇很有啟發的文章, 是關于如何在 OpenShift 上使用 AeroGear 設置通知推送服務器的。在那時候,我還沒用過 AeroGear OpenShift 工具,但今天我們可以把它添加到我們昨天開發的閱讀器中,以實現通知推送的功能。
什么是 AeroGear 統一推送服務器(UnifiedPush Server)?
AeroGear 統一推送服務器是一個 Java 寫的能夠給不同的移動平臺推送通知的開源服務器端程序。它可以被看作成一系列不同的通知推送技術的抽象。現在的版本支持蘋果的 APNs,Google Cloud Messaging 和 Mozilla 的 SimplePush。
移動應用用例(Mobile Application Usecase)
今天我們要開發的移動應用是一個為“30天學習30種新技術”開發的閱讀器。用戶可以在任何 Android、Symbian、webOS、或者 Windows Phone 設備上安裝這個應用。你可以在這里下載。
應用可以做下面這些事情:
1.把所有的博文以列表形式展示出來,當用戶點擊博文時,在瀏覽器打開相應鏈接。
2.用戶可以通過這個應用反饋他們對這個系列的想法。
3.我們在昨天就已經做好了前兩個功能。今天,我們要增加一個功能:每當一篇新的博文發出來時,用戶都會收到一個通知。
Github 倉庫
今天做的應用演示代碼可以在這里看到: Github:30天學習30種新技術之第11天
添加通知推送
為了向應用添加通知推送功能,我們要完成下面五個任務。
1. 創建一個 OpenShift AeroGear 服務器推送程序
2. 注冊一個 Google 帳號,以使用 Google Cloud Messaging 服務
3. 向 AeroGear 推送程序增加一個變體(variant)
4. 在移動應用中,增加通知推送的支持
5.更新移動應用的 Java REST 后端,以發送要推送的通知
讓我們一步步完成這些任務吧。
任務一:創建一個 OpenShift AeroGear 服務器推送程序
在我們創建 AeroGear 推送服務端程序之前,我們必須先注冊一個 OpenShift 賬戶。這是完全免費的,而且紅帽(Red Hat)會給每個用戶三個免費的 Gears,在 Gears 上你可以運行你的程序。在這篇文章寫的時候,OpenShift 會為每個用戶分配 1.5GB 的內存和 3GB 的硬盤空間。
在驗證了賬戶之后,登錄 OpenShift Web 端控制臺
點擊"創建你的第一個應用程序" 然后選擇 AeroGear Push 0.X 應用類型
這個頁面要求我們輸入應用程序的詳細信息。這是一個 OpenShift 的快速開始,所有的配置都已經自動為我們設置好了。選擇默認的值,然后按下 "創建程序" 按鈕
在應用程序創建之后,我們可以在 http://aerogear-{domain-name}.rhcloud.com 看到 AeroGear 服務器的運行,這里的 domain-name 就是你注冊 OpenShift 時的 domain-name。
打開,http://aerogear-{domain-name}.rhcloud.com ,我們會被要求登錄 AeroGear 服務器。默認的帳號/密碼是 "admin/123"。在成功登錄之后,你會被提示修改你的登錄密碼
使用新的證書成功登錄后,我們可以看到 AeroGear 儀表板。
現在,我們可以創建第一個用戶給我們的移動應用推送信息的程序了。點擊創建按鈕,然后輸入應用的細節。
在應用創建之后,我們可以看到應用的詳細細節。需要我們特別留意的是應用程序的 ID 和 主密碼(Master Secret)
注冊一個 Google 帳號,以使用 Google Cloud Messaging 服務
這里是深入介紹了 AeroGear Push 的服務器端文檔,所以請留心閱讀。 在成功注冊了 Google Cloud Messaging 服務后,你可以拿到 Google API 密匙和項目號碼。這些在下一步是需要的。
增加一個變體(variant)
去 AeroGear 推送服務器端為應用程序添加一個變體(variant)。一個推送程序(Push Application)可以有多個變體(例如,Android,iPad,iPhone free,Mobile Web)。一個變體包含針對某個平臺的信心,例如 Google API 密匙(Andorid),或者 PushNetwork URL(SimplePush)
按照提示輸入細節,然后點擊創建按鈕。記得輸入你在任務 2 中獲得的 Google API 密匙和項目號碼。
在移動應用中,增加通知推送的支持
使用 AeroGear 推送服務器,為 phonegap 應用增加通知推送功能是非常簡單的。AeroGear 團隊提供了一個我們可以安裝 phonegap 插件。運行下面的命令去安裝這個插件:
$ cordova plugin add https://github.com/edewit/aerogear-pushplugin-cordova.git增加幾行 JavaScript 代碼就可以增加通知推送功能了。在 app.js 文件中,用下面的代碼代替 jQuery 文檔:
document.addEventListener('deviceready', onDeviceReady, true);function onDeviceReady(){var aeroConfig = {senderID: "{senderId}",pushServerURL: "{pushServerUrl}",variantID: "{variantId}",variantSecret: "{variantSecret}"};try {push.register(successHandler, errorHandler, {"badge": "true", "sound": "true","alert": "true", "ecb": "onNotification", aeroConfig: aeroConfig});} catch (err) {txt = "There was an error on this page.\n\n";txt += "Error description: " + err.message + "\n\n";alert(txt);}homeView();$('.home').on('tap', renderHomeView); $('.feedback').on('tap', renderFeedbackFormView); }function successHandler(result) {console.log("successfully registered with AeroGear push server : " + result);}function errorHandler(error) {console.log("Error in registering with AeroGear push server : " + error); }function onNotification(e) {showNotification(e.alert); }上面的 app.js 文件做了下面這些事情:
1. 它綁定了 deviceready 事件。在 deviceready 事件中,我們注冊了 OpenShift 的推送服務器。它需要下面的配置對象:
1. 對應谷歌項目號碼的 SenderId(發送者 ID)
2. pushSeverURL 指向 AeroGear 推送服務器位置:http://aerogear-{domain-name}.rhcloud.com/
3. VariantId 是我們在任務 3 所添加的變種標識。
4. variantSecret 是我們在任務 3 中添加的變種的秘密標識
2. 成功注冊后,一個處理柄(handler)被調用
3. 如果出現錯誤,錯誤處理柄(error handler)被調用。
4. 通知收到后,onNotification 函數會被調用。它會使用通知插件顯示收到的通過只。
更新移動應用的 Java REST 后端,以發送要推送的通知
昨天,我們沒有說到應用后段的內容,因為我想把文章聚焦在 PhoneGap 上。我們昨天開發的那個應用有一個運行在 OpenShift 的Java REST 后端。它有一些 REST API。第一個 API 是列出所有的博文,然后創造一個新的博文;第二個 API 是用戶用戶反饋的。它是一個非常簡單的 Java EE 6 應用程序。
在我們部署它的后端到我們的云環境之前,我們還要完成這些任務:
1.在你的機器上安裝 rhc 客戶端工具。rhc 是一個 ruby gem,所以你需要機子上安裝好 ruby 1.8.7 及以上的 ruby。要安裝 rhc,輸入:
sudo gem install rhc
更新 rhc 到最新版本,執行:
sudo gem updatge rhc
如果需要閱讀額外的安裝 rhc 命令行工具時的幫助文件,可以瀏覽:https://openshift.redhat.com/community/developers/rhc-client-tools-install
2.使用 rhc setup 命令設置好 OpenShift 賬戶,這個命令會為你創建一個命名空間,然后上傳你的 ssh keys 到 OpenShift 服務器上。
為了把移動應用程序后段部署到 OpenShift,輸入下面命令:
$ rhc create-app 30technologies30days jbosseap mongodb-2.2 --from-code https://github.com/shekhargulati/30technologies30days-backend.git它會執行類似創建一個程序、設置公共 DNS、創建私密 git 倉庫、然后使用 github 倉庫里的代碼部署應用這樣的任務。應用會部署在:deployed on http://30technologies30days-{domain-name}.rhcloud.com 。把 domain-name 換成自己的用戶名。
令我們感興趣的代碼是關于,當一篇博文發布時,應用程序應該發布一個通知。這個添加在 BlogResource 上。它使用包裝了 AeroGear 推送服務器的 REST API的AeroGear 客戶端(我今天寫的)。
@POST@Consumes(value = MediaType.APPLICATION_JSON)public Response create(Blog blog, @Context HttpServletRequest request, @Context HttpServletResponse response) {BasicDBObjectBuilder basicDBObjectBuilder = BasicDBObjectBuilder.start("title", blog.getTitle()).add("url", blog.getUrl()).add("publishedOn", blog.getPublishedOn());String authorization = request.getHeader("authorization");if (authorization != null && authorization.startsWith("Basic")) {// do authorization header checkDBCollection collection = db.getCollection("blogs");collection.save(basicDBObjectBuilder.get());aerogearClient.sendMessage("New blog published in 30technologies30days challenge");return Response.created(null).build();}return Response.status(Status.UNAUTHORIZED).build();}在上面的代碼中,我們首先從 Blog 對象中獲取所有的數據,然后創建一個 BasicDBObject 對象。這個 BasicDBObject 是會在 MongoDB 中保存的文檔。如果用戶成功授權了,我們就可以把博文添加到 MongoDB 中。把文檔插入到 MongoDB 中后,我們就發送一個通知給移動應用的用戶。
運行程序
現在,我們可以通過下面命令在設備上安裝然后運行應用:
$ phonegap run android這就是今天的內容了,記得保持反饋。
接下來
- 在線登錄 OpenShift 帳號
- 通過評估 OpenShift 企業版獲得自己的私有 PaaS(Platform As a Service)。
- 需要幫助? 去 OpenShift Community 論壇問問題。
- 在 OpenShift Developer Spotlight 中展示你的酷應用。今天就開始瀏覽下OpenShift 應用展覽
原文:Day 11: AeroGear Push Server--Push Notifications Made Easy
翻譯整理: Segmentfault
總結
以上是生活随笔為你收集整理的Day 11: AeroGear 推送服务器:使应用的通知推送变得简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Day 10: PhoneGap ——
- 下一篇: Day 12: OpenCV —— Ja