发送推送通知 Flutter Android

0 人关注

我为推送通知设置了一个很棒的通知包,我使用Firebase消息服务,在iOS上一切正常,但对于Android,我有一个问题,当我使用活动测试向Android设备发送通知时,它工作正常,当应用程序在后台时,我收到了通知,问题是当我从应用程序发送通知时,Android设备没有收到,以下是我用来发送通知的代码。

  Future<void> sendAndroidNotification(
      authorizedSupplierTokenId, serviceName) async {
    try {
      http.Response response = await http.post(
        Uri.parse(messageAndroidUrl),
        headers: <String, String>{
          'Content-Type': 'application/json; charset=UTF-8',
          'Authorization': 'key=$messageKey',
        body: jsonEncode(
          <String, dynamic>{
            'notification': <String, dynamic>{
              'body': serviceName,
              'title': 'Nueva Solicitud',
            'priority': 'high',
            'data': <String, dynamic>{
              'click_action': 'FLUTTER_NOTIFICATION_CLICK',
              'id': '1',
              'status': 'done'
            'to': authorizedSupplierTokenId,
            'token': authorizedSupplierTokenId
      response;
    } catch (e) {

var messageAndroidUrl = "https://api.rnfirebase.io/messaging/send"; 我从firebase_messaging pub包的例子中得到这个Url,但我也试过这个URL "https://fcm.googleapis.com/fcm/send";这是一个适用于iOS的URL,所以谁能帮帮我?

4 个评论
这里的消防基地 对FCM REST API的调用要求您指定FCM的 server* 键在你的代码中。顾名思义,这个密钥只能在服务器端代码中使用,或者在其他可信的环境中使用。这样做的原因是,任何拥有FCM服务器密钥的人都可以向你的所有用户发送任何他们想要的信息。在你的安卓应用中包含这个密钥,恶意用户可以找到它并 你让你的用户处于危险之中 . See stackoverflow.com/a/37993724 以获得更好的解决方案。
是的,为此我使用了flutter_dotenv包,所以我把FCM服务器密钥放在一个.env文件中,并使用String messageKey = dotenv.env['MESSAGE_KEY'] ?'';
任何时候你在客户端应用程序中使用该密钥,它都有同样的安全风险。你不能安全地从设备到设备发送消息。我在上面给出的链接中解释了正确的架构。
谢谢你的提醒,我检查了一下,使用dotenv是一个非常糟糕的主意,因为任何人都可以访问存储密钥的资产,而且我还有其他的API密钥保存在那里,所以我检查了其他正确保存API密钥的方法,我发现了这篇文章,如果你有时间,请告诉我你的看法,我打算使用选项3的方法。 codewithandrea.com/articles/...
android
flutter
firebase-cloud-messaging
PedroCova
PedroCova
发布于 2022-10-09
1 个回答
pmatatias
pmatatias
发布于 2022-10-09
已采纳
0 人赞同

是的,你可能又错过了一个步骤。

文件说。 安卓配置

如果应用程序目前处于前台,可见的 通知就不会出现。