ROR推送通知引擎

Beh*_*der 5 rubygems ruby-on-rails push-notification apple-push-notifications android-notifications

我最近被分配了一个开发通知引擎的任务.对于通知,我们将使用推送通知.我正在为引擎寻找最佳解决方案,因为将来我们还必须将应用程序扩展到其他设备.以下是该项目的一些细节

后端: 应用程序的后端在Ruby on Rails中作为webservices开发

设备将推送通知 iPhone,Android,Pebble(智能手表),Web应用程序

当前解决方案: 目前,我们正在考虑为通知制作后端数据库表.Rails中的工作类将在1分钟后运行,它会将所有通知推送到存储在数据库中的设备.从webservice方法,我们将在通知表中插入数据.

为推动通知,我们不想使用UrbanShip等服务.我们只会使用Ruby Gems来实现它们.目前,我们基于GCM gem进行了一个小型演示,用于Android推送消息.

问题:我对解决方案的态度是否正确?或者是否有更好的解决方案来解决这类问题.

编辑:

我认为我之前对这个问题的描述有点令人困惑.

最终,我们将使用Ruby中的GEMS发送推送通知.例如,对于iOS,我们将使用Houston或Grocer gem以及Android GCM.

问题:我们需要一些数据库表来存储通知,以便GEMS(如上所述)可以使用它们向用户发送通知.现在,为了填充数据库表,我们需要在某处编写逻辑,以便我们可以在表中插入通知.

例如,假设当用户首次在应用程序中注册时,我们会向他发送通知.现在,为此,我们需要编写用于在Register函数中添加通知的代码.

喜欢

public void Register()
{
   //Registration logic

   //Add a notification in the notification table
}
Run Code Online (Sandbox Code Playgroud)

现在,这是一个问题,因为我们需要在需要发送通知的所有函数中添加通知逻辑.在ROR或一般情况下还有其他好的解决方案吗?一些设计模式?

Gde*_*lin 12

我花了相当多的时间来研究基于Ruby的推送通知解决方案.最好的一个是RPush https://github.com/rpush/rpush.RPush在这一点上经过了很好的测试(我们使用它来发送数百万个通知),并且很好地处理了许多困难的边缘情况.我不建议从头开始建立自己的,因为有太多潜在的陷阱和边缘情况.RPush不支持Pebble或Web App通知,但可以扩展为这样做.

如果您决定探索其他替代方案,请确保:

  1. 为APNS优雅地处理关闭连接 - 在许多情况下,Apple可能会关闭与其服务器的连接,并且您的推送通知库必须正确处理此操作,否则数千个后续通知可能无法通知

  2. 与Apple的反馈服务进行通信 - Apple要求您轮询其中一个端点,以获取停止向其发送通知的设备列表.如果您没有这样做,您可以获得费率限制.

  3. 可以以足够快的速度发送通知以满足您的要求.

在Ruby之外,最好的推送通知库似乎是PushSharp(C#)和Node-Apn(NodeJS,仅限iOS)

最后,听起来您有特殊需求需要您自己完成.但对于其他人,我强烈建议您使用第三方服务.可靠地以高容量发送推送通知很困难,并且有许多第三方服务将以低成本为您完成.例如,UrbanAirship,Parse和OneSignal(我的服务)都是很棒的第三方解决方案.

更新以解决修订后的问题:

最好的设计模式是有一个第二个守护进程或Cron作业来处理消息传递.尝试在Ruby on Rails应用程序中执行此操作是不切实际的.

RoR应用程序可以将行作为您描述的队列插入Notification表中.然后守护进程或cron作业可以从队列中获取通知并传递它们.

如果你使用RPush,这是它遵循的模式.它带有一个Gem,可以加载到Rails应用程序中,将通知插入到数据库队列中,以及您在服务器上运行的守护程序,该守护程序会定期检查要发送的新通知并传递排队的任何通知.