一台服务器向Android和iOS设备发送推送通知

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

我们要开始推送通知到这些应用程序。

Android有GCM。 苹果有APNS。

但是我们想要创build一个可以在Android和iOS上运行的API。

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

作为一个小背景,这是一个大学设置多个学院的应用程序,以及远程教育可能会使用该服务。 这是我们在组织中使用的方法。 如果你看APNS的工作方式,可以通过发送带有令牌标识的APNS服务的Web呼叫来使用它。 GCM非常接近相同types的系统。 基本上创build一个JSON包并将其发送到所需的服务。

这是我们用来创build此服务的步骤。

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

  2. 从这里我们创build了几个Python脚本,发送数据做所需的服务,无论是ios还是android。 这些脚本从数据库中收集适当的数据,并将打包的数据(JSON包)发送给APNS以获取ios消息,并将GCM发送给Google云。

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

其余的实施由您决定使用该服务的最佳方式。 例如,当检查无效设备时,由于我们计划在多个应用程序中使用同一台服务器,因此我们可以发送设备,令牌,应用程序或应用程序所需的任何其他types,以便将其与我们生成的其他设备区分开来,每个想要使用该服务的应用程序都可以。 我希望这可以帮助你,并告诉你如何做到这一点。

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

对于APNS,也许你可能会认为这个分叉版本的PyAPNS增强了消息支持。
https://github.com/jimhorng/PyAPNs
这意味着它将捕获错误消息的错误响应,并重新发送由APNS丢弃的消息,同时在错误消息和接收错误响应之间发送消息。

解:

  • 非阻塞ssl套接字连接发送通知而不用等待响应。
  • 一个单独的线程,用于不断检查来自读连接的错误响应。
  • 发送通知缓冲区,用于重新发送失败通知后发送的通知,或通过apnsclosures任意连接。 (参考minorblend的非阻塞apns拉取请求,hagino3000增强的消息)

结果:

  • 以1000 /秒的吞吐量发送通知
  • 在第一次通知发送失败的情况下,1秒后出现错误响应,同时发送999次通知被APNS丢弃,所有丢弃的999次通知将被重新发送,而不会丢失任何通知。 用相同的逻辑,如果通知重新发送失败,它将在发送失败之后重新发送剩余的重新发送通知。

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

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