如何实现新增Google Spreadsheet行时自动发送FCM通知?
当然有办法实现这个自动通知需求!我来给你分享两个实用的方案,都是业内常用的:
方案一:Google Apps Script + FCM HTTP v1 API(最简便直接)
这是最贴合你场景的方案——直接在Google表格里绑定脚本,监听行新增事件,自动调用FCM发送通知,完全不需要额外的服务器。
步骤详解:
绑定脚本到你的表格
打开目标Google Spreadsheet,点击顶部菜单「扩展程序」→「Apps Script」,进入脚本编辑器。编写触发函数与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(); }
- 设置触发器
在脚本编辑器左侧点击「触发器」图标,添加一个新触发器:
- 选择函数:
onChange - 事件源:「从电子表格」
- 事件类型:「更改」
保存后按照提示完成授权即可。
方案二:Google Cloud Functions + Pub/Sub(适合复杂场景)
如果你的应用已经部署在Google Cloud上,或者需要更复杂的逻辑(比如数据校验、批量通知、多表格监听),可以用这个方案:
- 启用Google Sheets API和Pub/Sub API,配置表格的变更通知推送到指定的Pub/Sub主题。
- 创建Cloud Function订阅该Pub/Sub主题,当收到新增行的事件时,调用FCM API发送通知。
- 利用Cloud Functions的环境变量管理FCM密钥,避免硬编码。
这个方案扩展性更强,适合企业级应用,但需要一定的GCP基础。
关键注意事项
- 权限配置:确保你的服务账号拥有「Firebase Admin SDK Administrator Service Agent」角色,否则无法调用FCM API。
- 通知目标:如果是给特定用户发送,把
notificationPayload.message.topic替换成token字段(传入用户的FCM令牌);如果是批量通知,用主题订阅更高效。 - 测试验证:先手动运行
onChange函数(模拟新增行),检查日志是否有报错,同时在你的应用里验证是否收到通知。
内容的提问来源于stack exchange,提问作者user3680860
相关产品推荐
相关产品推荐

