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

相关文章
相关标签/搜索