环境:
埃贾伯德版本 : 16.04
啪啪��
我创建了一个带有XMPP服务器的Android聊天应用程序。但是,由于Google Play权限问题,我不得不缩小应用程序的功能范围,该功能支持在应用程序处于后台时接收传入消息通知。
作为替代方案,我收到了GooglePlay审核团队的以下建议。
移除此权限后,您可以考虑使用 Firebase 云消息传递 (FCM)(如果应用的消息传递需要 暂时免除电池优化。请设置高 仅当消息是时间关键型并且需要用户的 即时交互,并注意将消息设置为高 与正常优先级相比,优先级会导致更多的电池消耗 消息
因此,目前用户可以通过该应用程序发送消息。但是当他关闭应用程序时,他将被视为离线用户,并且不会收到来自应用程序的任何通知。当他再次打开应用程序时,他将获得保存在Ejabberd服务器中的所有离线消息。
我想增强当前的应用程序,以便即使用户关闭了应用程序,当有人向他发送消息时,他仍然会收到通知(类似于whatsapp)
-
ejabberd 中是否有一个模块将服务器与 FCM 集成并处理此问题?
-
如果我们不能通过 Ejabberd 实现这一点,是否有第三方库来支持这一点?
-
如果不是,我们是否必须从头开始编写一个 Erlang 模块?
我在互联网上发现了类似的问题,但我找不到任何可行的解决方案。因为我对 Erlang 没有太多经验,很高兴听到你对此的解决方案/想法。提前谢谢。
这可以在Ejabberd中实现,offline_message_hook。当向接收方发送消息和处于脱机状态的接收方时,将触发此挂钩。因此,使用此挂钩创建自定义模块,您可以向 FCM 和 APNs 服务器发送推送通知。 参考此博客 -- https://jasonrowe.com/2011/12/30/ejabberd-offline-messages/
看起来您需要尝试应用以下方法:
- 使用用户的 JID 创建用于存储用户令牌的 REST API
- 创建自定义挂钩以提取 XML 包。
- 将 epns 库集成到项目中(该库可以发送 FCM/APNS)
- 在自定义钩子调用
spawn
函数中,将通过 JID 从数据库获取用户令牌,并通过发送 FCM/APNS 通知创建有效负载