如何在没有 Firebase 和自定义后端的情况下使用 Flutter 设置推送通知

Posted

技术标签:

【中文标题】如何在没有 Firebase 和自定义后端的情况下使用 Flutter 设置推送通知【英文标题】:How to setup Push Notifications with Flutter without Firebase and with own custom backend 【发布时间】:2019-08-28 15:44:52 【问题描述】:

我一直在开发一个带有 react native 的应用程序,我现在正在考虑使用 Flutter 重建应用程序。在开始重建之前,我正在研究 Flutter 的功能,看看它是否适合我们的项目。我在推送通知的插件上有些挣扎。网上有很多关于使用 Firebase Cloud Messaging 使用应用程序中的 Firebase 消息传递插件向 Flutter 应用程序发送推送通知的信息,但我没有找到任何关于使用您自己的自定义后端设置推送通知的好文章。

我们已经有一个自定义的 Node JS 后端,它为苹果和谷歌推送消息系统提供推送通知,所以我不想开始依赖 Firebase 云消息传递,这只会使我们的系统复杂化。

有谁知道是否以及如何使用 Flutter 应用设置推送通知,但使用您自己的自定义 Node JS 后端而不使用 firebase 云消息传递?

【问题讨论】:

你弄明白了吗?我也在寻找答案。 不确定 Flutter 和 node.js,但这已经在其他平台上进行了探索,因此可以为您提供有关如何在 Flutter 中执行此操作的提示。请参阅***.com/questions/51921331/…、***.com/questions/44570247/… 或 ***.com/questions/48948310/… 【参考方案1】:

先回答问题想问什么。

    您知道推送通知的整体工作原理吗? 后端如何通知移动设备发生了变化?

开始使用 firebase 的工作方式如下:

当后端向 firebase 服务器触发推送通知时,firebase 会在 XMPP 服务器上发送一条消息,该服务器通过 google play 服务主动连接,苹果 APNs 服务器也是如此。

现在,当 google play 服务将收到此消息时,它将包含捆绑包 ID 和标识要发送哪个应用程序的内容。这就是我们在 android 应用清单文件中注册广播的原因。试想一下,如果没有任何发送广播调用,就不会调用广播,如果您不调用该函数,那么谁来调用?

该部分已由 google play 服务处理以启动您的广播并让您知道您收到了哪些推送通知。

所以我的回答是不,不要使用你的后端来触发推送通知,因为你需要使用你自己的 XMPP 服务器并让你的应用程序以高优先级连接,如果不显示你正在做的通知,这是目前不可能的后台的东西(即至少对于 android,ios 不会在 15 分钟后留在后台,但你可以通过覆盖一些方法来扩展,但如果苹果报告你,你将没有机会准备好应用程序生产。)

因此,对于 android,无论是谷歌服务还是任何其他服务,例如 azure 通知,仍然需要 GCM 令牌和密钥,因此您可能需要重新考虑您目前的想法。

【讨论】:

实时聊天应用如何处理这个问题?它们不会显示它们正在后台运行的通知 那不是推送通知,那是 XMPP 聊天。检查 quickblox 或 firebase xmpp 聊天服务器。不要依赖推送通知聊天,我在以前的公司犯过这个错误,这太可怕了。有时推动有时不来。所以请使用适当的聊天 SDK。

以上是关于如何在没有 Firebase 和自定义后端的情况下使用 Flutter 设置推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有后端的情况下保存用户输入

如何在没有firebase的情况下显示推送通知?

如何打开 Firebase Javascript 客户端的登录?

如何在不实现我自己的数据库后端的情况下保存站点的状态?

如何在没有 Geofire 的情况下将位置对象保存在 Firebase 中?

如何在 Firebase httpscallable().call() 中接收来自后端的承诺?