在移动消息应用程序中,是否应该从服务器或客户端发送消息?

时间:2014-01-19 19:24:00

标签: iphone mobile ios7 push-notification apple-push-notifications

在Snapchat,Line,Kik,Groupme等应用中,用户可以通过联系人列表向多人发送消息。

我正在构建一个具有类似功能的消息传递应用程序,最初只是添加服务器并让服务器存储设备令牌并从服务器发送通知。 (顺便说一下,我使用Urban Airship发送推送通知。)所以我想象的方式是这样的:

  1. 用户A向用户B写“你好”
  2. “Hi there”被发布到我的服务器,在那里它存储在DB中供以后检索
  3. 2成功后,服务器将“Hi there”发布到Urban Airship服务器(Server有联系人列表,其中包含所有设备ID信息)
  4. 然后我意识到这也可以在客户端完成,也就是说,如果可以在他们的应用程序上存储用户联系人的设备令牌。所以这就是它的工作原理:

    1. 用户A向用户B写“你好”
    2. “Hi there”被发布到我的服务器,它将存储在DB中供以后检索
    3. 2成功后,客户端(iPhone)将“Hi there”直接发布到Urban Airship服务器(该应用程序将所有用户联系人的设备ID存储在核心数据中)
    4. 我是推送通知的新手,所以甚至不知道在客户端存储设备令牌是否安全/可行,但我觉得它在服务器负载(我的服务器)方面会更有效率因为所有推送通知请求都是从客户端发送的。关于最佳做法是什么的任何建议?谢谢

2 个答案:

答案 0 :(得分:1)

实际上这听起来像个坏主意。 1.当用户加入网络时,您需要将令牌发布给与其连接的所有用户。 如果你拥有大量新用户,那就不那么聪明了。 2.一个简单的嗅探器(网络嗅探器\ openSSH嗅探器)可以检测用户令牌。 安全方面,这不是一个好主意。 3.此外,它正在使用户的设备过载。 经验法则,所有开销都应由服务器处理。 考虑一下:

-User A向用户B发送“Hi there”

  1. 用户A将msg发送到服务器
  2. 服务器保存msg +向用户A发送“OK”
  3. 用户A收到“OK”,现在再次发送msg给用户B
  4. 用户B获取消息并向用户A发送“确定”。 你怎么知道msg到用户B?他也会向服务器发送“OK”吗?
  5. 简而言之, 使用第一种方法,第二种方法非常不推荐..

    祝你好运: - )

答案 1 :(得分:1)

如果您使用Apple推送通知服务,您一定要将通知从服务器发送到设备,而不是直接从设备A发送到设备B.除了其他答案中提到的原因,还有问题保持与APNS服务器的连接。

如果每个设备都可以直接向APNS发送消息,则每个设备都必须维护自己与APNS服务器的TLS连接。由于设备经常与互联网连接和断开连接,因此该连接会经常关闭并重新打开。乘以安装应用程序的设备数量,您将拥有大量与APNS短暂连接的连接。这可能会使您的证书被撤销。

  

在多个通知中保持与APN的连接;不要反复打开和关闭连接。 APN将快速连接和断开视为拒绝服务攻击。您应该保持连接处于打开状态,除非您知道它将在一段时间内处于空闲状态 - 例如,如果您每天只向用户发送一次通知,则可以每天使用新连接。

Source