android - 使用推送通知的移动聊天功能,什么时候应该推送?

标签 android iphone blackberry chat push-notification

(以下问题针对一般移动平台(iPhone、Android、Blackberry))

我们正在将聊天功能集成到我们现有的应用程序中。我用 .Net 网络服务和 Sql 数据库设计了系统来跟踪聊天消息。当聊天窗口打开时,到目前为止一切正常。

我需要一种方法来在用户当前未查看聊天屏幕时通知他/她一条新消息(这意味着该应用程序不在前台或他们在应用程序的另一部分(不是聊天屏幕) ).

显然,推送通知在这里是完美的,但我不确定什么时候应该发送推送。

发送消息的客户端如何知道对方是否正在查看聊天屏幕?我是否应该只发送每条消息推送并让接收设备决定是否需要弹出窗口或在通知栏中显示某些内容?

每次发送消息时都推送似乎有点矫枉过正。这通常是如何完成的?

任何想法都将不胜感激。

谢谢。

最佳答案

首先,请记住,您的服务器 将充当在不同聊天客户端之间传递的所有消息的代理。这是它的工作原理:

  • 用户 A 为用户 B 发起消息>
  • 消息被发送到服务器。
  • 服务器确定此消息是给用户 B 的。
  • 服务器启动推送通知并将消息传递给用户 B

现在为什么需要推送每条聊天消息?因为您的用户获得通知的唯一其他方式是轮询您的服务器以获取新消息。由于资源(电池、网络等)有限,在移动领域中,持续轮询(以您确定的任何速率)极其糟糕

推送通知场景中,由您的应用程序处理用户是否在收到新消息时通知的逻辑。这意味着当用户 B 收到来自用户 A 的新消息时,由您决定是否要通知 B(即将您的应用程序带到前台)或不。在任何一种情况下,您都希望使用推送通知而不是轮询。

类似地,用户 B 不一定必须知道用户 A 的应用程序(您的应用程序)在后台,这就是您需要的原因适本地处理该逻辑(在您的应用程序中)。

关于android - 使用推送通知的移动聊天功能,什么时候应该推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199205/

相关文章:

iphone - CATiledLayer 到 CALayer

ios - 不续订订阅 - 恢复

iphone - 下载队列的 ASIHTTP 的最佳替代品、继任者或替代品

Blackberry OS 5 的 Json 解析器

java - 如何访问另一个应用程序的权限屏幕?

android - 从android中的操作栏中删除左箭头?

android - 单独线程中的 MediaPlayer 与通过 startForeground() 在服务中运行

blackberry - 没有获取 GPS

blackberry - 黑莓市场的目标 JRE

android - 无法在 android 中导入 Session、Request、Response、GraphUser 包