【问题标题】:One server sending push notifications to Android and iOS devices一台服务器向 Android 和 iOS 设备发送推送通知
【发布时间】:2013-12-07 16:45:07
【问题描述】:

我们的组织有一个 Android 应用和一个 iOS 应用。

我们想开始向这些应用推送通知。

Android 有 GCM。 苹果有APNS。

但我们想创建一个适用于 Android 和 iOS 的 API。

设置服务器以便在需要发送推送通知时确切知道将消息发送到哪个服务器的最简单方法是什么?

【问题讨论】:

    标签: android ios push-notification apple-push-notifications google-cloud-messaging


    【解决方案1】:

    我使用名为 Parse 的服务将通知推送到 Android 和 iOS。他们有很好的文档和库可用。你可以在这里获得一些细节:https://parse.com/products/push

    【讨论】:

    • 有没有办法在不使用第三方服务的情况下做到这一点?
    • @Pixel Crunch Parse 服务是免费推送的吗?我参考了它的文档。因为它被指定为免费帐户,您有 30 个请求/秒。你能解释一下吗?
    • 解析推送服务在 1.000.000 个唯一收件人中是免费的。 parse.com/plans
    • @Pepster 但我想我们可以将 Parse 代码移动到自己的服务器以继续服务。
    【解决方案2】:

    作为一个小背景,这是针对多个大学应用程序以及远程教育可能正在使用该服务的大学环境。这是我们在组织中使用的方法。如果您查看 APNS 的工作方式,只需使用令牌 ID 向 APNS 服务发送 Web 调用即可使用它。 GCM 非常接近于同一类型的系统。基本上创建一个 JSON 包并将其发送到所需的服务。

    这是我们用于创建此服务的步骤。

    1. 服务器管理员创建了一个可以调用的服务器和数据库,用于从 android 和 ios 设备收集令牌。当设备注册时,我们还会发送它是什么类型的设备。这是可能的,因为我们只是将数据发送到已创建的数据库。

    2. 然后我们从这里创建了几个 python 脚本,它们发送数据执行所需的服务,无论是 ios 还是 android。这些脚本从数据库中收集适当的数据,并将打包的数据(JSON 包)发送到用于 ios 消息的 APNS 和用于谷歌云的 GCM。

    3. 我们还创建了一个 Web 界面,以便那些需要向设备发送消息的人可以。

    实施的其余部分由您决定使用该服务的最佳方式。例如何时检查无效设备, 因为我们计划将同一服务器用于多个应用程序,所以我们可以发送设备类型、令牌、应用程序或应用程序所需的任何其他内容,以将其与我们生成的其他应用程序区分开来,以便每个想要使用该服务的应用程序都可以.我希望这对您有所帮助,并为您提供一些关于如何完成此任务的想法。

    【讨论】:

      【解决方案3】:

      对于 APNS,也许你可以考虑这个具有增强消息支持的 PyAPNS 的分叉版本。
      https://github.com/jimhorng/PyAPNs
      这意味着它将捕获失败消息的错误响应,并在失败消息之间发送和接收错误响应时重新发送被 APNS 丢弃的消息。

      解决方案:

      • 非阻塞 ssl 套接字连接无需等待响应即可发送通知。
      • 用于不断检查读取连接的错误响应的单独线程。
      • 已发送通知缓冲区,用于在通知失败或 apns 关闭任意连接后重新发送通知。 (参考minorblend的非阻塞apns pull request,hagino3000的增强消息)

      结果:

      • 以 1000/秒的吞吐量发送通知
      • 在更糟糕的情况下,当第一个通知发送失败,错误响应在 1 秒后响应,同时发送的 999 通知被 APNS 丢弃,所有丢弃的 999 通知将被重新发送而不会丢失任何一个。同理,如果重发通知失败,则在重发失败后会重发剩余的重发通知。

      对于GCM,你可以考虑https://github.com/geeknam/python-gcm

      对于支持两个或多个移动提供商的通用包装器: https://github.com/Redth/PushSharp

      【讨论】:

        猜你喜欢
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 2019-05-09
        • 1970-01-01
        相关资源
        最近更新 更多