Day 11: AeroGear 推送服务器:使应用的通知推送变得简单

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 在今天的“30天学习30种新技术”, 我打算去扩展一下昨天开发的 PhoneGap 应用,加上推送通知的功能。推送通知允许应用去通知或者警告用户,即使是在程序没有打开的情况下。例如,如果我们有一个允许通知推送的 Twitter 应用,当 Twitter 上有人提到你或者关注你了,Twitter 应用也会推送一个通知给你,即使这个应用没有在运行。

在今天的“30天学习30种新技术”, 我打算去扩展一下昨天开发的 PhoneGap 应用,加上推送通知的功能。推送通知允许应用去通知或者警告用户,即使是在程序没有打开的情况下。例如,如果我们有一个允许通知推送的 Twitter 应用,当 Twitter 上有人提到你或者关注你了,Twitter 应用也会推送一个通知给你,即使这个应用没有在运行。


几周以前,我读到一篇 Jay Balunas 写的一篇很有启发的文章, 是关于如何在 OpenShift 上使用 AeroGear 设置通知推送服务器的。在那时候,我还没用过 AeroGear OpenShift 工具,但今天我们可以把它添加到我们昨天开发的阅读器中,以实现通知推送的功能。

image.png

什么是 AeroGear 统一推送服务器(UnifiedPush Server)?

AeroGear 统一推送服务器是一个 Java 写的能够给不同的移动平台推送通知的开源服务器端程序。它可以被看作成一系列不同的通知推送技术的抽象。现在的版本支持苹果的 APNsGoogle Cloud MessagingMozilla 的 SimplePush


移动应用用例(Mobile Application Usecase)

今天我们要开发的移动应用是一个为“30天学习30种新技术”开发的阅读器。用户可以在任何 Android、Symbian、webOS、或者 Windows Phone 设备上安装这个应用。你可以在这里下载


应用可以做下面这些事情:

1.把所有的博文以列表形式展示出来,当用户点击博文时,在浏览器打开相应链接。

image.png

2.用户可以通过这个应用反馈他们对这个系列的想法。

image.png

3.我们在昨天就已经做好了前两个功能。今天,我们要增加一个功能:每当一篇新的博文发出来时,用户都会收到一个通知。

image.png

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 端控制台

image.png

点击"创建你的第一个应用程序" 然后选择 AeroGear Push 0.X 应用类型

image.png

这个页面要求我们输入应用程序的详细信息。这是一个 OpenShift 的快速开始,所有的配置都已经自动为我们设置好了。选择默认的值,然后按下 "创建程序" 按钮

image.png

在应用程序创建之后,我们可以在 http://aerogear-{domain-name}.rhcloud.com 看到 AeroGear 服务器的运行,这里的 domain-name 就是你注册 OpenShift 时的 domain-name。


打开,http://aerogear-{domain-name}.rhcloud.com ,我们会被要求登录 AeroGear 服务器。默认的帐号/密码是 "admin/123"。在成功登录之后,你会被提示修改你的登录密码


使用新的证书成功登录后,我们可以看到 AeroGear 仪表板。

image.png

现在,我们可以创建第一个用户给我们的移动应用推送信息的程序了。点击创建按钮,然后输入应用的细节。

image.png

在应用创建之后,我们可以看到应用的详细细节。需要我们特别留意的是应用程序的 ID 和 主密码(Master Secret)

image.png


注册一个 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)

image.png

按照提示输入细节,然后点击创建按钮。记得输入你在任务 2 中获得的 Google API 密匙和项目号码。

image.png


在移动应用中,增加通知推送的支持

使用 AeroGear 推送服务器,为 phonegap 应用增加通知推送功能是非常简单的。AeroGear 团队提供了一个我们可以安装 phonegap 插件。运行下面的命令去安装这个插件:

$ cordova plugin add https://github.com/edewit/aerogear-pushplugin-cordova.git

增加几行 JavaScript 代码就可以增加通知推送功能了。在 app.js 文件中,用下面的代码代替 jQuery 文档:

document.addEventListener('deviceready', onDeviceReady, true);

functiononDeviceReady(){

   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);

}

functionsuccessHandler(result) {

   console.log("successfully registered with AeroGear push server : " + result);

 }

functionerrorHandler(error) {

   console.log("Error in registering with AeroGear push server : " + error);

}

functiononNotification(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,输入下面命令:

$ rhccreate-app30technologies30daysjbosseapmongodb-2.2--from-codehttps://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")) {

           // doauthorizationheadercheck

           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

这就是今天的内容了,记得保持反馈。


接下来


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
3天前
|
Java 关系型数据库 API
探索后端技术:构建高效、可靠的服务器端应用
在当今数字化时代,后端技术是任何成功应用程序的基石。它涉及服务器、数据库和应用程序之间的交互,处理数据存储、业务逻辑和系统性能等关键任务。本文将深入探讨后端开发的核心概念、常见技术栈及其实际应用,帮助读者更好地理解和掌握构建高效、可靠后端系统的技巧与策略。
|
2月前
|
运维 应用服务中间件 网络安全
自动化运维的利器:Ansible在服务器管理中的应用
【8月更文挑战第28天】本文深入探讨了Ansible在简化和自动化服务器管理工作中的强大功能及其实际应用。通过浅显易懂的语言和具体示例,展示了如何利用Ansible进行批量配置、部署应用以及执行系统管理任务,旨在为读者提供一套完整的解决方案,以便更好地理解和应用Ansible,从而提高工作效率和减轻运维负担。
|
11天前
|
存储 关系型数据库 API
深入理解后端技术:构建高效、可扩展的服务器端应用
本文将探讨后端开发的核心概念和技术,包括服务器端编程、数据库管理、API设计和安全性等方面。通过深入浅出的方式,让读者了解如何构建高效、可扩展的后端系统。我们将从基本的后端框架开始,逐步深入到高级主题,如微服务架构和容器化部署。无论您是初学者还是有经验的开发人员,都能在本文中找到有价值的信息和实用的建议。
|
19天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
21天前
|
Kubernetes Java Maven
揭秘无服务器革命:Quarkus如何让Java应用在云端“零”负担起飞?
本文介绍如何使用Quarkus从零开始开发无服务器应用,通过示例代码和详细步骤引导读者掌握这一技术。无服务器架构让开发者无需管理服务器,具有自动扩展和成本效益等优势。Quarkus作为Kubernetes Native Java框架,优化了Java应用的启动速度和内存使用,适合无服务器环境。文章涵盖环境搭建、项目创建及部署全流程,并介绍了Quarkus的扩展性和监控工具,助力高效开发与应用性能提升。
27 9
|
18天前
|
存储 缓存 前端开发
优化 SSR 应用以减少服务器压力
优化 SSR 应用以减少服务器压力
|
21天前
|
监控 JavaScript Java
部署应用程序到服务器
部署应用程序到服务器
38 3
|
1月前
|
弹性计算 安全 测试技术
阿里云的ECS云服务器应用例
在未来的远程办公时代,“未来空间”打造了一个高效、灵活且安全的在线协作平台,采用阿里云ECS云服务器作为核心基础设施。ECS提供按需付费的弹性计算能力,确保平台响应迅速并能应对流量高峰。其集成的安全特性如安全组和云盾,构建了多层次防护体系,保障数据安全。此外,ECS与阿里云其他服务无缝集成,如RDS、CDN和OSS,实现了高效的数据管理和全球低延迟访问。结合阿里云的机器学习服务,“未来空间”开发了智能会议摘要和情绪分析功能,提升了用户体验。凭借ECS的强大支持,该平台不仅实现了全球团队的高效协作,还赢得了市场的广泛认可,成为远程办公领域的标杆。
|
2月前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
77 2
|
24天前
|
安全 关系型数据库 API
深入理解后端技术:构建高效、可靠的服务器端应用
本文将深入探讨后端技术的核心概念和最佳实践,包括服务器端编程、数据库管理、API设计与开发等方面。我们将从基础开始,逐步深入,帮助读者建立起对后端开发的全面理解,从而能够独立构建高效、可靠的服务器端应用。
46 0