You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在中国大陆实现推送通知?——基于React Native的Android与华为设备无GCM推送方案咨询

Hey there! 刚好之前在大陆市场做过React Native推送的需求,给你分享几个完全不依赖GCM的靠谱方案,适配Android通用设备和华为设备都没问题:

一、华为设备优先选:华为推送服务(HMS Push Kit)

华为在大陆的市场占比很高,官方的HMS Push Kit稳定性拉满,而且完全不需要依赖GCM,是华为设备的最优解。

集成步骤大概是这样:

  1. 先去华为开发者后台注册账号,创建对应应用,配置好应用的签名信息(要和你RN打包的签名一致)
  2. 安装RN的HMS Push插件:npm install @hmscore/react-native-hms-push --save
  3. 在Android项目里配置华为的相关依赖和权限(插件文档里会有详细的配置项,主要是在build.gradleAndroidManifest.xml里加内容)
  4. 在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。常用的有极光推送、个推这两个,都是大陆开发者常用的。

以极光推送为例,集成步骤:

  1. 去极光推送后台创建应用,获取AppKey
  2. 安装RN插件:npm install jpush-react-native --save
  3. 配置Android项目:在AndroidManifest.xml里添加极光的AppKey,配置相关权限
  4. 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

火山引擎 最新活动