使用发帖请求将消息发送到FCM主题的消息未传递

时间:2020-08-25 08:33:19

标签: flutter firebase-cloud-messaging

我使用firebase_messaging进行推送通知并发送我使用POST请求的消息。

将消息发送到FCM token时,一切正常,但是将消息发送到topic时(我基本上修改了我用于token消息的请求),这些消息将无法传递。

我检查了该主题是否正确,并且在物理Android设备上我正确地对该主题进行了下标,因为从FCM控制台发送主题消息时,它会立即发送。 你能在这里发现我做错了吗?

非常感谢。

令牌消息(有效):

void sendOrderCollected(Order order) async {
    var customerName = order.customerName;
    var customerFcmToken = order.customerFcmToken;

    await post('https://fcm.googleapis.com/fcm/send',
        headers: <String, String>{
          'Content-Type': 'application/json',
          'Authorization': 'key=$firebaseServerKey'
        },
        body: jsonEncode({
          'notification': <String, dynamic>{
            'title': sprintf(
                AppLocalizations.instance.text('ORDER_COLLECTED_PUSH_SUBTITLE'),
                [order.shopName]),
            'body': sprintf(
                AppLocalizations.instance.text('ORDER_COLLECTED_PUSH_BODY'),
                [customerName]),
            'sound': 'true'
          },
          'priority': 'high',
          'data': <String, dynamic>{
            'click_action': 'FLUTTER_NOTIFICATION_CLICK',
            'id': '1',
            'status': 'done'
          },
          'to': customerFcmToken
        })).whenComplete(() {
//      print('sendOrderCollected(): message sent');
    }).catchError((e) {
      print('sendOrderCollected() error: $e');
    });
  }

主题消息(未发送):

  void sendNewPromotion(Promotion promotion,String topic) async {
    print('sendNewPromotion() web started.\n topic: $topic, promotion : ${promotion.toMap().toString()}'); // correct topic

    await post('https://fcm.googleapis.com/fcm/send',
        headers: <String, String>{
          'Content-Type': 'application/json',
          'Authorization': 'key=$firebaseServerKey'
        },
        body: jsonEncode({
          'notification': <String, dynamic>{
            'title': sprintf(
                AppLocalizations.instance
                    .text('PROMOTION_PUSH_SUBTITLE'),
                [promotion.productName]),
            'body': sprintf(
                AppLocalizations.instance.text('PROMOTION_PUSH_BODY'),
                [promotion.productName, promotion.price, promotion.availableQuantity]),
            'sound': 'true'
          },
//          'priority': 'high',
          'android':{
            'priority' : 'high'
          },
          'apns':{
            'headers':{
              'apns-priority': '5'
            }
          },
          'webpush': {
            'headers': {
              'Urgency': 'high'
            }
          },
          'data': <String, dynamic>{

            'click_action': 'FLUTTER_NOTIFICATION_CLICK',
            'id': '1',
            'status': 'done',
            // parameter to pass with the message
//            'promotionId': promotion.promotionId,
//            'imageUrl': promotion.imageUrl,
//            'isPromotion' : promotion.isPromotion,
//            'productName': promotion.productName,
//            'productCategory': promotion.category,
//            'vendor': promotion.vendor,
//            'price': promotion.price,
//            'description': promotion.productDescription
          },
          'to': topic // correct
//          'topic': topic  // throws error 400
        })).whenComplete(() {
      print('sendNewPromotion(): message sent');
    }).catchError((e) {
      print('sendNewPromotion() error: $e');
    });
  }
}

1 个答案:

答案 0 :(得分:0)

您所做的一切在主题消息传递中都是正确的,但是您必须为此修改"to"键:

"to":"/topics/yourtopicyousubscribed"