无用户密钥时,如何向https://android.googleapis.com/gcm/send发送推送消息?
关于GCM端点无密钥推送的解决方案
首先明确说:你完全可以向GCM的https://android.googleapis.com/gcm/send端点推送通知,不需要客户端返回密钥——因为密钥本来就不是由客户端提供的,这里可能存在一个认知误区,我来详细解释:
核心认知纠正
不管是GCM还是FCM的推送端点,用于鉴权的服务器密钥(Server Key)是你自己在Firebase/Google Cloud控制台中获取的,客户端返回的只是包含设备注册ID(Registration ID)的端点URL,密钥不需要从客户端获取。旧的GCM端点和新的FCM端点使用的是同一个服务器密钥,所以你可以直接用现有的FCM服务器密钥来向GCM端点发送请求。
具体操作步骤
- 提取注册ID:从GCM端点URL中提取出设备的注册ID,比如如果客户端返回的端点是
https://android.googleapis.com/gcm/send/abcdef123456,那么注册ID就是abcdef123456。 - 构造推送请求:使用你的FCM服务器密钥,向GCM端点发送POST请求,请求格式和FCM的类似,示例如下:
POST https://android.googleapis.com/gcm/send Content-Type: application/json Authorization: key=YOUR_FCM_SERVER_KEY { "to": "abcdef123456", "notification": { "title": "你的通知标题", "body": "你的通知内容" } }
- 验证请求合法性:确保请求头中的
Authorization格式正确(key=你的服务器密钥),并且请求体的JSON格式符合GCM/FCM的规范。
为什么会出现GCM端点的情况
你提到的这些用户代理对应的都是旧版本的Chrome(Chrome 49是2016年的版本)和旧Android系统(4.4.4、6.0.1),这些环境中的Web推送实现还在使用GCM的旧端点,而新版本的Chrome和Android系统已经默认切换到FCM端点。
额外建议
- 优先迁移到FCM:谷歌已经弃用了GCM服务,虽然目前GCM端点还能工作,但未来可能会停止支持,建议引导用户更新Chrome浏览器和Google Play服务,这样后续注册会自动使用FCM端点。
- 统一处理端点逻辑:在你的推送服务中,可以判断客户端返回的端点是GCM还是FCM类型,自动适配对应的请求端点,不需要额外配置新的密钥。
内容的提问来源于stack exchange,提问作者manuelgos
相关产品推荐
相关产品推荐

