swift - 使用 APNS 实时更新聊天应用程序(有或没有 AWS SNS)?

标签 swift apple-push-notifications swift4 amazon-sns

我正在用 Swift 编写一个消息应用程序,人们可以像短信或其他流行的聊天应用程序一样进行聊天。支持 API 位于 AWS 上,用 C# 编写。

这里有一些有趣的地方:

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

    我认为一种简单的方法是从消息 View Controller 运行某种计时器/循环,每隔一两秒它就会访问 API 并询问是否有新消息,但这对我来说似乎本质上是错误的 - 应用程序必须是健壮的,并且可能有成千上万的人使用它 - 这是大量的 API 请求,并且在许多情况下可能没有新消息,因此浪费了调用。这显然不是正确的方法,对吗?

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

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

Apple 会将其排队并发送给每个人,如果他们在屏幕上,则会收到消息。

这就是我应该利用 APNS 来实现我想要的目标的方式吗?

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

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

谢谢!

最佳答案

问题 1

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

问题 2

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

结论:

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

  • 应用程序处于事件状态 - 通常由您决定如何接收消息。 (网络套接字、推送等)
  • 应用程序位于后台或已暂停:您需要一个工具来通知用户有关更改的信息,而无需控制应用程序。这是推送通知服务的工作。从后端发送推送的方式取决于您。
<小时/>

您还可以查看This question获取更多信息。

关于swift - 使用 APNS 实时更新聊天应用程序(有或没有 AWS SNS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52638642/

相关文章:

swift - 添加嵌套字典导致 JSONSerialization 返回 nil

apple-push-notifications - Amazon SNS 是否支持使用 Apple 推送通知服务进行基于 token 的身份验证?

iOS 11 从 UITableView 或 UIScrollView 获取 visibleHeight 和 contentInset

arrays - 从 SwiftUI 中的列表中删除绑定(bind)

ios - 使用 Parse 刷新数据

ios - 如何在我的 UINavigationBar 后面获得模糊效果

uinavigationbar - 自定义展开转场期间导航栏为黑色

java - APNS - 发送消息失败

ios - 添加SDK(Pushwoosh SDK)

Swift 4 协议(protocol)组合一致性