Day 11: AeroGear 推送服務器:使應用的通知推送變得簡單

在今天的「30天學習30種新技術」, 我打算去擴展一下昨天開發的 PhoneGap 應用,加上推送通知的功能。推送通知容許應用去通知或者警告用戶,即便是在程序沒有打開的狀況下。例如,若是咱們有一個容許通知推送的 Twitter 應用,當 Twitter 上有人提到你或者關注你了,Twitter 應用也會推送一個通知給你,即便這個應用沒有在運行。html

幾周之前,我讀到一篇 Jay Balunas 寫的一篇頗有啓發的文章, 是關於如何在 OpenShift 上使用 AeroGear 設置通知推送服務器的。在那時候,我還沒用過 AeroGear OpenShift 工具,但今天咱們能夠把它添加到咱們昨天開發的閱讀器中,以實現通知推送的功能。android

請輸入圖片描述

什麼是 AeroGear 統一推送服務器(UnifiedPush Server)?

AeroGear 統一推送服務器是一個 Java 寫的可以給不一樣的移動平臺推送通知的開源服務器端程序。它能夠被看做成一系列不一樣的通知推送技術的抽象。如今的版本支持蘋果的 APNsGoogle Cloud MessagingMozilla 的 SimplePushgit

移動應用用例(Mobile Application Usecase)

今天咱們要開發的移動應用是一個爲「30天學習30種新技術」開發的閱讀器。用戶能夠在任何 Android、Symbian、webOS、或者 Windows Phone 設備上安裝這個應用。你能夠在這裏下載github

應用能夠作下面這些事情:
1.把全部的博文以列表形式展現出來,當用戶點擊博文時,在瀏覽器打開相應連接。
請輸入圖片描述web

2.用戶能夠經過這個應用反饋他們對這個系列的想法。
請輸入圖片描述mongodb

3.咱們在昨天就已經作好了前兩個功能。今天,咱們要增長一個功能:每當一篇新的博文發出來時,用戶都會收到一個通知。
請輸入圖片描述segmentfault

Github 倉庫

今天作的應用演示代碼能夠在這裏看到: Github:30天學習30種新技術之第11天後端

添加通知推送

爲了嚮應用添加通知推送功能,咱們要完成下面五個任務。
1. 建立一個 OpenShift AeroGear 服務器推送程序
2. 註冊一個 Google 賬號,以使用 Google Cloud Messaging 服務
3. 向 AeroGear 推送程序增長一個變體(variant)
4. 在移動應用中,增長通知推送的支持
5.更新移動應用的 Java REST 後端,以發送要推送的通知瀏覽器

讓咱們一步步完成這些任務吧。ruby

任務一:建立一個 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 check

            DBCollection 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

這就是今天的內容了,記得保持反饋。

接下來


原文:Day 11: AeroGear Push Server--Push Notifications Made Easy
翻譯整理: Segmentfault

相關文章
相關標籤/搜索