Flutter:无法发送Firebase推送通知

时间:2020-04-22 17:36:43

标签: android firebase flutter push-notification firebase-cloud-messaging

我正在尝试通过Flutter发送Firebase推送通知。下面是代码

Future<Map<String, dynamic>> sendAndRetrieveMessage(String fcmToken, String title, String msg) async {

    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: convert.jsonEncode(
        <String, dynamic>{
          'notification': <String, dynamic>{'body': msg, 'title': title},
          'priority': 'high',
          'data': <String, dynamic>{
            'click_action': 'FLUTTER_NOTIFICATION_CLICK',
            'id': '1',
            'status': 'done'
          },
          'to': fcmToken,
        },
      ),
    ).then((http.Response response){
      final int statusCode = response.statusCode;

        print("RESPONSE: " + response.body);
        print("STATUS CODE: " + statusCode.toString());

        if (statusCode < 200 || statusCode > 400 || response.body == null) {
          throw new Exception("Error while fetching data");
        }
    });
  }

以下是我得到的错误

RESPONSE: {"multicast_id":8498089791993785359,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}]}

令人惊讶的是,我可以通过Firebase UI控制台使用相同的FCM令牌来发送消息。它只是有效。

更新

对于to字段,如果我使用代码await _firebaseMessaging.getToken(),我不会得到错误,并且会被传递。上面是用于获取同一用户的FCM,即{{1 }}。

我知道其他用户的fcm令牌是不正确的,因为在Firebase控制台中使用时,它可以工作。

这是什么问题?

1 个答案:

答案 0 :(得分:0)

该错误是一个简单的错误,我已经知道了。在通知接收应用程序中,我正在注册页面以及登录页面上向FCM注册自己。我只保存在注册中生成的令牌,因此根本没有在登录页面中生成新令牌。

解决方案是在登录页中消除FCM注册代码。

相关问题