Admob SSV URL验证失败:手动请求正常却返回404错误
常见原因及排查步骤
核对Function的部署状态与URL格式
确认Firebase Function已完全部署完成,Admob中填写的URL必须与Firebase控制台显示的地址完全一致,不能遗漏https://前缀,也不要添加多余的路径参数(除非你的Function逻辑明确需要)。Firebase Function的标准URL格式为https://<region>-<project-id>.cloudfunctions.net/<function-name>,逐一核对每个部分是否正确。排查请求头差异
Admob发送的验证请求和手动请求的请求头可能存在差异,比如Content-Type或自定义头。可以在Function中添加日志打印所有请求头和请求体,对比两者的区别:exports.admobVerification = functions.https.onRequest((req, res) => { console.log('请求头:', req.headers); console.log('请求体:', req.body); // 你的验证逻辑 res.status(200).send('OK'); });查看Firebase控制台的日志,根据差异调整Function的处理逻辑,比如确保兼容Admob发送的
Content-Type类型。检查CORS配置
即使Admob是服务器端请求,若Function配置了严格的CORS规则,也可能拦截请求。可以添加CORS处理允许所有来源:const cors = require('cors')({ origin: true }); exports.admobVerification = functions.https.onRequest((req, res) => { cors(req, res, () => { // 你的验证逻辑 res.status(200).send('OK'); }); });确认请求方式兼容性
部分场景下Admob会先发GET请求验证URL可达性,而你的Function可能只处理POST请求。检查Function是否同时支持GET和POST,或者在Admob设置中确认是否可指定请求方式。若Admob确实先发GET,需让Function处理GET请求并返回200。解决冷启动延迟问题
Firebase Function冷启动时存在延迟,而Admob验证请求的超时时间较短,可能导致请求失败返回404。可以手动触发几次Function让它保持“暖状态”后再测试Admob验证,也可考虑升级Firebase计费计划,使用预留实例避免冷启动。
内容的提问来源于stack exchange,提问作者Toonj

