apns推送测试(node 实现 + 推送测试小工具)

1、打开钥匙串找到推送证书
2、到处证书为cert.cer
3、导出私钥为key.p12
4、转换格式

$ openssl
OpenSSL> x509 -in cert.cer -inform DER -outform PEM -out cert.pem
OpenSSL> pkcs12 -in key.p12 -out key.pem -nodes

5、创建node工程文件夹,安装apn

npm install apn

6、创建推送实现文件apn.js

var apn = require('apn');
/*
token 可以在
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
这个方法里获取,直接打印出 deviceToken 的值就可以了,然后处理一下删除两端的尖括号和中间的空格
*/
var token = "9445ab6c046188daf9d421792f969f4963c59b267162816bcd1ac2828582baa6";


/*
 gateway.sandbox.push.apple.com 为apns开发环境的服务器地址
 发布环境的地址是 gateway.push.apple.com
 这个根据需要来选择,同时证书要对应。
 建议在开发环境下测试,不然万一推送错了就麻烦了
*/
var options = { "gateway": "gateway.sandbox.push.apple.com","cert": "cert.pem",
"key": "key.pem","production":false },
    
apnConnection = new apn.Connection(options),   
device = new apn.Device(token),
note = new apn.Notification();


note.expiry = Math.floor(Date.now() / 1000) + 60;
note.badge = 1;
note.sound = "defined";
note.alert = "happy every day";
//自定义参数
note.payload = {'messageFrom': 'Caroline'};
note.device = device;
apnConnection.pushNotification(note, device);
//以下是监听信息
apnConnection.on('connected',function() {
console.log("Connected");
});
apnConnection.on('transmitted',function(notification, device) {
console.log("Notificationtransmitted to:" + device.token.toString('hex'));
});
apnConnection.on('transmissionError',function(errCode, notification, device) {
console.error("Notificationcaused error: " + errCode + " for device ", device,notification);
});
apnConnection.on('timeout',function () {
console.log("ConnectionTimeout");
});
apnConnection.on('disconnected',function() {
console.log("Disconnectedfrom APNS");
});
apnConnection.on('socketError',console.error);

做的时候碰到了 如下错误

Notificationcaused error: 8 for device

未找到对应的设备
1、检查token是否正确,
2、项目bundle identifier 与证书是否对应


推送工具

基于SmartPush,写了个iOS版的推送工具

  1. 添加设备token更加方便,直接通过scheme的方式添加。
  2. 添加证书,p12文件的base64编码

你可能感兴趣的:(apns推送测试(node 实现 + 推送测试小工具))