【问题标题】:Recommended way to implement Push Notifications实现推送通知的推荐方式
【发布时间】:2025-12-27 22:15:11
【问题描述】:

我正在为 Android 和 iPhone 构建一个应用程序。此应用需要接收用户收件箱中新消息的通知。作为一个应用程序开发的菜鸟,我想知道你们中是否有人可以提出实现我需要的最佳方法。

我在 Android 上的阅读量比 iPhone 上的多,所以我对后者的理解可能有所欠缺。根据我阅读和理解的内容,我相信我需要在我的应用程序第一次启动时启动服务(或指示设备在每次设备启动时启动服务或其他东西)。然后,该服务将与服务器交互以接收通知并显示它们。单击通知将启动应用程序。

我的选择是

  1. C2DM 或 APNS

  2. 城市飞艇

  3. 我自己的服务器使用大部分空闲的 TCP 连接与客户端。

根据我选择的选项,我的客户端实现以及服务器端实现会发生变化。

你们会推荐什么?有没有其他方法可以做我需要做的事情?

非常感谢任何帮助。

更新:

基于 jbat100 答案。 Apple 不允许我编写自己的服务器直接与我的应用程序进行通信以获取通知这一事实意味着必须使用 APNS。所以选项 3 完全被淘汰了。这意味着我们要么使用 Urban Airship,要么直接与 APNS 和 C2DM 交互。根据我的研究,这两种情况所涉及的工作量是相当的,因此仅仅为了支持通知而额外支付 4-5K /mo 是没有意义的。所以我计划实施选项 1。如果你们中的任何人有不同的看法,请在下方留下 cmets。

谢谢。

【问题讨论】:

标签: android iphone ios push-notification apple-push-notifications


【解决方案1】:

它们必须单独处理。对于 iOS 推送通知,您必须通过 Apple 推送通知服务(编程指南 here),它们有一个非常具体的协议,您的服务器必须遵守 Provider Communication with Apple Push Notification Service 中描述的协议。不了解Android,它可能会完全不同,不那么集中。

【讨论】:

  • 这回答了我的部分问题。这意味着 APNS 是 iOS 设备唯一可行的方法。
【解决方案2】:

基于 jbat100 答案。 Apple 不允许我编写自己的服务器直接与我的应用程序进行通信以获取通知这一事实意味着必须使用 APNS。所以选项 3 完全被淘汰了。这意味着我们要么使用 Urban Airship,要么直接与 APNS 和 C2DM 交互。根据我的研究,这两种情况所涉及的工作量是相当的,因此仅仅为了支持通知而额外支付 4-5K /mo 是没有意义的。所以我计划实施选项 1。如果你们中的任何人有不同的看法,请在下方留下 cmets。

【讨论】:

    【解决方案3】:

    C2DM 可能是最简单的。但是,我认为您也可以尝试 Urban Ship。实现自己的服务器很痛苦。

    【讨论】:

      【解决方案4】:

      我的情况非常相似,我首先发布了我的 Android 应用程序,现在正在开发一个 iOS 应用程序。对于 Android,我使用 C2DM 实现了推送通知,并从我的 Google App Engine (GAE) 应用程序发送通知。 C2DM 基本上需要向 Google 的服务器发送 HTTP 消息。因此,您将 HTTP POST 发送到 URL https://android.apis.google.com/c2dm/send

      然而,iOS 需要专用端口上的专用 TCP 连接,GAE 环境不允许任何外部协议,除了端口 80 上的 HTTP。所以,我进行了很多研究,Urban Airship 似乎是答案。它们提供了一个 HTTP 接口,我可以从我的 GAE 环境中访问该接口,并将其转换为 Apple 服务器能够理解的协议。不过,他们的定价似乎令人困惑——每月有 100 万条免费通知,之后每条通知只有 0.1 美分。这很奇怪,因为他们每月免费赠送 1000 美元?经济上很奇怪。我正在考虑试用它们,但我认为最好的大容量替代方案是使用您自己的实现,并将其部署在亚马逊的 AWS 上或购买其他便宜的第三方托管。

      【讨论】:

        【解决方案5】:

        重要提示:C2DM 已于 2012 年 6 月 26 日正式弃用。这意味着 C2DM 已停止接受新用户和配额请求。不会向 C2DM 添加任何新功能。但是,使用 C2DM 的应用程序将继续工作。鼓励现有 C2DM 开发人员迁移到新版本的 C2DM,称为 Android 版 Google Cloud Messaging (GCM)。有关更多信息,请参阅 C2DM 到 GCM 迁移文档。开发人员必须使用 GCM 进行新的开发。

        【讨论】:

          【解决方案6】:

          我无法解释等式的 Android 方面,但我可以告诉你,我最近在 Heroku 上设置了一个非常简单的 Rails 应用程序,它通过 APNS 向我的 iOS 应用程序发送推送通知。我使用了houston gem,并且在我开始工作后不到 20 分钟就在我的 iOS 应用程序中收到了推送通知。

          【讨论】: