【问题标题】:Are pushed notifications to mobile phones really pushed?推送到手机的通知真的推送了吗?
【发布时间】:2015-10-27 09:06:34
【问题描述】:

我知道通知可以通过http/s推送到服务器,但手机真的可以从这些服务器推送吗?从技术上讲,我猜测移动设备实际上会轮询通知服务器以查看是否有任何新通知,这是一种“伪推送”。

所以这就是我的问题 - 手机是否真正接收实时推送通知,或者它们实际上是在轮询?我问的原因是,当用户四处走动时,移动电话在网络上拥有一个不断开放的桅杆通道似乎是非常昂贵的。有谁知道技术细节是什么?

【问题讨论】:

    标签: android ios mobile push-notification


    【解决方案1】:

    Apple 推送通知通过 TCP 连接传送到设备。 iOS 设备在port 5223 上启动 TCP 连接(如果无法到达 5223,则在 WiFi 上回退到 443)。

    一旦建立 TCP 会话,保持 TCP 连接处于活动状态只需要很少的流量 - 只是偶尔的保持活动数据包。

    当要发送推送通知时,Apple 服务器会寻找与设备的现有连接。如果找到连接,则通过已建立的连接发送数据流,因此从这个意义上说,它是“推送”。

    如果没有与目标设备的现有连接,则消息将保存在 Apple 服务器上,直到设备连接(或消息过期),因此在此级别上,它更像是“拉动” - 设备启动尽可能连接。

    我想 GCM 的工作方式类似。

    【讨论】:

      【解决方案2】:

      在云端 Google 服务器上只有一个 TCP 套接字以接受模式等待。 TCP 连接已由 Goggle Play 应用程序启动。这就是为什么必须在设备上安装 Google Play 才能使 Google Cloud Messaging (GCM)(以前的 Android Cloud to Device Messaging Service - C2DM)工作。

      当这个 TCP 客户端套接字接收到一些消息时,该消息包含信息,例如它应该被寻址到的应用程序的包名称,当然还有数据本身。这些数据被解析并打包成一个意图广播并最终由应用程序接收。

      即使设备的无线电状态变为“空闲”模式,TCP 套接字仍保持打开状态。应用程序不必运行即可接收意图。

      更多信息http://developer.android.com/google/gcm/gcm.html

      【讨论】:

      • 应用程序不一定要运行,但 something 可以。
      • 实际上不需要运行任何东西,系统会发送广播来唤醒你的应用程序。
      • @Than:手机上的某些东西必须在运行才能接收广播并做出响应。这么说吧,如果你的手机关机了,就收不到广播了。
      • @OliverCharlesworth 正确。您的手机需要处于空闲或开机状态。虽然如果您的手机没有连接到网络并且广播发送失败,那么它将在重新连接时再次发送。
      • 不过,这实际上并没有回答问题,即电话是否正在轮询(在硬件/通信堆栈级别,隐式地)。 (虽然这个问题实际上是题外话......)
      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2021-06-11
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多