使用 APNS(带或不带 AWS SNS)实时更新聊天应用程序?



我正在用 Swift 编写一个消息传递应用程序,人们可以在其中进行类似于短信或其他流行聊天应用程序的工作方式。支持 API 位于 AWS 上,用 C# 编写。

这里有一些有趣的点:

  1. 希望避免使用第三方的东西,如Firebase等,但愿意听取建议
  2. 目前不需要警报通知 - 没有弹出窗口、横幅等。 只是想在一个视图控制器上实时显示消息气泡 - 当且仅当该人盯着消息屏幕时。如果他们在应用程序上的其他地方,则不会发生任何反应。
  3. 我们不想提示用户询问他们是否同意此应用发送通知,因为除了新的聊天到达之外,我们不会向他们发送横幅或任何视觉内容。这是 APNS 的要求吗?我觉得这意味着有人可以说不,然后我们就无法实时更新聊天应用程序,这不会飞。

    我假设一个简单的方法是从消息视图控制器运行的某种计时器/循环,每隔一两秒它就会点击 API 并询问是否有新消息,但这对我来说似乎本质上是错误的 - 应用程序必须健壮,并且可能有数千或数十万人使用它 - 这是很多 API 请求, 在许多情况下,不可能有新消息,因此浪费了电话。这显然不是要走的路,对吗?

问题#1那么,我在想我应该使用 APNS,但是不确定它是否需要您提示用户请求他们允许从Apple 接收任何内容?再次我担心的是聊天气泡应该实时出现,并且不想让用户以某种方式看不到这些气泡(破坏应用程序(

如果 APNS 是要走的路,并且我必须提示他们,那么我假设流程是我将收集我的设备 ID(在 appdelegate 中创建,保存在我的 C# 数据库中,并与每个消息线程相关联(,每当有人键入消息时,它都会转到我的 API,我将其保存在消息数据库表中, 然后我向 APNS 发送一条消息到每个人的设备 ID。

苹果将这个排队,并发送给每个人,如果他们在屏幕上,那么消息就会进来。

这就是我应该如何利用 APNS 来实现我想要的吗?

问题#2我看到其他人建议使用SNS(与APNS结合使用(,但我不明白为什么。APNS 不是既充当适当的队列又充当通知服务,从而完全不需要使用 AWS 的 SNS/SQS 吗?这对我来说似乎是多余的,但也许我只是不明白为什么你需要这两种技术背后的想法。

感谢任何人提前的时间,如果他们能为我阐明这一点!

谢谢!

问题 1

即使您使用的是 WebSockets(如@stevenpcurtis所述(,您仍然需要通知用户用户在应用程序处于后台/挂起时收到消息的事实。是的,您必须"强制"您的用户为应用程序启用通知并解释他为什么需要它。根据经验,如果用户安装了信使,他就会了解通知的用途以及启用它的原因。

问题2

从移动角度来看,当用户在应用程序处于后台或挂起状态时收到通知时,SNS 仍将提供推送通知。从后端的角度来看,您可以使用 SNS。

结论:

从移动的角度来看,您有两种模式:

  • 应用程序处于活动状态 - 通常由您决定如何接收消息。(Web 套接字、推送等(
  • 应用程序
  • 在后台或已挂起:您需要一个工具来通知用户有关更改的信息,而无需控制应用程序。这是推送通知服务的工作。从后端发送推送的方式取决于您。

您还可以查看此问题以获取更多信息。

最新更新