AWS 应用同步和推送通知



我已经构建了一个离子应用程序,现在我想在其中添加聊天功能。 我正在研究可用于实现聊天的不同技术。 我考虑过使用应用程序同步,到目前为止我唯一关心的是,如果我可以看到哪些用户在消息发送事件的那一刻不在线,所以我可以发送推送通知。

或者,如果应用同步开箱即用并发送通知?

感谢您的任何帮助

嘿,这是一个很好的问题。简短的回答是,AppSync SDK 不会处理开箱即用的状态跟踪,但您可以自己实现此功能,而不会有太多麻烦。

在我的头顶上,一种方法是创建一个 DynamoDB 表"活动用户"。在表上启用 DynamoDB TTL (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html((使用某些"时间戳"属性(,并使用一些唯一的用户属性(如用户名或用户 ID(作为表的分区键。

然后从 AppSync 创建一个Mutation.ping突变,该突变进行如下所示的PutItem调用:

{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
"userId": $util.dynamodb.toDynamoDBJson($ctx.identity.username)
},
"attributeValues" : $util.dynamodb.toMapValuesJson({
timestamp: $util.time.nowEpochSeconds() + 300 # some amount of time
})
}

然后,从客户端,您将每 N 秒、在启动时或基于其他一些标准调用一次该突变。如果用户连接良好,请让应用程序调用另一个突变Mutation.goOffline,每当关闭应用程序时,它都会从 DynamoDB 中删除记录。如果用户的连接不好,因此客户端无法发送Mutation.goOffline突变,DynamoDB TTL 可以为我们启动清理。

要推送更新,当有人联机或脱机时,您可以使用此指令@aws_subscribe(突变:["publishActiveChange"](进行订阅Subscription.onActiveChange。然后,还要定义Mutation.publishActiveChange突变,并让它返回用户的用户 ID 和活动状态。为了完成图片,您将创建一个 DynamoDB 流,该流调用一个 lambda 函数,该函数调用Mutation.publishActiveChange突变,无论对象被删除还是(新(在 DynamoDB 中创建,都会发布消息。

您也可以订阅ping和 goOffline 突变,而不打扰 DynamoDB 流和 lambda 函数,但此方法不会在客户端设备脱机时发布订阅,然后再调用goOfflineTTL 仍将工作,但设备必须通过后续查询获得通知。根据您的要求,这工作得很好,并且具有不那么复杂的好处。

另一件需要考虑的事情是,DynamoDB TTL 不能保证立即发生,但在实践中表现得相当不错(在几分钟内(。但是,非常大的表可能会看到一些滞后。

最新更新