如何将FCM与Ejabberd集成?

时间:2019-04-02 04:27:22

标签: android erlang firebase-cloud-messaging ejabberd smack

  

环境:

     

Ejabberd版本:16.04

     

Smack-android-4.1.0

我已经使用XMPP服务器创建了一个Android聊天应用程序。但是由于Google Play许可问题,我不得不缩小应用程序的功能,该功能支持在后台运行时接收传入的消息通知。

作为替代方案,我从GooglePlay审核小组收到了以下建议。

  

删除此权限后,您可以考虑使用Firebase   云消息传递(FCM),如果您的应用程序的消息传递需要   暂时不进行电池优化。请设置高   仅当邮件时间紧迫且需要用户的   立即互动,并注意将信息设置为高   与普通优先级相比,优先级会消耗更多电池   消息

因此,目前用户可以通过该应用发送消息。但是,当他关闭应用程序时,他将被视为离线用户,并且不会收到来自应用程序的任何通知。再次打开该应用程序时,他将获得保存在Ejabberd服务器中的所有脱机消息。

我想增强当前的应用程序,以便即使用户已关闭该应用程序,当有人向他发送消息时,他仍然会收到通知(类似于whatsapp)

  1. ejabberd中是否有一个模块将服务器与FCM集成在一起并进行处理?

  2. 如果我们无法通过Ejabberd实现这一目标,那么是否存在一个第三方库来支持这一目标?

  3. 如果不是,我们必须从头开始编写Erlang模块吗?

我在互联网上发现了类似的问题,但找不到任何可行的解决方案。由于我对Erlang的了解不是很多,因此很高兴听到您对此的解决方案/想法。预先感谢。

2 个答案:

答案 0 :(得分:3)

这可以通过Ejabberd中的offline_message_hook来实现。向接收方和脱机状态的接收方发送消息时,将触发此挂钩。因此,使用此钩子创建一个自定义模块,您就可以向FCM和APNs服务器发送推送通知。 请参阅此博客-https://jasonrowe.com/2011/12/30/ejabberd-offline-messages/

答案 1 :(得分:0)

看起来您需要尝试以下应用方法:

  • 为具有用户JID的用户令牌存储创建REST API
  • 创建用于获取XML包的自定义钩子。
  • 集成到项目epns库中(该库可以发送FCM / APNS)
  • 在自定义钩子调用中,spawn函数将通过JID从数据库获取用户令牌,并通过发送FCM / APNS通知创建有效负载