[譯] 第十一天: AeroGear Push Server - 輕鬆推送提示信息

前言

今天的30天挑戰系列,我決定擴展昨天發佈的PhoneGap程序的推送消息。消息推送容許程序提醒用戶,即便程序沒在使用的時候。例如,你有一個twitter應用,激活了消息推送,即便這個程序沒在運行,若是有人粉了你或者給你留言了,程序也會通知你。html

 

幾周前,我讀了Jay Balunas一篇頗有用的博客,講述用AeroGearOpenShift上安裝本身的消息推送服務。那時,我沒有機會用AeroGear OpenShift, 如今咱們能夠用它來給昨天發佈的閱讀器添加推送功能。android

AeroGear UnifiedPush Server是什麼?

AeroGear UnifiedPush Server是一個開源的服務程序,用Java寫,容許推送消息到不一樣的移動設備,能夠當作基於不一樣推送消息技術的抽象化。當前版本支持Apple’s APNs, Google Cloud MessagingMozilla’s SimplePush.git

手機應用用例

咱們今天要開發的手機應用是一個對30天學習30種技術挑戰的閱讀器。用戶能夠在任何Android, Symbian, webOS, 或者 Windows Phone上安裝,能夠從http://bit.ly/18dbH8a下載。github

 

這個應用能夠作如下:web

  1. 給出這個系列已經發布的博客列表,用戶點擊任何博客,都會在手機瀏覽器裏打開。

           

  1. 讀者能夠用它發表反饋。

        

昨天的博客裏咱們已經討論了前兩個需求,今天,咱們來添加用例的推送功能,只要有新博客發佈了,就提醒給用戶。mongodb

     

Github 倉庫

今天的demo放在github:
day11-30technologies30days-mobile-app-with-push-notification
後端

添加消息推送

要添加推送,須要作五個任務。瀏覽器

  1. 建立一個OpenShift AeroGear      推送服務程序。
  2. 註冊谷歌雲信息服務帳號。
  3. AeroGear推送程序添加一個數據類型。
  4. 在手機程序裏添加推送支持。
  5. 更新手機程序的後臺Java REST來發送推送。

 

如今一個個來完成。安全

任務1:建立一個OpenShift AeroGear 推送服務程序。

在建立AeroGear推送服務程序前,須要先住醋OpenShift帳號,它徹底免費,紅帽給每一個用戶免費提供了3Gears來運行程序。目前,這個資源分配合計有每人1.5GB內存,3GB磁盤空間。ruby

 

驗證以後,登錄OpenShift Web平臺

 

點擊Create your first application now,選擇AeroGear Push 0.X程序類型。

 

這個頁面要求咱們輸入程序的詳細信息,因爲這是一個快速入門的OpenShift程序,全部的配置信息已經爲咱們準備好了,選擇默認配置,點Create Application按鈕。

 

程序建好後,能夠在 http://aerogear-{domain-name}.rhcloud.com 看到AeroGear服務,用你的OpenShift域名替換{domain-name}. 

打開  http://aerogear-{domain-name}.rhcloud.com/, 會提示登陸AeroGear服務。默認帳號密碼是'admin/123', 登陸後,基於安全問題會要求你更改密碼。

用新密碼登陸後,能夠看到AeroGear面板。

程序建立後,能夠看到詳細信息,重要部分的信息是Application IDMaster Secret, 用來發送推送信息。

任務2:註冊谷歌雲信息服務帳號

這個在AeroGear推送服務文檔有深刻解釋,請參考文檔。註冊好谷歌雲信息服務帳號後,能夠獲得Google API keyProject Number.這在下一步要用到。

任務3:添加數據類型

AeroGear推送服務添加一個新的數據類型,對於推送程序有不一樣的數據類型(例如Android, iPad, iPhone free 或者Mobile Web).  數據類型包含了平臺的特定屬性,好比Google API key(Android)或者PushNetwork URL(SimplePush).

以下填入詳細信息,點擊Create按鈕,輸入在第二步接收到的Google API keyProject Number.

 

任務4:在手機程序裏添加推送支持

AeroGear推送服務給PhoneGap程序添加推送信息很簡單,AeroGear團隊提供了一個咱們能夠安裝的PhoneGap插件,運行一下命令安裝aerogear-pushplugin.

添加推送信息就如添加幾行JavaScript代碼同樣簡單,在app.js文件裏,用如下代碼替換jQuery ready.

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);
}
View Code

 

以上代碼作了如下動做。

  1. 綁定deviceready事件,deviceready事件下,咱們註冊運行在OpenShift上的推送服務,它須要的配置對象包含如下:
    1. SenderIDGoogle       Project Number通訊。
    2. pushServerURL指向AeroGear推送服務地址http://aerogear-{domain-name}.rhcloud.com/
    3. VariantID 是任務3添加的數據類型的標識。
    4. variantSecret 是任務3添加的secret標識。
  2. 若是成功註冊,就調用成功handler.
  3. 若是失敗,就調用失敗handler.
  4. 當接收到推送信息,onNotification 方法會被調用,顯示推送啓用託送插件。

任務5:更新手機程序的後臺Java REST來發送推送

昨天我只想關注在PhoneGap上,沒有討論後端應用。咱們開發的程序在OpenShift上有一個Java REST 後端,它有幾個REST API. 第一個是列出全部博客和建立新博客,第二個是提交反饋。是很簡單的Java EE 6 程序。 

 

在發佈後端到雲裳前,咱們須要作如下幾步:

  1. 在本機安裝rhc      客戶端工具rhcruby gem包,因此你須要安裝1.8.7或以上版本的ruby。輸入命令安裝rhc.
sudo gem install rhc

                  若是你已經安裝了,確保那是最新的。要更新rhc,輸入

sudo gem update rhc. 

                  想了解rhc command-line 工具,更多幫助參考https://openshift.redhat.com/community/developers/rhc-client-tools-install。

  1. rhc 安裝命令安裝OpenShift. 執行命令能夠幫你建立空間,上傳ssh 密鑰到OpenShift服務器。

 

發佈後端到OpenShift上只需輸入如下命令:

$ rhc create-app 30technologies30days jbosseap mongodb-2.2 --from-code https://github.com/shekhargulati/30technologies30days-backend.git

 

代碼裏咱們感興趣的是當發佈了一篇博客後應該推送信息,添加在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(); 
    }
View Code

以上代碼,咱們先從Blog對象得到全部數據,建立BasicDBObject, BasicDBObject是會被寫入MongoDB的文檔,若是用戶被認證了,咱們就會在MongoDB裏插入博客,在MongoDB插入後,就推送信息給全部手機用戶。

運行程序

如今,在設備上運行如下命令就能夠安裝和運行程序了。

$ phonegap run android

 

這就是今天的內容,繼續給反饋吧。

 

原文:https://www.openshift.com/blogs/day-11-aerogear-push-server-push-notifications-made-easy

相關文章
相關標籤/搜索