我正在使用apn从node.js App向Apple发送推送通知。
我的代码:
// send to development****
var dev_cert_path = path.join(__dirname, '..', 'cert.pem');
var dev_key_path = path.join(__dirname, '..', 'key.pem');
var devOptions = { "gateway": "gateway.sandbox.push.apple.com" , "cert": dev_cert_path, "key": dev_key_path, "passphrase":'XXXXX'};
var devApnConnection = new apn.Connection(devOptions)
, devMyDevice = new apn.Device(token)
, devNote = new apn.Notification();
devNote.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
devNote.badge = 3;
devNote.sound = "xxx.aiff";
devNote.alert = message;
devNote.payload = {'messageFrom': ''};
devApnConnection.pushNotification(devNote, devMyDevice);
var options = {
"batchFeedback": true,
"interval": 1
};
var devFeedback = new apn.Feedback(options);
devFeedback.on("feedback", function(devices) {
devices.forEach(function(item) {
logger.debug("device error : " + item.device);
// Do something with item.device and item.time;
});
});
devApnConnection.on('transmitted', function(res){
logger.debug("sent this message:"+JSON.stringify(devNote)+ " to this device: " + devMyDevice);
});
devApnConnection.on('error', function(res){
logger.error("sending message failed to this device: " + devMyDevice + " data: " + JSON.stringify(res) );
});
}
catch(e)
{logger.error("Push notification error: ",e.message);}
我的问题:
向node.js发送请求时,它会发送推送通知,但我在终端中收到了很多Enter PEM pass phrase:
:
/projects/my_app$ node app.js
POST /requests 200 14ms
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
Enter PEM pass phrase:
所以我的应用程序被卡住,直到重新启动节点...... 有什么想法吗?
修改
我尝试从文件中删除密码:
openssl rsa -in key.pem -out nopassword.pem
但是我仍然在应用程序控制台中得到这个 - 但是当按下回车键时,它会停止拍摄此消息,直到下一个请求(在删除通行证之前,它会显示许多消息,直到重新启动应用程序,同时点击输入,或者密码)......
答案 0 :(得分:6)
我发现了问题...
我必须在反馈选项中添加证书,密钥和密码。
var options = {
"batchFeedback": true,
"interval": 300
};
var devFeedback = new apn.Feedback(options);
devFeedback.on("feedback", function(devices) {
devices.forEach(function(item) {
logger.debug("device error : " + item.device);
// Do something with item.device and item.time;
});
});
选项应该是:
var options = {
"batchFeedback": true,
"interval": 1,
"production": false,
"cert": dev_cert_path,
"key": dev_key_path,
"passphrase":'XXXXX'
};
答案 1 :(得分:0)
在生成私钥时,您似乎会设置密码挑战。 CSR。只要您知道密码,就可以使用openssl将其剥离到您需要使用的新文件中。
openssl rsa -in private.key -out private-wo.key -passin pass:<PASSWORD>