社交 Android 应用程序的通知系统 - 推送与轮询以及如何使服务器“推送”

Posted

技术标签:

【中文标题】社交 Android 应用程序的通知系统 - 推送与轮询以及如何使服务器“推送”【英文标题】:Notifications System for Social Android App - Push vs. Polling & How to make a server "Push" 【发布时间】:2013-02-19 02:43:21 【问题描述】:

对于那些只想切入正题并知道我在问什么的人。我的问题在下面的段落中用编号和粗体表示。

我很想弄清楚 1.)如何为 Android 社​​交网络应用程序实施适当的通知系统? 到目前为止,我收集到的只是有 2 个选择,轮询与推送,推送比轮询更好,因为它可以节省电池,推荐的推送通知方式是通过 Google Cloud Messaging(GCM),但我没有得到的是 2.) 是什么让我的服务器推送? 和/或 3.)当有新数据可用时,如何设置我的服务器端进行推送? 进一步的研究表明 Facebook 只能实现其近乎实时的通知系统 bc他们有某种称为 thrift 的服务器端 api/库/技术或类似的东西,可以检测谁在线和谁不在线(不确定为什么这很重要)。 4.) 是否有人对我尝试实施类似于 Facebook 的社交通知系统提供一些提示?

其他重要信息:

我目前正在使用 Codeigniter Rest 服务器作为 api(php)

我更喜欢可以使用现有 API 实现的 php 解决方案,除非有另一种语言(Java、Ruby、javascript)可以独立实现的解决方案(也就是说,我仍然可以将现有的 api 用于所有事情除了通知之外的其他)

我不是在找人来解释如何使用 GCM 或指导我学习教程。我已经完成了研究并获得了 GCM 推送通知的几个“示例”并运行,但到目前为止我发现的教程都没有向我展示如何让我的服务器自行推送。

我需要向用户发出的通知类型包括新朋友请求、来自其他用户的新私人消息、收到通知的用户发布的内容的新 cmets、用户评论过的内容的新 cmets (类似于如果将评论添加到已评论的状态中,fb 会通知您)

【问题讨论】:

推送是通过使用套接字来实现的。 GCM 不是在 android 上打开许多不同的套接字来推送通知,而是允许一个套接字,然后将通知分发到适当的应用程序(这是一个假设,因为我不知道 GCM)。您可以使用 PHP 创建一个将消息推送到 GCM 的套接字服务器。我没有更多时间澄清。也许以后。 我想这是一个开始。我会更多地研究“套接字”,但我仍然不明白只有当新数据可用并且如果 GCM 结束时,我的服务器将如何自行“推送”,所有这些都是关于如何发送推送通知的推荐解决方案为什么不有一个很好的教程,它显示了添加记录时自动推送的 mysql/php 或 mysql/java 服务器的实现?这不应该是开发人员相当普遍需要的东西吗?如今,几乎每个社交 android 应用程序都实现了类似于 facebook 的系统,但我没有发现“自动推送”示例/tuts 我在谷歌上的第一次搜索是“谷歌云消息”和我检查的第一个结果:androidhive.info/2012/10/…你需要在你的 google-fu 上工作。 查看“pusher.com” 【参考方案1】:

对于您描述的任务(好友请求、私人消息、通知等),GCM 绝对是最佳选择。当事件发生时,您的服务器将发送 GCM 消息,并由 Google 管理消息的发送 - 您不必担心手机处于开机状态或类似情况。

听起来您已经接近完成所有这些,但缺少一个部分 - GCM 消息的实际发送。至少根据我的经验,没有自动推送的概念。每次推送都基于发生的某些操作,例如发送消息或新朋友请求。例如,如果您已经设置了代码来处理服务器上的好友请求并更新数据库,您只需添加一些代码来查找被请求者的 GCM ID 并发送 GCM 消息告诉您的客户端已收到好友请求。在 Android 客户端,您将拥有一个扩展 GCMBaseIntentService 的类,该类将接收此消息并在收到好友请求时运行您想要运行的任何客户端代码(发布本地通知、更新 ui 等)

【讨论】:

谢谢!!!!这比我在官方 gcm 网站上阅读的所有其他内容/我通过谷歌找到的关于该主题的所有教程都更有意义。我认为你的解释应该足以让我开始。我会尝试在我的朋友请求功能上实现此功能以对其进行测试,但如果其他人有关于该主题的其他信息/链接等,我仍然愿意听取更多答案/意见。 没问题 - 如果您觉得它有帮助,请不要忘记返回并将答案标记为已接受。祝你的应用好运! 我还没有机会测试你的答案,但我猜它会起作用,所以我批准了你的答案。谢谢你用英语说清楚:) 但是 GCM 在速度方面并不可靠。由于基于重新连接到谷歌服务器的高心跳率 @PaulOkeke 有没有更好的替代方案/架构可以推荐?

以上是关于社交 Android 应用程序的通知系统 - 推送与轮询以及如何使服务器“推送”的主要内容,如果未能解决你的问题,请参考以下文章

为各种 Android 操作系统版本设置推送通知图标

如何在 react-native App 上获取推送通知?

自托管解析是不是仍然通过 facebook 和推送通知处理身份验证

消息推送可以推送啥内容?

android 推送服务个推和极光哪个好

Android 推送通知关闭:它是如何在内部工作的?