发送推送通知后,应用程序卡住“inputPEM密码”
我正在使用apn发送从node.js应用程序到苹果的推送通知。
我的代码:
// 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:
在terminal:
/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
但我仍然在应用程序控制台中得到这个 – 但是当按下input,它停止拍摄这个消息,直到下一个请求(在删除通行证之前,它显示了许多消息,直到重新启动应用程序,还单击input时,或密码)…
我发现了这个问题
我必须添加证书,密钥和密码短语的反馈选项。
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' };
看起来您在生成私钥和CSR时遇到了密码挑战。 只要你知道密码,使用openssl将其删除到一个新的文件,你将需要使用。
openssl rsa -in private.key -out private-wo.key -passin pass:<PASSWORD>