低/零成本Web应用托管选型:可服务端检测站点并通知下载可用
适配需求的托管服务推荐
- Firebase 全栈套件:是对你当前需求适配度最高的选择,本身自带Firebase Auth实现用户认证,云函数支持定时触发和出站HTTP请求,还自带FCM推送能力可以直接给全量用户发通知,全链路集成不用额外对接第三方服务,对新手门槛最低,你已经在调研的话可以直接用。
- Vercel + Supabase:Vercel的Cron Jobs可以实现定时调度服务端函数,Supabase自带开箱即用的用户认证模块,两者打通成本低,免费额度对小体量个人应用足够。
- AWS Amplify:自带用户认证能力,配合Lambda函数+EventBridge定时调度也能满足需求,适合后续计划扩展更多云服务功能的场景。
Firebase Cloud Functions 全天异步检测实现方案
你不需要额外搭建调度服务,Firebase自带定时触发云函数的能力,直接按以下步骤实现即可:
- 先安装需要的依赖:
npm install axios firebase-admin firebase-functions - 编写调度检测云函数,示例代码如下:
const functions = require("firebase-functions"); const axios = require("axios"); const admin = require("firebase-admin"); admin.initializeApp(); // 每10分钟触发一次的检测函数,频率可自行调整 exports.checkFilePublish = functions.pubsub.schedule("every 10 minutes").onRun(async () => { const targetFileUrl = "替换为你要检测的第三方站点文件链接"; try { // 用HEAD请求仅获取状态码,省流量速度快 const res = await axios.head(targetFileUrl, { timeout: 5000, headers: {"User-Agent": "自定义你的应用UA,避免被站点拦截"} }); // 返回非404状态说明文件已发布 if (res.status !== 404) { // 读取今日推送标记,避免重复推送 const statusRef = admin.firestore().collection("sysConfig").doc("notifyStatus"); const statusDoc = await statusRef.get(); const alreadyNotified = statusDoc.exists ? statusDoc.data().todayNotified : false; if (!alreadyNotified) { // 给所有订阅了全量通知的用户发推送 await admin.messaging().sendToTopic("allUsers", { notification: { title: "今日文件已发布", body: "目标站点的今日文件已更新,可前往查看" } }); // 标记今日已推送 await statusRef.set({ todayNotified: true, publishTime: admin.firestore.FieldValue.serverTimestamp() }, {merge: true}); } } } catch (err) { // 404属于正常未发布状态,仅打日志即可 if (err?.response?.status === 404) { functions.logger.info("文件暂未发布,下次调度继续检测"); } else { functions.logger.error("检测请求异常", err); } } return null; }); // 每日零点重置推送标记,方便第二天检测 exports.resetNotifyStatus = functions.pubsub.schedule("every day 00:00").onRun(async () => { await admin.firestore().collection("sysConfig").doc("notifyStatus").set({ todayNotified: false }, {merge: true}); return null; });
- 注意事项:
- 检测频率不要设置过高,避免被第三方站点封IP,5-15分钟一次足够满足大部分场景的时效性要求
- 前端用户登录直接调用Firebase Auth的SDK即可,支持邮箱、手机号、第三方登录等多种方式,集成非常简单
- 所有用户首次登录后默认订阅
allUsers的FCM主题,就可以实现全量推送
内容的提问来源于stack exchange,提问作者yellowjello
相关产品推荐
相关产品推荐

