必须先创建 firebase 项目并下载服务密钥 json 文件至 ./firebase-service-key.json,再配置极光 appkey 与 mastersecret 到 .env;接着用 copilot 生成支持双通道、带重试和统一响应的 pushservice 类,并通过 .github/copilot-instructions.md 固化规范,最后验证调用逻辑正确性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

准备 Firebase 项目与服务密钥
要在 GitHub Copilot 中生成可直接对接 Firebase Cloud Messaging(FCM)的推送服务代码,必须先在 Firebase 控制台创建项目并导出服务账户密钥 JSON 文件。
打开 console.firebase.google.com → 创建新项目或选择已有项目 → 左侧导航栏进入「设置」→「服务账号」→ 点击「生成新的私钥」→ 下载 JSON 文件并保存到本地 【./firebase-service-key.json】 路径下。
这一步不可跳过,Copilot 生成的 Node.js 推送逻辑依赖该密钥进行身份认证;若路径错误或权限不足,后续所有调用都会返回 401 错误。
配置极光推送 AppKey 与 MasterSecret
登录 www.jiguang.cn → 进入「应用管理」→ 新建或选择已有的 Android/iOS 应用 → 复制页面显示的「AppKey」和「MasterSecret」。
将这两个值以环境变量形式写入项目根目录的 【.env】 文件中:
JIGUANG_APP_KEY=98c3a2b1d4e5f6g7h8i9j0k1
JIGUANG_MASTER_SECRET=3a2b1c4d5e6f7g8h9i0j1k2l3m4n5o6p
用 Copilot 生成双通道推送封装类
在 VS Code 中新建文件 push-service.ts,顶部添加注释说明需求:
```ts
// @copilot-instructions
// 实现一个 PushService 类,支持同时向 Firebase 和极光推送平台发送通知
// 要求:使用 TypeScript 编写,包含类型定义、错误重试机制、统一响应格式
// 依赖:firebase-admin@^2.25.0、jpush-sdk@^4.3.0、dotenv@^16.4.0
// 初始化时自动加载 .env 和 firebase-service-key.json
```
按下 Ctrl+Enter(Windows/Linux)或 Cmd+Enter(macOS) 触发 Copilot 对话,输入:
“生成完整的 PushService 类,包含 sendToFirebase 和 sendToJPush 两个私有方法,以及公共的 send 方法做并发调用与结果聚合”
使用四维度框架评估任意 GitLab MR 或 GitHub PR 的复杂度:规模(20%),认知负荷(30%),审查工作量(30%),风险/影响(20%)...
Copilot 将输出带完整 import、class 定义、try/catch 包裹、Promise.allSettled 聚合逻辑的代码。检查其是否在初始化时调用了 admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }) 和 jpush.client(appKey, masterSecret)。
在工作区启用自定义指令自动注入
为确保后续所有 Copilot 聊天都默认携带本项目的推送上下文,需在工作区根目录创建 【.github/copilot-instructions.md】 文件:
```markdown
---
applyTo: "**"
---
# 推送服务开发规范
- 所有通知逻辑必须兼容 FCM v1 HTTP 协议与极光 REST API v3
- 响应结构统一为 { success: boolean; platform: 'firebase' | 'jpush'; error?: string }
- 禁止硬编码密钥,必须通过环境变量或服务密钥文件读取
- 发送失败时自动重试 2 次,间隔 500ms
```
该文件一旦存在,Copilot 在当前文件夹内任意位置发起的代码生成请求都会自动合并上述规则,无需每次重复描述。
验证推送逻辑是否可执行
新建 test-push.ts,输入以下调用代码后触发 Copilot 补全:
```ts
const service = new PushService();
await service.send({
title: "测试通知",
content: "来自 Copilot 生成的双通道推送",
tokens: ["fcm_token_xxx", "jpush_registration_id_yyy"]
});
```
观察 Copilot 是否自动补全了完整调用链:识别出 tokens 数组需按平台拆分 → 分别调用 sendToFirebase(传 fcm_token_xxx)和 sendToJPush(传 jpush_registration_id_yyy)→ 合并返回对象。
运行 npm run test-push,确认终端输出两个平台的成功响应对象。










