APNs(英文全称:Apple Push Notification service),中文翻译为:苹果推送通知服务.
本文只记录apns node版本接入和一些调试经验,不涉及证书申请及app端开发。
node有非常成熟apn相关模块,又快又陡。
模块文档:https://www.npmjs.com/package/apn
使用苹果APN首先需要准备以下参数
- 服务端证书(开发环境证书和生产环境证书)p12格式(或其他格式)
- 证书解压密码 app包名证书解压密码
- app包名app包名
- 测试而言还需要某个待推送app去获取到当前devicetoken测试而言还需要某个待推送app去获取到当前devicetoken
PS:这里比较重要是生产环境和开发环境,开发环境证书是指APP直接通过mac安装到手机。生产环境则app需要上传apple store下载。两个环境的deviceToken 不能通用。一定要分清环境。
Sample code:
const apn = require('apn');
const options = {
pfx:"./服务端证书.p12",//证书路径
passphrase:"123456",//证书解压密码
production:true //是否是生产环境
};
var apnProvider = new apn.Provider(options);
let note = new apn.Notification();
note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
note.badge = 1;
note.sound = "ping.aiff";
note.alert = "\uD83D\uDCE7 \u2709 You have a new message";//待推送显示内容
note.payload = {'messageFrom': 'John Appleseed'};
note.topic = "com.xj.app.doorbell";//app包名
note.compiled = null;
let deviceToken = "bf5ce911111111a4a8f083c6024f664e9fb716fa6ec34e313d083882aaaaaaaa";//deviceToken 由app提供
apnProvider.send(note, deviceToken).then( (result) => {
console.info(result);
console.info(JSON.stringify(result));
});