【问题标题】:How to Integrate FCM with Ejabberd?如何将 FCM 与 Ejabberd 集成?
【发布时间】:2019-08-23 07:38:24
【问题描述】:

环境:

Ejabberd 版本:16.04

Smack-android-4.1.0

我创建了一个带有 XMPP 服务器的 Android 聊天应用程序。但是,由于 Google 播放权限问题,我不得不缩小应用程序的功能范围,该功能支持在应用程序处于后台时接收传入消息通知。

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

移除此权限后,您可以考虑使用 Firebase Cloud Messaging (FCM) 如果您的应用程序的消息传递需要 暂时免于电池优化。请设置高 仅当消息是时间关键的并且需要用户的 立即互动,并注意将您的消息设置为高 与正常优先级相比,优先级会导致更多的电池消耗 消息

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

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

  1. ejabberd 中是否有将服务器与 FCM 集成并处理此问题的模块?

  2. 如果我们无法通过 Ejabberd 实现这一点,是否有第三方库支持这一点?

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

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

【问题讨论】:

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


    【解决方案1】:

    这可以在 Ejabberd 中使用 offline_message_hook 来实现。该钩子在向处于离线状态的接收者和接收者发送消息时触发。因此,使用此挂钩创建一个自定义模块,您可以向 FCM 和 APNs 服务器发送推送通知。 参考这篇博客——https://jasonrowe.com/2011/12/30/ejabberd-offline-messages/

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-13
        • 2018-06-08
        • 2018-06-11
        相关资源
        最近更新 更多