前言

今天的30天挑战系列,我决定扩展昨天发布的PhoneGap程序的推送消息。消息推送允许程序提醒用户,即使程序没在使用的时候。例如,你有一个twitter应用,激活了消息推送,即使这个程序没在运行,如果有人粉了你或者给你留言了,程序也会通知你。

几周前,我读了Jay Balunas一篇很有用的博客,讲述用AeroGear在OpenShift上安装自己的消息推送服务。那时,我没有机会用AeroGear OpenShift, 现在我们可以用它来给昨天发布的阅读器添加推送功能。

AeroGear UnifiedPush Server是什么?

AeroGear UnifiedPush Server是一个开源的服务程序,用Java写,允许推送消息到不同的移动设备,可以看成基于不同推送消息技术的抽象化。当前版本支持Apple’s APNs, Google Cloud Messaging和Mozilla’s SimplePush.

手机应用用例

我们今天要开发的手机应用是一个对30天学习30种技术挑战的阅读器。用户可以在任何Android, Symbian, webOS, 或者 Windows Phone上安装,可以从http://bit.ly/18dbH8a下载。

这个应用可以做以下:

  1. 给出这个系列已经发布的博客列表,用户点击任何博客,都会在手机浏览器里打开。

  1. 读者可以用它发表反馈。

在昨天的博客里我们已经讨论了前两个需求,今天,我们来添加用例的推送功能,只要有新博客发布了,就提醒给用户。

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账号,它完全免费,红帽给每个用户免费提供了3个Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。

验证之后,登陆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 ID和Master Secret, 用来发送推送信息。

任务2:注册谷歌云信息服务账号

这个在AeroGear推送服务文档有深入解释,请参考文档。注册好谷歌云信息服务账号后,可以得到Google API key和Project Number.这在下一步要用到。

任务3:添加数据类型

到AeroGear推送服务添加一个新的数据类型,对于推送程序有不同的数据类型(例如Android, iPad, iPhone free 或者Mobile Web).  数据类型包含了平台的特定属性,比如Google API key(Android)或者PushNetwork URL(SimplePush).

如下填入详细信息,点击Create按钮,输入在第二步接收到的Google API key和Project Number.

任务4:在手机程序里添加推送支持

用AeroGear推送服务给PhoneGap程序添加推送信息很简单,AeroGear团队提供了一个我们可以安装的PhoneGap插件,运行一下命令安装aerogear-pushplugin.

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

添加推送信息就如添加几行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. SenderID和Google       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      客户端工具,rhc是ruby 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 checkDBCollection 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

转载于:https://www.cnblogs.com/endless-on/p/3489511.html

[译] 第十一天: AeroGear Push Server - 轻松推送提示信息相关推荐

  1. Server push(服务器推送技术)

    一.服务器推送技术Server Push详解:        推送技术Server Push的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服 ...

  2. WebServer端push之消息推送

    WebServer端push之消息推送 1. Html5新技术 H5的桌面通知Notification, 弹框消息提醒 H5的web push, 用户订阅了一个站点的 Web Push 服务后,即使用 ...

  3. git push git pull 推送/拉取分支

    git push与git pull是一对推送/拉取分支的git命令.  git push 使用本地的对应分支来更新对应的远程分支. <code class="hljs xml has- ...

  4. server酱php推送代码,多种语言调用Server酱推送微信模板消息

    把Server酱用来推送报警信息或日志是非常方便的,接入成本非常低也很简单 最近使用了一个 Python 的自动签到脚本,进行自动签到,但是每天签到完白天还需要看日志或者访问网站查看是否成功 这还不如 ...

  5. git push origin master 推送出错:

    git push origin master 推送出错: $ git push origin masterTo https://gitee.com/lqhjava/scetc.git ! [rejec ...

  6. 一个基于server酱推送服务的laravel package

    最近在做服务器通知的时候,发现邮件,短信什么的都需要钱,但是自己需要的服务要求也不高,遂找到了server酱做代替,真的是一个非常好用简单易用的的推送工具,你可以用来做, 服务器运维通知 评论通知,当 ...

  7. Netty实现服务器推Push(Android推送)

    简介 消息推送一般的思路就是: 1.轮询(Pull)客户端定时的去询问服务器是否有新消息需要下发:确点很明显Android后台不停的访问网络费电还浪费流量. 2.推送(Push)服务端有新消息立即发送 ...

  8. git push 如何同时推送至两个git仓库

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | lucktian 来源 | cnblogs.c ...

  9. 利用server酱推送消息和定时库:APScheduler

    转载自公众号:python_shequ 最近工作比较繁杂,经常忘事,有时候记了备忘录结果却忘记看备忘录,但是微信是每天都会看的,于是就想到写一个基于微信的提醒系统.总体思路是将待办事项记录到在线记事本 ...

最新文章

  1. Leetcode: Reverse Linked List II
  2. Springboot中mongodb的使用
  3. redis 启动时 Warning 警告解决及说明
  4. matlab制作以太网数据接收上位机_Python制作串口通讯上位机
  5. CentOS6最小化安装默认启动的服务说明
  6. 零拷贝概念 -- linux内核
  7. python制作简单网页_python 跑服务器,访问自己制作的简单页面
  8. 【JAVA基础篇】内部类
  9. MongoDB,还有一个角度看数据
  10. 经商失败的人,最可怕的不是失去金钱,而是失去信心
  11. 差分进化算法用c语言实现,python 实现差分进化算法
  12. Flume1.6.0之Error-protobuf-This is supposed to be overridden by subclasses
  13. c语言随机迷宫生成,程序自动生成迷宫
  14. 有2n个硬币,其中除一个略重外,其余2n-1个都一样重。
  15. 脚本:自动下载安卓应用并安装到手机
  16. 经典的期货量化交易策略大全(含源代码)
  17. 雨林木风 GHOST XP SP3 五一纯净版
  18. Redis学习(二)之 Redis Cluster集群
  19. 做网站注意事项,网站建设标准流程
  20. linux 命令查询主机名,linux如何查看主机名?

热门文章

  1. MongoDB工具最新进展
  2. Office Live Workspace让协同办公无处不在
  3. 邮箱回执怎么看_考研复试联系导师邮件怎么写?
  4. vim替换字符串带斜杠_Linux vi/vim最全使用指南
  5. 获取系统分辨率_一文弄懂高分辨率高速快门CMOS成像传感器技术应用现状
  6. 计算机信息的编码教案,信息的编码教案信息的编码教案.doc
  7. 在Ubuntu 18.04系统中使用Netplan工具配置网络
  8. java编译大项目很慢_优化MyEclipse编译速度慢的问题、build、project clean 慢
  9. c语言程序设计小学期论文,c语言程序设计小学期.pdf
  10. autocomplete触发事件_修改jQuery.autocomplete中遇到的键盘事件