我有一个带MobileHub
API Gateway
Lambda
,DynamoDB
和SNS
的后端版本的iOS应用。
我注意到MobileHub
的{{1}}功能已被Pinpoint
取代,我想使用此新服务创建通知系统。
当用户通过API Gateway
创建新帖子时,将触发lambda函数,我想我可以通过Pinpoint
向订阅者发送通知。
但我在Pinpoint
的官方网站上找不到任何示例或参考文档。
您是否有任何资源可用于此方案或任何想法?非常感谢你!
答案 0 :(得分:2)
取决于通知的含义,我假设您想向特定用户(pinpont端点)发送推送通知。
Pinpoint将与用户关联的每个设备存储为“端点”,通常由AWS客户端分析库(例如,放大分析)创建。
客户
使用放大分析库,我调用updateEndpoint,以便我可以指定可用于lambda的userId以及设备令牌,并删除optOut以便用户可以接收推送通知:
Lambda(node.js)
现在,您可以使用userId和精确的SDK发送推送通知。
示例:
const sendMessagesParams = {
ApplicationId: process.env.PINPOINT_APP_ID,
SendUsersMessageRequest: {
Users: {
[receiverUserId]: {}
},
MessageConfiguration: {
APNSMessage: {
Action: 'OPEN_APP',
Title: 'Message received',
SilentPush: false,
Body: `You have a new message`
},
GCMMessage: {
Action: 'OPEN_APP',
Title: 'Message received',
SilentPush: false,
Body: `You have a new message`
}
}
}
};
console.log('sendMessagesParams', JSON.stringify(sendMessagesParams));
pinpoint.sendUsersMessages(sendMessagesParams, (sendMessagesErr, sendMessagesData) => console.log('push sent')
对于您的特定情况,我设置了一个dynamodb流,并在表中的记录发生更改时触发一个lambda。创建lambda后,您可能需要手动添加IAM权限。
来源
答案 1 :(得分:1)
我在使lambda函数正常工作方面很费力,所以请将此答案作为Dylan w答案的补充。
import PushNotification from '@aws-amplify/pushnotification';
import Analytics from '@aws-amplify/analytics';
PushNotification.onRegister((token) => {
Analytics.updateEndpoint({
address: token,
channelType: 'APNS',
optOut: 'NONE',
// Customized userId
userId: "e236e3ea-bas9-4eae-967e-0eb9bcaca26d" // Example
})
});
'use strict';
const AWS = require('aws-sdk');
exports.handler = async (event, context) => {
var pinpoint = new AWS.Pinpoint();
const sendMessagesParams = {
ApplicationId: <YOUR_APPLICATION_ID>, // Find it in Pinpoint->All projects
SendUsersMessageRequest: {
Users:{<USER_ID>:{}}, // The same userId as set on the client. This way you can "follow" people if they switch device
MessageConfiguration:{
APNSMessage:{
Action:"OPEN_APP",
Title:"Message received",
Body:"You have a new message"
}
}
}
};
return await new Promise( (resolve, reject) => {
pinpoint.sendUsersMessages(sendMessagesParams, (sendMessagesErr, sendMessagesData) => {
if(sendMessagesErr) reject(sendMessagesErr)
if(sendMessagesData) resolve(sendMessagesData)
});
});
};
请注意,对精确定位的调用包含在一个诺言中。由于pinpoint.sendUserMessages
接受回调,因此继续执行(Node的异步特性),这将关闭lambda函数,并且您不会从回调函数获得任何输出或收到通知,而无需等待该函数完成。
答案 2 :(得分:0)
使用Amazon Pinpoint肯定可以做到这一点。您可以找到Javascript SDK文档here。
使用Pinpoint发送有两种模式。
因此,在Lambda支持的API中,您可以选择直接发送给订阅者(如果您有他们的地址),也可以选择发送整个订阅者(如果您已将端点加载到Pinpoint中)。