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

如何在Google AppScript中实现Firebase Messaging主题订阅

解决Google AppScript中订阅Firebase Messaging主题的方案

由于Firebase Admin SDK无法在Google AppScript中直接使用,你可以通过调用Firebase Messaging的REST API完成主题订阅操作,具体实现步骤如下:

1. 获取Firebase项目服务账号密钥

  • 登录Firebase控制台进入目标项目
  • 点击设置图标→项目设置→服务账号→生成新的私钥,下载JSON格式密钥文件

2. 在AppScript中实现OAuth2身份验证(获取访问令牌)

借助AppScript的OAuth2库生成访问令牌,用于调用Firebase REST API:

  • 打开AppScript编辑器,点击「资源」→「库」,添加OAuth2库,库ID为1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,选择最新版本
  • 编写获取令牌的函数:
function getFirebaseAccessToken() {
  var serviceAccount = {
    "type": "service_account",
    "project_id": "你的Firebase项目ID",
    "private_key_id": "密钥文件中的private_key_id",
    "private_key": "密钥文件中的private_key(将换行符替换为\\n)",
    "client_email": "密钥文件中的client_email",
    "client_id": "密钥文件中的client_id",
    "token_uri": "https://oauth2.googleapis.com/token"
  };

  var oAuth2Service = OAuth2.createService('Firebase')
    .setTokenUrl(serviceAccount.token_uri)
    .setPrivateKey(serviceAccount.private_key)
    .setIssuer(serviceAccount.client_email)
    .setPropertyStore(PropertiesService.getScriptProperties())
    .setScope('https://www.googleapis.com/auth/firebase.messaging');

  if (!oAuth2Service.hasAccess()) {
    throw new Error('获取访问令牌失败:' + oAuth2Service.getLastError());
  }

  return oAuth2Service.getAccessToken();
}

3. 调用REST API完成主题订阅

使用UrlFetchApp发送请求,将表格中存储的clientToken订阅到指定主题:

// 单token订阅示例
function subscribeTokenToTopic(token, topicName) {
  var accessToken = getFirebaseAccessToken();
  var url = `https://fcm.googleapis.com/v1/projects/你的Firebase项目ID/topics/${topicName}:batchAdd`;
  
  var payload = {
    "tokens": [token]
  };

  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer ' + accessToken
    },
    'payload': JSON.stringify(payload)
  };

  try {
    var response = UrlFetchApp.fetch(url, options);
    Logger.log('订阅成功:' + response.getContentText());
    return response.getContentText();
  } catch (e) {
    Logger.log('订阅失败:' + e.toString());
    throw e;
  }
}

// 从表格读取token批量订阅的示例
function processSheetTokens() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('存储token的工作表名');
  var data = sheet.getDataRange().getValues();
  
  // 假设第一列是clientToken,从第二行开始跳过表头
  for (var i = 1; i < data.length; i++) {
    var token = data[i][0];
    if (token) {
      subscribeTokenToTopic(token, '你的目标主题名');
      // 可选:标记该token已处理
      sheet.getRange(i+1, 2).setValue('已订阅');
    }
  }
}

4. 关键注意事项

  • 批量订阅可一次性传入最多1000个token,使用上述batchAdd接口即可
  • 确保服务账号在IAM控制台中拥有Firebase Messaging Admin权限
  • 私钥中的换行符必须替换为\\n,否则会导致身份验证失败
  • 建议通过PropertiesService存储服务账号信息,避免硬编码在脚本中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:04:51