You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中通过REST API发送定时FCM推送:时间参数传递失败求助

在Flutter中通过REST API实现FCM定时推送通知

一、FCM请求体中正确传递定时参数

你之前把event_time放在notification字段里是错误的,FCM用于定时推送的参数是**schedule_time,且必须放在请求体的根层级**,格式需遵循RFC3339标准(UTC时间,例如"2024-06-15T14:30:00Z")。

修改后的完整请求体示例:

{
    "registration_ids": [
        "fNsi-sHiQDSWcNdx5Y2Nf9:APA91bEewR3VbuPVJO3qFDlcmqS6rp5fZilITgZJfl61JOsje6OEP13RjhxAn-0JRzf0-u8Mg-OBAKxRKtKRtpeisZagHJZsNYa_zat--1iyemwUSxdZIMRt2jxfZMiZ9Od4mk2DmznG",
        "fyYtfww_QzOTVh1aFyOaTZ:APA91bFih7TD9Q04kb03Ju1zUJ66N_2yMwo2dUCr_ZJJs-NKv3AaEAimGV2lxm7kgIsVlJSXRmrau-VFZ_52AS9tqobl-vP7iXbOOT35kdEFVEROMotr4AiksD2b5vE_TWWyai3BbH9E"
    ],
    "notification": {
        "body": "killed",
        "title": "killed title",
        "android_channel_id": "push_notification",
        "sound": false
    },
    "data": {
        "body": "data body",
        "title": "Data",
        "_id": 34534
    },
    "android": {
        "priority": "high"
    },
    "schedule_time": "2024-06-15T14:30:00Z"
}

关键注意点:

  • schedule_time必须是未来的时间,且不能超过当前时间4周(FCM的最大定时范围)
  • 时间格式必须为UTC标准,避免时区偏差导致推送时间错误

二、Flutter中通过REST API发送定时推送

使用Flutter的http包发起POST请求到FCM推送端点,步骤如下:

  1. 在pubspec.yaml中添加http依赖:
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.1
  1. 编写发送请求的代码:
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> sendScheduledPushNotification() async {
  final String fcmServerKey = '你的FCM服务器密钥';
  final Uri fcmEndpoint = Uri.parse('https://fcm.googleapis.com/fcm/send');

  final Map<String, dynamic> requestBody = {
    "registration_ids": [
      "你的设备注册ID",
    ],
    "notification": {
      "body": "定时推送测试",
      "title": "定时通知",
      "android_channel_id": "push_notification",
      "sound": false
    },
    "data": {
      "body": "data body",
      "title": "Data",
      "_id": 34534
    },
    "android": {
      "priority": "high"
    },
    "schedule_time": "2024-06-15T14:30:00Z"
  };

  final response = await http.post(
    fcmEndpoint,
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'key=$fcmServerKey',
    },
    body: jsonEncode(requestBody),
  );

  if (response.statusCode == 200) {
    print('定时推送请求已提交成功');
    print('响应内容: ${response.body}');
  } else {
    print('请求失败,状态码: ${response.statusCode}');
    print('错误信息: ${response.body}');
  }
}

额外提醒:

  • FCM服务器密钥需从Firebase控制台「项目设置」→「云消息传递」中获取
  • 不要在客户端代码中硬编码服务器密钥(存在安全风险),建议通过你的后端服务转发请求,客户端仅调用后端接口
  • 确保设备注册ID有效,否则会返回推送失败的响应

内容的提问来源于stack exchange,提问作者Som Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:30:43