在我的移动应用程序中,用户可以订阅不同类别的文章/新闻,并且每当发布这些文章的新文章时,用户将收到推送通知 .

现在,应用程序的推送通知由Amazon SNS处理,即所有用户订阅了一个主题 . 但是,在这种情况下,由于文章可以在多于1个类别中,如果使用相同的逻辑处理通知(每个类别都有自己的主题ARN),如果订阅了两个类别,用户将最终收到重复通知,比如说A类和B类,新文章恰好属于A类和B类 .

为了解决这个问题,我将提出以下解决方案:

  • 每当用户通过SNS注册并创建其 endpoints 时, endpoints 将保存在我们的数据库中,与该用户的ID相关 .

  • 发布新文章时,将检索订阅该文章类别的所有用户

  • Server将使用SNS SDK并将所有检索到的用户的 endpoints 订阅到空主题

  • 通知将发送到该特定主题的 Channels

虽然这个解决方案对于小用户群可能是可行的,但我认为当用户群达到一定规模时可能存在扩展问题,即服务器可能需要调用 subscribe() 几十万甚至更多以便发送一次推送 .

是否还有其他可行的解决方案或方法来实现SNS?谢谢!