ejabberd 和推送通知
Posted
技术标签:
【中文标题】ejabberd 和推送通知【英文标题】:ejabberd and Push Notification 【发布时间】:2013-04-17 20:43:49 【问题描述】:我已经使用 XMPP 在我的 ios 和 android 应用程序中集成了聊天系统。我在服务器端使用了 ejabberd 2。聊天系统工作正常。我想使用 APNS 和 GCM 在我的聊天中集成推送通知。如何在每条聊天消息中发送推送通知? ejabberd 2 有任何 API 或扩展可用于实现此功能?
帮助非常明显,
【问题讨论】:
【参考方案1】:没有用于 apns 或 gcm 的 ejabberd 插件。我认为您在这里有两个主要选择:
使用mod_offline_post
模块,它将在给定的url 上发送POST
请求。然后,您可以使用任何现有的后端语言来处理 apns 和 gcm(无论如何我都使用 rails 作为后端,所以这只是处理它的另一个端点)。
基于mod_offline_post
,创建您自己的模块,该模块将发送推送通知而不是POST
请求。很少有实现 apns 和 gcm 的示例和库。 IE。 apns4erl 用于 apns,this code 用于 gcm。但是,当然,了解一些 erlang 会很好。
【讨论】:
【参考方案2】:AFAIK 没有提供 GCM 或 APN 接口的公共 ejabberd 模块。
我建议您使用ejabberd_hook 实现自定义模块。你可以看到一个ejabberd内部模块和presence hookhere的例子。
如果您想将消息转发给离线用户,我建议offline_message_hook
,而对于消息的通用过滤,我建议filter_packet(From, To, Packet)
并检查数据包类型(请参阅this *** 问题)。
了解收件人后,您可以从数据库中检索设备令牌/注册 ID 并使用一些 erlang 代码转发消息。
对于 APN,请查看一些 simple code 解释它是如何工作的,或者查看这个 erlang ex_apns。如果您想了解有关 APN 的更多信息,或者您想要 APN 的模拟服务器,您可以阅读此博客 post。
有关 GCM 的示例,您可以使用@Lucas 提供的示例链接。
【讨论】:
如何从 db 中检索设备令牌? 这完全取决于您存储令牌的方式和数据库。【参考方案3】:请使用下面的博客,它非常简单实用,对我来说很好用。
http://symmetricinfinity.com/2013/01/23/ios-push-notifications-from-ejabberd.html
【讨论】:
如何推送给安卓离线用户? 如何从 Android 客户端向 eJabberD 发送 FCM 配置参数?我正在使用 Smack SDK 客户端。任何建议@MickaëlRémond,vks以上是关于ejabberd 和推送通知的主要内容,如果未能解决你的问题,请参考以下文章