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

如何实现新增Google Spreadsheet行时自动发送FCM通知?

当然有办法实现这个自动通知需求!我来给你分享两个实用的方案,都是业内常用的:

方案一:Google Apps Script + FCM HTTP v1 API(最简便直接)

这是最贴合你场景的方案——直接在Google表格里绑定脚本,监听行新增事件,自动调用FCM发送通知,完全不需要额外的服务器。

步骤详解:

  1. 绑定脚本到你的表格
    打开目标Google Spreadsheet,点击顶部菜单「扩展程序」→「Apps Script」,进入脚本编辑器。

  2. 编写触发函数与FCM调用逻辑
    把下面的代码粘贴进去,替换成你的FCM项目信息和服务账号密钥:

function onChange(e) {
  // 只响应新增行的事件
  if (e.changeType !== 'INSERT_ROW') return;
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 获取新增的最后一行数据
  const lastRow = sheet.getLastRow();
  const rowData = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  // 替换为你的FCM配置
  const FCM_PROJECT_ID = '你的Firebase项目ID';
  const SERVICE_ACCOUNT_KEY = {
    "type": "service_account",
    "project_id": "...",
    "private_key_id": "...",
    "private_key": "...",
    "client_email": "...",
    "client_id": "...",
    // 其他服务账号JSON字段
  };
  
  // 获取FCM访问令牌
  const token = getFcmAccessToken(SERVICE_ACCOUNT_KEY, FCM_PROJECT_ID);
  
  // 构造通知内容(可根据行数据自定义)
  const notificationPayload = {
    message: {
      topic: '你的通知主题(比如"spreadsheet_updates")',
      notification: {
        title: '表格新增数据啦!',
        body: `新增内容:${rowData.join(', ')}`
      },
      data: {
        rowId: lastRow.toString(),
        content: JSON.stringify(rowData)
      }
    }
  };
  
  // 发送请求到FCM API
  const options = {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    payload: JSON.stringify(notificationPayload)
  };
  
  const response = UrlFetchApp.fetch(`https://fcm.googleapis.com/v1/projects/${FCM_PROJECT_ID}/messages:send`, options);
  console.log('FCM发送结果:', response.getContentText());
}

// 生成FCM的JWT访问令牌
function getFcmAccessToken(serviceAccountKey, projectId) {
  const tokenService = OAuth2.createService('FCM')
    .setTokenUrl(`https://oauth2.googleapis.com/token`)
    .setPrivateKey(serviceAccountKey.private_key)
    .setIssuer(serviceAccountKey.client_email)
    .setPropertyStore(PropertiesService.getScriptProperties())
    .setScope('https://www.googleapis.com/auth/firebase.messaging');
  
  if (!tokenService.hasAccess()) {
    throw new Error('获取FCM令牌失败:' + tokenService.getLastError());
  }
  
  return tokenService.getAccessToken();
}
  1. 设置触发器
    在脚本编辑器左侧点击「触发器」图标,添加一个新触发器:
  • 选择函数:onChange
  • 事件源:「从电子表格」
  • 事件类型:「更改」
    保存后按照提示完成授权即可。
方案二:Google Cloud Functions + Pub/Sub(适合复杂场景)

如果你的应用已经部署在Google Cloud上,或者需要更复杂的逻辑(比如数据校验、批量通知、多表格监听),可以用这个方案:

  1. 启用Google Sheets API和Pub/Sub API,配置表格的变更通知推送到指定的Pub/Sub主题。
  2. 创建Cloud Function订阅该Pub/Sub主题,当收到新增行的事件时,调用FCM API发送通知。
  3. 利用Cloud Functions的环境变量管理FCM密钥,避免硬编码。

这个方案扩展性更强,适合企业级应用,但需要一定的GCP基础。

关键注意事项
  • 权限配置:确保你的服务账号拥有「Firebase Admin SDK Administrator Service Agent」角色,否则无法调用FCM API。
  • 通知目标:如果是给特定用户发送,把notificationPayload.message.topic替换成token字段(传入用户的FCM令牌);如果是批量通知,用主题订阅更高效。
  • 测试验证:先手动运行onChange函数(模拟新增行),检查日志是否有报错,同时在你的应用里验证是否收到通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:07:47