`
flex_莫冲
  • 浏览: 1100256 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用nodejs部署phonegap push message for android环境的步骤

 
阅读更多
参考 http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/
1 安装jdk/jre
配置环境变量JAVA_HOME,添加到PATH

2 安装ant
npm install -g ant
新增环境变量ANT_HOME,变量值为C:\apache-ant-1.9.4。添加到PATH

3 安装git
新增环境变量GIT_HOME 变量值为实际路径,如C:\Program Files (x86)\Git
要将GIT_HOME/bin添加到path环境变量。


5 安装android sdk(19以上版本)
将sdk放在某个目录下,然后在环境变量中新增ANDROID_HOME 设置值为android sdk的地址。如E:\android\sdk

6 设置PATH变量。将以上新增的变量都添加到PATH中。如下:
C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Dell\Dell Data Protection\Access\Advanced\Wave\Gemalto\Access Client\v5\;C:\Program Files (x86)\Security Innovation\SI TSS\bin\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\nodejs\;C:\Program Files\TortoiseGit\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%GIT_HOME%\bin

7 创建项目
phonegap create PushNotificationSample --id "com.pushapp" --name "PushNotificationApp"

8 安装push plugin了。
执行 
phonegap local plugin add https://github.com/phonegap-build/PushPlugin
安装plugin时会提示没有C:\Users\davidhuang\AppData\Local\Temp\plugman下的某个目录。为了能安装plugin还要要手动添加以下目录(非常恶心)
C:\Users\davidhuang\AppData\Local\Temp\plugman
安装成功后,在plugins目录下多了com.phonegap.plugins.PushPlugin

9 安装android平台
执行phonegap local build android
注意,这里会提示没有avd模拟器。要手动打开avd,开启一个android模拟器。
安装成功后在platforms下就多了个android目录

10 添加<script type="text/javascript" src="js/PushNotification.js"></script>

11 在config.xml添加<gap:plugin name="com.adobe.plugins.pushplugin" />

12 修改index.js 实现注册ID和接收消息的功能
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of 'this' is the event. In order to call the 'receivedEvent'
    // function, we must explicitly call 'app.receivedEvent(...);'
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
		var pushNotification = window.plugins.pushNotification;
		pushNotification.register(app.successHandler, app.errorHandler, 
			{"senderID":"621074495309","ecb":"app.onNotificationGCM"});

        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
    },
	// result contains any message sent from the plugin call
	successHandler: function(result) {
		alert('Callback Success! Result = '+result)
	},
	errorHandler:function(error) {
		alert(error);
	},
	onNotificationGCM: function(e) {
        switch( e.event )
        {
            case 'registered':
                if ( e.regid.length > 0 )
                {
                    console.log("Regid " + e.regid);
		//reg id保存到服务器			$.get("http://test.epsmix.nmg.com.hk/Portal/Test/getRestID", {"id":e.regid}, function (){
					});
                    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;
        }
    }
};



13 安装app到模拟器 phonegap local run android
注意:模拟器虽然可以安装运行但是无法接收reg id.必须用真机安装运行哦。

以上就把client安装好了

以下是node-gcm服务器端的功能

1 新增文件notify.js
var gcm = require('node-gcm');
var message = new gcm.Message();
 
//API Server Key
var sender = new gcm.Sender('AIzaSyAekxVtHEiQzmpdViwdW2xwVBpYcyLCYcI');
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.collapseKey = 'demo';
//message.delayWhileIdle = true; //Default is false
message.timeToLive = 3000;// Duration in seconds to hold in GCM and retry before timing out. Default 4 weeks (2,419,200 seconds) if not specified.
 
// At least one reg id required
//APA91bGCcviZj6OgFFHXjx_HS_2elzBalDV1XR1OGEsX14DXtrE1kzXSeM2hECmU9xGCqR1IuWwMIAisgbl9YFNozwBAVThmy8aoFLpZ9gH-riMEsCRl5ozGtOlwn4vW-osdDISqGusZ6xcYRHXIXEP3mmPd1yOeBw
//APA91bGCcviZj6OgFFHXjx_HS_2eIzBaIDV1XR1OGEsX14DXtrE1kzXSeM2hECmU9xGCqR1IuWwMIAisgbl9YFNozwBAVThmy8aoFLpZ9gH-riMEsCRI5ozGtOlwn4vW-osdDISqGuSZ6xcYRHXIXEP3mmPd1yOeBw
//APA91bGT673_xQhDWy5_uRSXncSGpFBM-yAiuiFcBHpyGqKP0sC5vRvSYxK-QMIJWhiMLmcxh1YXISwaJZSn0xDwfci5dtGH3AWReq0czuomtX3p3IhopHEpotyUEeD3qaApf8FEdLCm7G7ABVxLghHIIJVNqV3r4gr
//APA91bGVXH9LBjnCjbhntfmdnVFkgtJdLUusyslz2p3PYlAOEClxN2oCZbsLsRWNQJq0pNmHL_a2WPvBi-q4Sp4ERqJBYBCZhOHEChs2Y4XviqzwQ4SR52PAgu_5kUEzvIibXitiQhE1

registrationIds.push('APA91bGVXH9LBjnCjbhntfmdnVFkgtJdLUusyslz2p3PYlAOEClxN2oCZbsLsRWNQJq0pNmHL_a2WPvBi-q4Sp4ERqJBYBCZhOHEChs2Y4XviqzwQ4SR52PAgu_5kUEzvIibXitiQhE1');
 
/**
 * Parameters: message-literal, registrationIds-array, No. of retries, callback-function
 */
sender.send(message, registrationIds, 4, function (result) {
    console.log(result);
});


2 修改api key 和reg id
3 执行 node notify.js

成功收到消息和提示

注意:senderID(project NUMBER)有效期是一天。第二天要重新开启哦。但是不会变。

Differences between Android and iOS

Android payload size is 4k whereas iOS payload size is 256 bytes
iOS requires extra set up from the Apple Developer Portal to authorize the app id for push notifications, as well as be signed with a unique SSL certificate that the server can verify against.
GCM will always return a message indicating if a device id has changed or is invalid, but with Apple you need to periodically ping their feedback server to find out which device tokens have become invalid.
android的消息長度是4K。ios的是256字節。(ios8增加到4K好像)
如果device id改變或者無效了,GCM會返回消息。
ios需要從apns 服務器獲取無效的device token。

You can specify a timeToLive parameter for Android of 0 seconds to 4 weeks on the life of your notification. Apple does not specify any given time period.
通過timeToLive參數可以設置消息的生命週期。從0到4週。ios不能設置有效期。

For Android you can specify a collapseKey which will allow you to save up messages and only the last one will be delivered. On iOS if you send multiple notifications to a device that is offline, only the last message will get delivered.

android可以設置一個collapsekey來保存message,只有最後一個有效。
舉例來說,
倘若使用者開啟了飛航模式,
但是App Server端卻不斷的發出訊息給C2DM,
C2DM為防止使用者一旦解除飛航模式收到爆炸性的訊息通知,
因此設計了collapse key,
collapse key控制了C2DM應該要儲存和發送多少組訊息給手機。
collapse key是一組隨意的字串。主要目的是當手機在離線模式下,降低收到群體訊息的可能性。以防萬一手機恢復連線了,突然間收到爆炸量的訊息。註︰並不保證App Server裡的最後一組訊息是按照當初發送訊息做排列。

也就是說,
如果後來又有相同的collapse key傳送至C2DM,
那麼原本存在C2DM的訊息,
將會被覆蓋。

ios如果發送多條相同的通知到一個離線設備,只有最後一條會被接收到。
分享到:
评论

相关推荐

    nodejs安装步骤及环境配置

    nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs安装步骤及环境配置nodejs...

    使用Dockerfile部署nodejs服务的方法步骤

    主要介绍了使用Dockerfile部署nodejs服务的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    liunx nodejs+nginx配置收藏版

    liunx nodejs+nginx配置收藏版liunx nodejs+nginx配置收藏版

    phonegap项目环境搭建

    PhoneGap项目环境搭建是开发跨平台移动应用的重要步骤,它允许开发者使用HTML、CSS和JavaScript来构建原生的移动应用程序。PhoneGap是一个开源框架,它基于Apache Cordova,并且提供了与设备硬件功能交互的能力,如...

    NodeJS安装及环境配置(windows)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者在服务器端使用 JavaScript。本文将详细介绍如何在 Windows 10 Pro(64 位)系统上安装 Node.js 并进行环境配置。 一、安装环境 在安装 ...

    appium+nodejs+AndroidSDK一套完整安装资源加步骤.rar

    appium自动化测试所需一整套资源包+安装部署配置环境操作过程,一条龙。 压缩包中包含: 1、nodejs安装包。 2、Appium-windows-1.18.3.exe安装包。 3、AndroidSDK:appium所需的插件资源文件。 4、安装步骤+环境变量...

    nodejs安装及环境配置

    **Node.js** 是一种开源、跨平台的JavaScript运行环境,它基于Chrome V8 JavaScript引擎构建,允许开发者使用JavaScript编写服务端应用。Node.js的设计理念是轻量级且高效,非常适合构建实时通信的应用。 **下载...

    phoneGap+android+myeclipse+nodejs+ADT+SDK

    如何快速搭建一个不用原生js的移动应用平台,集打包,开发,发布一体。这个文档非常不错哦 不会的可以问我, 也可以给我留言哦.

    nodejs V9 android arm64 版本,可执行程序,android系统内解压使用

    Node.js V9 for Android ARM64 是一个专为在Android设备上运行的64位ARM架构设计的Node.js版本。这个版本的Node.js是高度优化的,能够在Android系统的环境下执行JavaScript代码,支持本地应用程序开发和运行。Node....

    nodejs文件位于nodejs文件夹中,部署在云端;nodejsmysql文件是Android的

    nodejs文件位于nodejs文件夹中,部署在云端;nodejsmysql文件是Android的部分源代码,apk可以安装在手机上。一个简单的应用程序,主要帮助了解如何使用云服务器以及如何连接到它们

    nodejs环境整合包

    并将"D:\nodejs"加入系统环境变量PATH中,便于在任意位置执行node应用。 3. 下载npm源代码: https://github.com/isaacs/npm/tags 4. 将npm源代码解压到D:\npmjs目录中。 在命令提示符窗口中执行下面的操作,...

    python3.6+JDK++Nodejs+Appium最新版本环境整体搭建记录(带各步骤截图)

    通过本教程,我们可以了解到 Python JDK++Nodejs+Appium 环境的整体搭建过程,包括 Python、JDK、Nodejs、Appium、Android ADT & SDK 和 Appium-Doctor 等多个环境的搭建。同时,我们也了解到环境变量的配置和安装...

    Windows系统nodejs安装及环境配置步骤

    ### Windows系统下Node.js安装及环境配置步骤详解 随着Node.js在后端开发领域的广泛应用,越来越多的开发者选择将其作为首选的开发工具之一。对于Windows系统的用户来说,掌握正确的Node.js安装及环境配置方法尤为...

    NodeJS-PushServer

    NodeJS推送服务器v1 目标:实现在一台计算机上运行的套接字服务器。v2 客观的: 在多台机器上运行的套接字服务器的实现。 连接到不同服务器的客户端可以相互通信。v2.0 解决方案:使用ONE Redis Server实施发布/订阅...

    linux配置Vue开发需求nodejs环境部署

    1、 下载nodejs安装包 2、 解压nodejs安装包 3、 验证node是否能用 4、 配置nodejs全局使用 5、 应用nodejs操作 5.1 使用&符号后台运行进程 5.2使用forever让node.js持久运行

    nodejs服务部署在服务器本地不能访问问题

    nodejs服务器部署在服务器,外网不能访问问题

    nodejs安装及环境配置介绍

    nodejs安装及环境配置。一、下载Node.js 首先,你需要在Node.js的官方网站下载对应你电脑系统(Windows、macOS、Linux等)的安装包。 二、安装Node.js 双击你下载的.msi(Windows)或.pkg(macOS)文件开始安装。 ...

    phonegap webapp环境配置

    PhoneGap 是一个流行的开源框架,它允许开发者使用 HTML5、CSS3 和 JavaScript 来构建原生的移动应用...确保所有软件版本兼容,并且环境变量设置正确,这样你就可以愉快地开始使用 PhoneGap 开发跨平台的移动应用了。

    Idea 配置前端web nodejs项目

    Idea 配置前端 Web Nodejs 项目是指在 IntelliJ IDEA 集成开发环境中配置 Nodejs 项目的步骤。下面我们将详细讲解配置的步骤和相关知识点。 Idea 配置 Nodejs 项目 首先,我们需要在 IDEA 中安装 Nodejs 插件。...

    nodejs高大上的部署方式(PM2)

    目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种。 使用场合: supervisor是开发环境用。 forever管理多个站点,每个站点访问量不大,不需要监控。 nodemon 是开发环境使用,修改自动重启。 pm2 网站...

Global site tag (gtag.js) - Google Analytics