有没有办法从flutter App内部发送FCM通知?

Posted

技术标签:

【中文标题】有没有办法从flutter App内部发送FCM通知?【英文标题】:Is there any way to send FCM notification inside from flutter App? 【发布时间】:2022-01-05 16:02:58 【问题描述】:

嘿,我正在尝试将通知从我的颤振应用程序发送到另一个应用程序。但找不到任何东西。我该如何实施?请帮我。 谢谢。

【问题讨论】:

firebaser here 调用 FCM REST API 要求您在代码中指定 FCM server* 键。顾名思义,此密钥应仅用于服务器端代码或其他受信任的环境中。这样做的原因是任何拥有 FCM 服务器密钥的人都可以向您的所有用户发送他们想要的任何消息。通过在您的 android/ios 应用程序中包含此密钥,恶意用户可以找到它,并且您将用户置于危险之中。请参阅***.com/a/37993724 以获得更好的解决方案。 【参考方案1】:

使用云函数(推荐)

您可以创建一个可调用的云函数来发送 FCM 通知。

exports.sendNotif = functions.https.onCall(async (data, context) => 
  // Your notification sending code here, something like
  // await admin.messaging().sendMulticast(data: ..., tokens: ...);
);

使用 cloud_function package from pub.dev 从您的 Flutter 应用中调用此函数。

final callable = FirebaseFunctions.instance.httpsCallable('sendNotif');
await callable();

使用服务帐号(不推荐)

    在 Firebase 控制台中转到项目设置(齿轮图标)-> 服务帐户。 点击“管理服务帐户权限”。 添加新的服务帐户并填写所需信息。 在角色部分,为其授予对 FCM 的所需访问权限,例如选择“Firebase Cloud Messaging Admin”。 现在您可以看到新创建的服务帐户,按下操作(三点),然后选择管理键。 创建新的 JSON 密钥并下载文件。此文件包含敏感信息,例如私钥。 现在,您可以通过使用 JSON 文件进行身份验证,从 Flutter 代码中充当服务帐户。 More info here.

您可以看到为什么这不是一个可行的选择,您需要在 Flutter 应用程序中附带服务帐户 JSON 密钥,因此理论上任何用户都可以通过获取密钥轻松发送任何通知。

使用云功能(或服务器)方法可以让您指定应该发送的内容以及可以发送它们的人。

【讨论】:

我想在本地做,不使用任何服务器或云功能。 我不建议您这样做,但您也可以创建一个服务帐户并直接从应用程序创建 FCM 通知。我将更新我的答案以包含更多详细信息。 @SunnyRahi 更新了我的答案 感谢您的回复。我看起来很忙。我是菜鸟。嘿,您知道使用其他 api 的任何其他方式吗?我找到了这个文档,但不知道如何调用? firebase.flutter.dev/docs/messaging/notifications#via-rest @SunnyRahi 您绝对可以通过 rest 发送通知,但您仍然需要通过传入 Authorization 标头(如示例中所示)来获得授权,否则任何人都可以发送通知,对吧?为了获得令牌,您应该执行类似于我编写的方法的操作。【参考方案2】:

您应该有一个连接到您想要的 firebase 帐户的服务器,然后从第一个应用获取您的请求并向您想要的应用和令牌发送通知。

【讨论】:

我想在本地做。使用应用程序。

以上是关于有没有办法从flutter App内部发送FCM通知?的主要内容,如果未能解决你的问题,请参考以下文章

电子APP的FCM/GCM

Flutter:如何使用 fcm 以编程方式发送推送通知

Flutter ios 设备不会从 FCM 通知触发 onMessage。实施 APN 时 Sendtodevice 失败

有没有办法通过 FCM 发送免费的无限制推送通知?

如何使用 FCM 和 Flutter(一个到另一个设备)发送推送通知?

如何在接收基于 Flutter 构建的 FCM 推送通知时修复应用程序崩溃