push-notification - AWS appsync 和推送通知

标签 push-notification ionic3 chat aws-appsync

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

或者,应用程序同步是否可以开箱即用地处理此问题并发送通知?

感谢您的帮助

最佳答案

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

我想到的一种方法是创建一个 DynamoDB 表“ActiveUsers”。在表上启用 DynamoDB TTL ( https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html )(使用一些“时间戳”属性)并使用一些唯一的用户属性(例如用户名或 userId)作为表的分区键。

然后从 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(mutations: ["publishActiveChange"]) 进行订阅 Subscription.onActiveChange 。然后还定义 Mutation.publishActiveChange 突变并让它返回用户 ID 和用户的事件状态。为了完成这个图,您将创建一个调用 lambda 函数的 DynamoDB 流,该函数调用 Mutation.publishActiveChange 突变,无论在 DynamoDB 中删除或(新)创建对象,都会发布消息。

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

另一件需要考虑的事情是,DynamoDB TTL 不能保证立即发生,但实际上表现良好(几分钟内)。但是,非常大的表可能会出现一点滞后。

关于push-notification - AWS appsync 和推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52047273/

相关文章:

ios - 当应用程序处于终止状态时在 iOS 中接收推送通知

android - 显示解析通知,打开操作不会启动 Activity

php - 推送通知角标(Badge)计数未在 iOS 上更新

Android Notification Builder 不播放自定义声音

css - ion-item/ion-native 背景颜色

angular - 适当的可观察管理

flutter - 错误 : You should set `SILENT_OBSERVATORY` to true when debugging the VM

css - Ionic 3,需要帮助导入自定义字体(全新元素)

android - 如何使用 aSmack 在 Android 设备上获取 Openfire 聊天记录?

php - 如何在 php 和 sql 中创建聊天对话列表?