Flutter:无法发送Firebase推送通知



我正在尝试通过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,它是一个string

我知道我的其他用户的fcm令牌没有错,因为当在Firebase控制台中使用时,它是有效的。

这里的问题是什么?

我发现这个错误很简单。在接收通知的应用程序中,我在注册页面和登录页向FCM注册。我只保存注册中生成的令牌,所以我根本没有在登录页面中生成新令牌。

解决方案是删除登录页面中的FCM注册代码。

相关内容

  • 没有找到相关文章