需求 javascript
必备知识 php
这篇文章至少须要有过一个中等层次的PhoneGap的开发经验 html
必须产品 java
PhoneGap Build node
用户级 android
所有适用 git
我上一篇文章是经过PhoneGap可以在苹果设备上推送通知。在这篇文章中,我将会讲解如何在Android平台上使用PhoneGap去推送通知。经过对比,我发下个人通知在Android设备上的推送速度更快。 github
Google Cloud Messaging npm
Android的通知推送能够经过 GoogleCloud Messaging(GCM)的服务,这个和苹果的通知推送服务类似。之前它们都是对C2DM支持(用于云与设备之间消息传递的框架),可是如今那些API已经放弃使用了,还有就是GoogleCloud Message提供了更多加强实现,这些都是C2DM所提供不到的。经过 Cordova/PhoneGap 插件可以帮组你利用到GoogleCloud Messaging的服务。 api
消息的大小分配给GCM的净负荷是4kb(只是字符串数据),明显地比苹果推送所要求的256个位要大不少。这里有一篇文章关于这些消息发送到底支持那些数据类型。还有我建议你在你构建你的应用程序以前先在这里阅读一下应该怎样去使用这样服务,由于我在这篇文章中不少关于这方面的细节都没有讨论到。某些点我须要在这篇文章中着重强调一下是:
设置如何去推送通知
经过这些步骤就能在你的Android 应用程序去推送通知:
1. 经过命令行工具或者Eclipse去建立一个AndroidCordova 项目(咱们推荐使用命令行)
2. 下载GCM Cordova 插件。
3. 跟着插件说明的如下步骤:
要跟着说明文档所写地去设置你的Google Cloud Messaging 账号和注意记下位于URL中的项目ID。举个例子,下面加粗的数字就是你须要发送给register()方法:
不要忘记将如下代码换成你的GCM项目的ID:
包含你的发送器的ID:
4. 当一个应用接受到一个消息的时候要为它添加处理函数决定它是否打开。例如你可能会显示一个弹出警告或者一个状态栏通知。
Note:这个插件将会处理GCM的登记,并有对应的方法去接收一个消息,但它实际上并不为这些通知作出响应,这些就是你须要添加的东西。你也能够去更深刻阅读关于如何了解怎么添加原生代码去产生一个状态栏通知。
若是你须要更多有关于建立GCM项目的资料,某些特定的步骤你能够在这里找到。
PhoneGap插件包含一个简单的项目,并已经为通知推送设置寄存器,包括改变了AndroidManifest.xml和插件的配置。而你所要作的事就是修改CORDOVA_GCM_script.js文件,这样你就可以在你的register()函数里面使用GCM发送者/项目的ID,这有你立马运行它或者将这个项目做为参考并根据本身的需求作修改。
若是你偏向于利用Eclipse去编写你的代码,那么你简单地经过导入以前所建立并包含该插件的Android项目,这样你就能够开始你的工做了。
1. Choose File | New |Project
2. 选择“Android Project from Existing Code”
图1.选择“Android Project from Existing Code”。
运行示例应用
当你运行插件中的示例代码时,它会尝试自动注册你的设备。若是注册成功,你会看到消息中包含一个注册ID。(看看下面截图中我圈起来的REGID字符串,这是我在个人Galaxy Tablet中运行获得的结果)
图2:你会看到消息中包含一个注册的ID
固然你也应该能够在你的控制面板中看看一下的输出:
一旦你获得了像以上所示的注册ID,你就能够开始编写你的服务端代码。如下的部分将会讲解怎么使用Node.JS代码去发送一条消息给你的应用程序。或者,你也可使用Urban Airship或者PushWoosh去发送一个通知。当收到这个消息时,你将会看到以下面截图所示的文本显示在屏幕上:
图3.当收到一条消息时,你将会看到这些信息显示出来。
这是虽然这个插件不作任何的处理。接下来的部分咱们将会讲解经过添加一些代码使得但接收到一条消息的时候将会显示一个状态栏通知。
状态栏通知
因为这个插件只是简单地接收消息——无论你的应用程序是不是在运行——可是即便消息到达了也没有作任何处理,你决定它应该作出怎样的响应。一个常见的需求就是把这个消息显示在一个原生的状态栏上。在IOS上,这个过程会有所不一样,这个通知会被自动显示。可是在Android上你须要为它编写明确的代码。
其中一个选择就是使用Cordova StatusBarNotification 插件去实现这样的效果。若是你想用更快的解决方案,你能够经过简单添加原生的Java代码到你的GCMIntentService.javaonMessage()方法里面,就像一下代码那样:
还有要记得要添加如下的导入,这样上面的代码才能实现:
要肯定你已经使用YourActivityClassName.class替换继承至DroidGap的子类的名字。例如,在示例项目中咱们叫它MainActivity。
以上的代码将会设置一个带有一个星星图片的通知,并伴随震动和默认声音。这个例子已经在个人Android Galaxy Tablet上运行了,图以下所示(红色圈圈标记)
图4.状态栏通知(包含星型图片和震动、默认声音)
当你点击这个通知后,那么应用程序将会打开并显示它说真实收到的消息。
图5.点击那个通知将会触发应用程序打开并显示它所收到的消息。
状态栏的显示因不一样的设备而有所不一样。在通常的Android手机上,是会显示在最上面而不是像个人截图那样显示在底端。
经过node-gcm去发送一条消息
这里是经过Node.js 库使得Google Cloud Messaging去发送通知。它被称为称为node-gcm。下面的这些代码是为了让个人设备能发送一条消息。
相信大家注意到我改变了那些键。在发送的参数中,用你在申请Google Cloud Messaging 服务时Google给你的ID去指定你本身的API键。你会收到两个API键,一个浏览器键和服务器键,这里两个可能都会用到。若是其中一个不能用,试一下另一个。还有就是当你注册使用到以上插件的时候,也要指定返回给你的应用程序的值。当你运行你的应用程序并调用GCM register函数的时候,注册的ID将会在你的屏幕和控制台上显示。
要为title键和message键明确地指定title和message,由于程序的插件将会在GCMIntentService.java中查找它:
折叠键
根据Android的开发文档,当你定义一个折叠键时,它只会分发给你最后收到的通知和一个给定的折叠键,为了避免让用户被“过多的通知”烦扰例如像体育比赛中的分数。
图6.为title键和message键指定明确的title和message。注意在弹出列表中所出现的状态栏通知(若是被受理),像图7所示
图7.状态栏通知在弹出框中显示
其它可供选择的插件
迟点我将会解释那些你在Android上使用Cordova去推送通知时要用到的资料,你可能会想到在GitHub那里的另一个插件。这个插件是为了可以让捏充分利用PushWoosh去推送通知而设计出来的,这个我在个人博文中发布过,“使用Pushwoosh让你可以简单经过PhoneGap去推送通知”。这个插件的API和IOS上的Cordova 通知推送插件相似,有趣的是,当我测试它的时候,即便不在PushWoosh服务器的环境下,个人Node.js服务仍然可以接收到所推送的消息。此外,我并不须要添加任何原生的Java代码,可以让上面的状态栏通知显示。
下一步
如下的这些链接你可能须要点击进去看一下
Cordovapush项目——依据node-apn和node-gcm的跨平台的推送服务。
Urban Airship 通知推送服务器——融合了PhoneGap
这些只能在CreativeCommons Attribution-Noncommercial-Share Alike 3.0 Unported License的许可下被运用到。权限只能在许可范围内,关于这个例子的代码(包括项目中用到的)均可以在Adobe上找到。
原文连接:http://www.adobe.com/devnet/phonegap/articles/android-push-notifications-with-phonegap.html