迁移到运行Ubuntu 12.04的Amazon EC2实例后,Apple Push Notification的Node.js node-apn模块停止工作

我正在使用node-apn模块来利用APNS(Apple推送通知服务)将通知推送到多个设备。 本地环境是Mac OS X Lion 10.7,并且在本地服务器上运行时代码运行得非常好。以下是代码片段:

var apns = require('apn'); var options = { cert: __dirname + '/PushDevCertKey.pem', certData: null, key: __dirname + '/PushDevCertKey.pem', keyData: null, passphrase: 'admin', ca: null, pfx: null, pfxData: null, gateway: 'gateway.sandbox.push.apple.com', port: 2195, rejectUnauthorized: true, enhanced: true, errorCallback: apnErrorCallback, cacheLength: 100, autoAdjustCache: true, connectionTimeout: 0 } var apnsConnection = new apns.Connection(options); var note = new apns.Notification(); note.expiry = Math.floor(Date.now() / 1000) + 3600; note.badge = 1; note.sound = 'ping.aiff'; note.alert = 'you have a new message'; note.payload = {'rid': roomId}; apnsConnection.pushNotification(note, deviceTokenArray); // i handle these events to confirm the notification gets // transmitted to the APN server or find error if any function log(type) { return function() { console.log(type, arguments); } } apnsConnection.on('error', log('error')); apnsConnection.on('transmitted', log('transmitted')); apnsConnection.on('timeout', log('timeout')); apnsConnection.on('connected', log('connected')); apnsConnection.on('disconnected', log('disconnected')); apnsConnection.on('socketError', log('socketError')); apnsConnection.on('transmissionError', log('transmissionError')); apnsConnection.on('cacheTooSmall', log('cacheTooSmall')); 

我将完全相同的代码移动到运行Ubuntu 12.04的Amazon EC2实例,并且在那里不起作用。 没有任何我处理的事件被触发。 我通过打印选项和apnsConnection对象来检查证书和密钥文件和path,在那里似乎没有问题。 我不知道问题是什么。 任何帮助将不胜感激。

检查你的node --version 。 在我的Mac上,自制软件安装了v0.10.12,但在服务器上运行的是v0.11.8-pre(错误)。 显然现在的节点apn不稳定下工作。

我有这个同样非常令人沮丧的问题,并在防火墙/ OpenSSH的东西之间猎杀,直到我意识到APNS连接仍然通过PHP工作。 Ray Wenderlich脚本是检查问题是否与节点或其他地方有关的一种快速方法。