有没有办法从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通知?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter ios 设备不会从 FCM 通知触发 onMessage。实施 APN 时 Sendtodevice 失败