如何在中国大陆实现推送通知?——基于React Native的Android与华为设备无GCM推送方案咨询
Hey there! 刚好之前在大陆市场做过React Native推送的需求,给你分享几个完全不依赖GCM的靠谱方案,适配Android通用设备和华为设备都没问题:
一、华为设备优先选:华为推送服务(HMS Push Kit)
华为在大陆的市场占比很高,官方的HMS Push Kit稳定性拉满,而且完全不需要依赖GCM,是华为设备的最优解。
集成步骤大概是这样:
- 先去华为开发者后台注册账号,创建对应应用,配置好应用的签名信息(要和你RN打包的签名一致)
- 安装RN的HMS Push插件:
npm install @hmscore/react-native-hms-push --save - 在Android项目里配置华为的相关依赖和权限(插件文档里会有详细的配置项,主要是在
build.gradle和AndroidManifest.xml里加内容) - 在RN代码里初始化推送服务,比如在App.js的
componentDidMount里调用初始化方法,然后监听推送事件:
import HMSPush from '@hmscore/react-native-hms-push'; // 初始化 HMSPush.init(); // 监听通知到达 HMSPush.onNotificationReceived((notification) => { console.log('收到华为推送:', notification); // 这里可以处理通知的展示逻辑 }); // 监听通知点击 HMSPush.onNotificationOpened((notification) => { console.log('点击了华为推送:', notification); // 处理点击后的页面跳转等逻辑 });
二、通用Android设备(小米/OPPO/vivo等):第三方聚合推送服务
如果你的App要覆盖多个品牌的Android设备,用聚合推送最省心——它们已经集成了国内主流厂商的推送通道,不用你一个个去适配,而且也不依赖GCM。常用的有极光推送、个推这两个,都是大陆开发者常用的。
以极光推送为例,集成步骤:
- 去极光推送后台创建应用,获取AppKey
- 安装RN插件:
npm install jpush-react-native --save - 配置Android项目:在
AndroidManifest.xml里添加极光的AppKey,配置相关权限 - RN代码里初始化并监听事件:
import JPushModule from 'jpush-react-native'; // 初始化 JPushModule.initPush(); // 请求通知权限(大陆要求必须用户授权) JPushModule.requestPermissions(); // 监听通知到达 JPushModule.addReceiveNotificationListener((notification) => { console.log('收到极光推送:', notification); }); // 监听通知点击 JPushModule.addReceiveOpenNotificationListener((notification) => { console.log('点击了极光推送:', notification); });
注意:如果要让聚合推送走厂商的原生通道(比如小米的MIUI推送、OPPO的ColorOS推送),需要在聚合推送后台配置对应厂商的开发者账号信息,这样送达率会更高
三、自研长连接方案(不推荐,除非特殊需求)
如果完全不想依赖第三方服务,也可以自己做WebSocket长连接来实现推送,但这个方案坑比较多:
- 需要自己维护后台的推送服务,成本高
- 大陆的网络环境复杂,长连接容易断,需要做重连、心跳机制
- 设备休眠时可能会断开连接,需要适配后台保活,这在国内各厂商的系统里限制很多,很难做好
所以除非有特殊的隐私或可控性需求,不推荐这个方案
额外注意点
- 大陆的应用市场要求推送必须获得用户的明确授权,所以一定要在App启动时请求通知权限
- 测试时尽量用大陆的真机,模拟器可能不支持厂商的原生推送通道,测试结果不准
- 推送内容要符合大陆的合规要求,不能有违规内容,否则可能会被厂商拦截
内容的提问来源于stack exchange,提问作者trần bình




