使用 Flutter 测试 Firebase 云消息传递

Posted

技术标签:

【中文标题】使用 Flutter 测试 Firebase 云消息传递【英文标题】:Test Firebase Cloud Messaging with flutter 【发布时间】:2020-07-09 19:40:00 【问题描述】:

我在 Flutter 中为我的应用设置了 Firebase 云消息传递。我已经在控制台上设置了所有内容。我还用邮递员进行了测试,它也很好用。但是,我也想在 Flutter 中进行测试,我知道这也是可能的。

但这对我不起作用,因为我没有任何通知或错误消息。如何做到这一点?

Future<Map<String, dynamic>> sendAndRetrieveMessage() async 
    print("Wdwd");
    await firebaseMessaging.requestNotificationPermissions(
      const iosNotificationSettings(sound: true, badge: true, alert: true, provisional: false),
    );
    await http.post(
      'https://fcm.googleapis.com/fcm/send',
      headers: <String, String>
        'Content-Type': 'application/json',
        'Authorization': 'key = $serverToken',
      ,
      body: jsonEncode(
        <String, dynamic>
          'notification': <String, dynamic>
            'body': 'this is a body',
            'title': 'this is a title'
          ,
          'priority': 'high',
          'data': <String, dynamic>
            'click_action': 'FLUTTER_NOTIFICATION_CLICK',
            'id': '1',
            'status': 'done'
          ,
          'to': "tokenString",
        ,
      ),
    );

    final Completer<Map<String, dynamic>> completer =
    Completer<Map<String, dynamic>>();
    firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async 
        completer.complete(message);
      ,
    );
    return completer.future;
   

我通过单击按钮启动此代码。没有得到任何回应。请帮帮我。

【问题讨论】:

在您发送给用户的应用程序中包含此'Authorization': 'key = $serverToken' 会带来严重的安全风险。顾名思义,该令牌只能在受信任的环境中使用,例如您的开发机器、您控制的服务器或 Cloud Functions。像您在此处所做的那样在应用程序中使用 FCM 服务器密钥意味着恶意用户可以从那里获取它,并使用它向 您的中的任何人发送他们想要的任何消息> 用户。安全地发送设备到设备消息需要您设置服务器,如下所示:***.com/a/37993724 【参考方案1】:

假设您正在开发一个向其他用户发送推送通知的后端应用程序,并且您正在使用here 中给出的代码示例

首先进入 Firebase 控制台 - 设置 - 项目设置 - 云消息传递

然后复制与服务器密钥关联的令牌,并将其用作服务器令牌

final String serverToken = '<The token you copied goes here>';

嗯,这就是我让它工作的方式。如前所述,可能存在一些安全问题

【讨论】:

以上是关于使用 Flutter 测试 Firebase 云消息传递的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase 函数的单元测试

在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试

如何使 Android 和 iOS 的 Flutter App 崩溃(以测试 Firebase Crashlytics)?

MissingPluginException(在通道 plugins.flutter.io/firebase_core 上找不到方法 Firebase#initializeCore 的实现)在测试中

Flutter Firebase Functions:调用函数时出错

在flutter中处理链接并使用firebase动态链接导航