Push notification AWS appsync和推送通知

Push notification AWS appsync和推送通知,push-notification,ionic3,chat,aws-appsync,Push Notification,Ionic3,Chat,Aws Appsync,我已经建立了一个离子应用程序,现在我想添加聊天功能到它。 我正在研究可以用来实现聊天的不同技术。 我考虑过使用应用程序同步,到目前为止,我唯一关心的是,如果我能看到哪些用户在消息发送事件发生时不在线,那么我就可以发送推送通知 或者,如果应用程序同步处理此问题并发送通知 谢谢你的帮助嘿,这是一个很好的问题。简而言之,AppSync SDK不处理即时状态跟踪,但您可以自己实现此功能,而无需太多麻烦 在我脑海中,一种方法是创建一个DynamoDB表“ActiveUsers”。在表上启用dynamodb

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

或者,如果应用程序同步处理此问题并发送通知


谢谢你的帮助

嘿,这是一个很好的问题。简而言之,AppSync SDK不处理即时状态跟踪,但您可以自己实现此功能,而无需太多麻烦

在我脑海中,一种方法是创建一个DynamoDB表“ActiveUsers”。在表上启用dynamodbttl()(使用一些“timestamp”属性),并使用一些唯一的用户属性(如username或userId)作为表的分区键

然后从AppSync创建一个突变。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秒,在启动时,或者根据一些其他标准,调用该变异。在用户连接良好的情况下,让应用程序调用另一个mutationmutation.goOffline,每当应用程序关闭时,它都会从DynamoDB中删除记录。如果用户没有良好的连接,因此客户端无法发送变异。goOffline变异,DynamoDB TTL可以为我们进行清理

要推送更新,当某人联机或脱机时,您可以向连接的客户端进行订阅订阅。使用此指令@aws\u subscribe([publishActiveChange]])。然后还定义突变.publishActiveChange突变,并让它返回用户id和用户的活动状态。为了完成这张图片,您将创建一个DynamoDB流,该流调用一个lambda函数,该函数调用Mutation.publishActiveChangeMutation,该函数在DynamoDB中删除或(新)创建对象时发布消息

您也可以订阅pinggoOffline突变,而不必担心DynamoDB流和lambda函数,但这种方法不会在客户端设备在调用goOffline之前离线时发布订阅。TTL仍将工作,但设备必须通过后续查询得到通知。这取决于您的需求,它工作得很好,并且具有不太复杂的优点


另一个需要考虑的是,DeNODB TTL不能保证立即发生,但在实践中表现良好(几分钟内)。但是,真正大的表可能会有一点滞后。

我们为什么不这样做呢@mparis我认为我们应该使用物联网核心服务来检测用户的离线状态,并通过与SNS结合使用AppSync来实现特定的推送通知功能。你认为呢?把你的变异解析器转换成管道,让最后一个有一个lambda数据源。在该lambda函数中,使用apn库配置并发送推送通知。使用if已经有一段时间了,效果非常好。我设想有一个类似的android推送通知库,尽管我没有使用它。看看。DeltaSync允许您与AWS AppSync GraphQL服务器执行自动同步。客户端将执行重新连接、指数退避等操作