环境:
Ejabberd版本:16.04
Smack-android-4.1.0
我已经使用XMPP服务器创建了一个Android聊天应用程序。但是由于Google Play许可问题,我不得不缩小应用程序的功能,该功能支持在后台运行时接收传入的消息通知。
作为替代方案,我从GooglePlay审核小组收到了以下建议。
删除此权限后,您可以考虑使用Firebase 云消息传递(FCM),如果您的应用程序的消息传递需要 暂时不进行电池优化。请设置高 仅当邮件时间紧迫且需要用户的 立即互动,并注意将信息设置为高 与普通优先级相比,优先级会消耗更多电池 消息
因此,目前用户可以通过该应用发送消息。但是,当他关闭应用程序时,他将被视为离线用户,并且不会收到来自应用程序的任何通知。再次打开该应用程序时,他将获得保存在Ejabberd服务器中的所有脱机消息。
我想增强当前的应用程序,以便即使用户已关闭该应用程序,当有人向他发送消息时,他仍然会收到通知(类似于whatsapp)
ejabberd中是否有一个模块将服务器与FCM集成在一起并进行处理?
如果我们无法通过Ejabberd实现这一目标,那么是否存在一个第三方库来支持这一目标?
如果不是,我们必须从头开始编写Erlang模块吗?
我在互联网上发现了类似的问题,但找不到任何可行的解决方案。由于我对Erlang的了解不是很多,因此很高兴听到您对此的解决方案/想法。预先感谢。
答案 0 :(得分:3)
这可以通过Ejabberd中的offline_message_hook来实现。向接收方和脱机状态的接收方发送消息时,将触发此挂钩。因此,使用此钩子创建一个自定义模块,您就可以向FCM和APNs服务器发送推送通知。 请参阅此博客-https://jasonrowe.com/2011/12/30/ejabberd-offline-messages/
答案 1 :(得分:0)
看起来您需要尝试以下应用方法:
spawn
函数将通过JID从数据库获取用户令牌,并通过发送FCM / APNS通知创建有效负载