[译] 第十一天: 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

相关文章
相关标签/搜索