AWS SNS(Amazon Simple Notification Service)对APNs(Apple Push Notification service)的令牌连接支持可以通过以下步骤完成:
在AWS控制台中创建一个SNS主题(Topic),并获取其ARN(Amazon Resource Name)。
在Apple开发者中心创建一个新的APNs证书,并下载证书文件(.p12格式)。
将证书转换为.pem格式,可以使用以下命令:
openssl pkcs12 -in cert.p12 -out cert.pem -nodes
npm install aws-sdk apn
const AWS = require('aws-sdk');
const apn = require('apn');
// 设置AWS配置
AWS.config.update({
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
region: 'us-west-2' // 根据实际情况更改区域
});
// 创建SNS实例
const sns = new AWS.SNS();
// 创建APNs连接
const apnProvider = new apn.Provider({
token: {
key: 'APNS_AUTH_KEY.p8', // 替换为你的APNs身份验证密钥文件路径
keyId: 'APNS_AUTH_KEY_ID', // 替换为你的APNs身份验证密钥ID
teamId: 'APPLE_TEAM_ID' // 替换为你的Apple开发团队ID
},
production: false // 设置为true表示生产环境,false表示沙盒环境
});
// 订阅SNS主题
sns.subscribe({
Protocol: 'application',
TopicArn: 'YOUR_SNS_TOPIC_ARN',
Endpoint: 'DEVICE_TOKEN' // 替换为目标设备的令牌
}, (err, data) => {
if (err) {
console.log('Subscription failed:', err);
} else {
console.log('Subscribed successfully:', data);
}
});
// 发送消息到SNS主题
sns.publish({
Message: 'Hello from AWS SNS!',
TopicArn: 'YOUR_SNS_TOPIC_ARN'
}, (err, data) => {
if (err) {
console.log('Publish failed:', err);
} else {
console.log('Published successfully:', data);
}
});
// 发送消息到APNs设备
const note = new apn.Notification();
note.expiry = Math.floor(Date.now() / 1000) + 3600; // 设置消息过期时间
note.badge = 1; // 设置应用图标上的角标数
note.sound = 'ping.aiff'; // 设置通知音效
note.alert = 'Hello from APNs!'; // 设置通知内容
note.payload = { messageFrom: 'AWS SNS' }; // 设置自定义有效负载
apnProvider.send(note, DEVICE_TOKEN).then((result) => {
console.log('APNs message sent:', result.sent);
console.log('APNs failed tokens:', result.failed);
});
// 关闭APNs连接
apnProvider.shutdown();
请注意将代码中的YOUR_ACCESS_KEY
,YOUR_SECRET_ACCESS_KEY
,us-west-2
,APNS_AUTH_KEY.p8
,APNS_AUTH_KEY_ID
,APPLE_TEAM_ID
,YOUR_SNS_TOPIC_ARN
,DEVICE_TOKEN
替换为实际的值。
这样,你就可以使用AWS SNS与APNs建立令牌连接,并发送推送通知到iOS设备。
上一篇:AWS SNS短信发送失败
下一篇:AWS SNS队列行为