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 与证书是否对应
推送工具
- 添加设备token更加方便,直接通过scheme的方式添加。
- 添加证书,p12文件的base64编码
网友评论