应用程序坚持使用'输入PEM密码'发送推送通知后

时间:2014-05-21 13:38:35

标签: node.js certificate apple-push-notifications

我正在使用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

但是我仍然在应用程序控制台中得到这个 - 但是当按下回车键时,它会停止拍摄此消息,直到下一个请求(在删除通行证之前,它会显示许多消息,直到重新启动应用程序,同时点击输入,或者密码)......

2 个答案:

答案 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>