热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转]PhoneGap使用PushPlugin插件实现消息推送

本文转自:http:my.oschina.netu1270482blog217661http:devgirl.org20130717tutorial-implement-p

本文转自:http://my.oschina.net/u/1270482/blog/217661

http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/

 

概括

      Android设备通过GCM服务来接收推送消息,而iOS设备这从苹果的APN服务获取。虽然按照负载来说这是两种不同的服务,但是证书都在从第三方接收消息的时候是需要作为一个存储和转发类型的服务。辨别接收者并传递下去。在接受端,你的应用已经注册来接收他们,并检查返回内容和相应的操作。消息的接收方式是应用代码里的注册和用户设备关于消息设定的融合。

开始

       有一个叫PushPlugin的官方插件可以用来进行消息的推送,而且是PhoneGap支持的。此教程里就是使用这个插件,完整的项目源码在下面链接处:

https://github.com/hollyschinsky/PushNotificationSampleApp

       注意此代码跟处理iOS的消息推送是一样的。只需要通过PhoneGap Build创建自己的推送消息证书并测试就行了。

此教程不会深入探讨创建GCM或者ADP应用的建立,可以在下面文字处了解详细内容。

· Andr消息推送

· iOS消息推送

       此教程中我只会集中讲解AndroidGCM服务,然后下面的是关于iOS的消息推送。

· iOS Push Notifications

· Push Notifications Plugin Support added to PhoneGap Build

Android学前知识

      · Google云消息项目ID

      · 项目ID对应的Google云消息API

iOS学前知识

      · ADP上用来配置消息推送的应用ID

      · SSL证书以及私有密钥

第一部分:配置应用来使用PushPlugin

       此部分我们会在应用中添加对PushPlugin的支持。我们会使用PhoneGap Build,这样我们只需要在项目根里的www/config.xml文件里做插件的引用,并指出PushNotifications.js文件的脚本标签即,PhoneGap Build会在构建的时候注入。

       将下面脚本加入index.html中来引用PushNotification Plugin

?
1

 将下面的代码加到www/config.xml文件里,这样PhoneGap Build就会知道注入PushPlugin代码。

?
1
"com.adobe.plugins.pushplugin"  />

 

       不要跟指明每个平台的配置文件向混淆。只需要在PhoneGap Build工作是使用www文件夹即可。

第二部分:利用Google的云服务信息服务来注册应用

        此部分,我们将利用Google的云信息服务来接受推送的消息,以便注册我们的应用。

        首先创建一个账户和带GCM服务的项目。项目建立好之后,会有一个项目ID。可以在GCM的控制台里查看此ID,当然也会追加例如https://code.google.com/apis/console/#project:824841663931这样的URL。注意下此处,后面注册调用的时候需要使用。

        1. 在编辑器里打开基本应用,到www/js/index.js文件下。在receivedEvent函数里,添加下面的代码来获取推送消息插件对象的引用和对register函数的调用。需要将成功和出错的回调函数传入进去,还需要包括之前建立项目时赋值的GCM的发送者ID等参数以及一个从GCM获得信息的回到函数来作为ecb的参数。

?
1
2
var  pushNotification = window.plugins.pushNotification;
pushNotification.register( this .successHandler,  this .errorHandler,{ "senderID" : "824841663931" , "ecb" : "app.onNotificationGCM" });

        下面代码的每个回调函数都引用了上述的注册调用。

       1. 以添加的成功处理句柄开始,此句柄将在注册成功的时候调用。结果包含注册对象,我们会在提示框里显示。

?
1
2
3
[backcolor=white !important]successHandler: function(result) {
[backcolor=white !important]    alert( 'Callback Success! Result = ' +result)
[backcolor=white !important]},

       2. 之后添加错误处理函数,当注册请求出错的时候会调用此函数。此处理函数中我们将简单显示收到的错误。

?
1
2
3
errorHandler: function (error) {
     alert(error);
},

       3. 最后添加回调函数,此函数在关闭文档之前,收到index.js文件结尾的GCM的消息时候调用。在我这里,我命名为onNotificationGCM作为回调并在iOS里者相同应用添加推送消息的支持,同样也需要一个不同的回调函数。此函数检测收到的事件并简单的将内容用提示框显示出来。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
onNotificationGCM:  function (e) {
         switch ( e.event )
         {
             case  'registered' :
                 if  ( e.regid.length > 0 )
                 {
                     console.log( "Regid "  + e.regid);
                     alert( 'registration id = ' +e.regid);
                 }
             break ;
  
             case  'message' :
               // this is the actual push notification. its format depends on the data model from the push server
               alert( 'message = ' +e.message+ ' msgcnt = ' +e.msgcnt);
             break ;
  
             case  'error' :
               alert( 'GCM error = ' +e.msg);
             break ;
  
             default :
               alert( 'An unknown GCM event has occurred' );
               break ;
         }
     }

 

       你可以手动在PhoneGap Build外添加插件到自己的应用里,在PushPluginreadme里查看更多内容。

运行应用

       现在当你运行应用的时候你会看到一个调用去注册你的android设备,收到一个如下的提示框。

        现在我们的应用已经准备好接受从GCM那里推送的消息了。我们使用简单的JS代码来测试我们发送的信息。有一个叫node-gcm的库,我们可以用来发送消息给GCM。我们只是需要令牌或者我们注册时返回的注册ID,另外需要有一个GCM与我们项目相关的API密钥。

       1. 安装node-gcm模块。此库用来处理了与GCM的通信并提供方便的类来发送消息。你必须安装node.js,这样此库才能工作。

       2. 到GCM的控制台,找到服务器API密钥。如果没有创建,这需要现在创建。

       3. 获得从控制台返回的应用注册ID。我喜欢使用Androidadb工具,这样我就可以允许日子监控来在应用运行的时候查看控制台。假设你有了android-sdk工具和环境变量里设置的平台工具,你就可以轻易的输入adb logcat来显示设备的日子。

       4. 打开编辑器,创建一个叫notify.js的文件,在下面粘贴,代替发送者密钥以及你自己的注册ID

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var  gcm = require( 'node-gcm' );
var  message =  new  gcm.Message();
  
//API Server Key
var  sender =  new  gcm.Sender( 'AIzaSyCDx8v9R0fMsAsjoAffF-P3FCFWXlvwLhg' );
var  registrationIds = [];
  
// Value the payload data to send...
message.addData( 'message' , "\u270C Peace, Love \u2764 and PhoneGap \u2706!" );
message.addData( 'title' , 'Push Notification Sample'  );
message.addData( 'msgcnt' , '3' );  // Shows up in the notification in the status bar
message.addData( 'soundname' , 'beep.wav' );  //Sound to play upon notification receipt - put in the www folder in app
message.timeToLive = 3; // Duration in seconds to hold and retry to deliver the message in GCM before timing out. Default 4 weeks if not specified
  
// At least one reg id required
registrationIds.push( 'APA91bwu-47V0L7xB55zoVd47zOJahUgBFFuxDiUBjLAUdpuWwEcLd3FvbcNTPKTSnDZwjN384qTyfWW2KAJJW7ArZ-QVPExnxWK91Pc-uTzFdFaJ3URK470WmTl5R1zL0Vloru1B-AfHO6QFFg47O4Cnv6yBOWEFcvZlHDBY8YaDc4UeKUe7ao' );
  
/**
  * Parameters: message-literal, registrationIds-array, No. of retries, callback-function
  */
sender.send(message, registrationIds, 4,  function  (result) {
     console.log(result);
});

       5. 在脚本建立的地方输入下面命令来运行代码和发送消息推送。         node notify.js
       你应该听到消息,并在Android设备的状态条上可以看到。

 

       点击之后,应用会打开,你就会看到冒出来的信息了。

其他需要注意的事情

      · 可以PushPluginAPI来设置标识数量

?
1
pushNotification.setApplicationIconBadgeNumber( this .successHandler, 0);

      · 可以指定一个自定义声音来播放,包括www文件夹里的声音文件,可以从服务端进行指定。

      还有其他的第三方的消息推送插件服务可以使用,例如Urban AirshipPushWoosh等类似的API调用,都可以用,但是当前还是不支持PhoneGap Build

Android iOS之间的区别

       1. Android的负载为4KiOS的则为256字节。

       2. iOS需要额外从ADP来获得消息推送的验证应用ID,也需要一个唯一的SSL证书,这样服务端才能确认。

       3. 如果设备ID更改或者是无效的,GCM将返回一个信息进行提示,但是Apple这需要定期ping服务器来找出设备令牌是否有效。

       4. 在消息0秒到4周之间,需要确定一个Android的生命周期。苹果则不需要设置。

       5. 对Android设备来说需要指定一个碰撞密钥,它用来保存信息,并且只有最后一个会发送。在iOS上这需要将多个消息发给同一个设备,如果设备不在线,者只有最后一个消息会发送。

总结

       现在你知道如果接收推送的消息,下一步就是保存从设备得到的注册ID或者设备令牌,它们都运行你的应用,这样你就可以在需要为应用发送消息的时候从服务端访问它们。当然在接收到特定消息的时候你也需要添加任意的处理代码来进行处理。

http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/

 

 

仿照上述示例 相应测试项目代码:

 


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
淘老婆桃桃_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有