使用node-apn发送Push始终返回无效标记(8)

我试图让我的node.js应用程序成功地发送推送通知到我的设备。 在开始的时候,我确定我的推送证书/密钥出错了,所以我在Ruby中写了同样的东西,只是为了确保它完美地工作。

当我尝试使用nomad-cli(命令行工具)或只是在Ruby中使用Nomad它工作正常,它需要一个包含密钥和证书的PEM文件

它看起来像这样

apn push "21329bc4164a56226a982f3daea4e3ace5e6c1788e4dc3a75248eca330b280a300" -c ./apns.pem -m "CLI Hello"

并返回“1推送通知成功发送”,立即显示在我的设备上。

在我的node.js代码中,我使用的是node-apn,它需要单独的证书和关键的PEM文件。 所以我尝试用各种方法分离,但我总是得到相同的错误:

无效令牌(8)

这是没有道理的,因为同样的道理与我写的Rubytesting中的同一个PEM文件一起工作…

我真的把我这些秃头的头发拉在这里…现在已经呆了两天了。

我尝试用以下方法分离:

  • 试图将p12转换为pem,并在证书/关键字段中使用PEM
  • 转换为PEM,然后手动打开PEM,并将其分离为key.pem和cert.pem(使用-----BEGIN CERTIFICATE----------BEGIN RSA PRIVATE KEY-----
  • 尝试分开使用以下命令: openssl pkcs12 -in apns.p12 -nocerts -out key.key // Extract key openssl rsa -in key.key -outform PEM -out key.pem // Decrypt key openssl pkcs12 -in apns.p12 -clcerts -nokeys -out cert.pem // Extract Certificate

用所有这些方法,我的node.js代码失败,错误代码为8.我的node.js代码如下所示:

 let apn = require('apn') let conn = new apn.connection({cert: "_private/certs/dev/cert.pem", key: "_private/certs/dev/key.pem", production: false}) let note = new apn.notification() note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now. note.badge = 3; note.sound = "ping.aiff"; note.alert = "\uD83D\uDCE7 \u2709 You have a new message"; note.payload = {'messageFrom': 'Caroline'}; conn.pushNotification(note, new apn.Device("21329bc4164a56226a982f3daea4e3ace5e6c1788e4dc3a75248eca330b280a300")) conn.on('error', error => { console.log("ERROR" + error) }) conn.on('transmitted', (notification, device) => { console.log("TRANS") console.log(notification) console.log(device) }) conn.on('completed', () => { console.log("COMPLETED") }) conn.on('transmissionError', (errorCode, notification, device) => { console.log("TRANS ERR") console.log(notification) console.log(device) console.log(errorCode) }) 

我真的把我的秃头发拉了。 希望有人能帮助:)谢谢。

 conn.pushNotification(note, new apn.Device("<21329bc4 164a5622 6a982f3d aea4e3ac e5e6c178 8e4dc3a7 5248eca3 30b280a300>")) 

令牌的格式是这样的