(4.2.12.2)浅谈第三方推送[API的不同]:百度推送、小米推送、华为推送

本文对比分析了百度、小米和华为三家公司的推送服务,包括集成方式、推送管理类、接收器等核心组件的区别,并探讨了不同推送模式下消息送达率的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一章节,我们了解了推送的基本集成,在本章节分析他们在使用上的不同

录入时版本号:

 百度、小米、华为推送一览

属性

平台百度小米华为备注
标示channeidregidtoken向Push服务请求应用的唯一标示
userid详见备注1
应用IDAPP IDAppID
应用keyAPI KEYAppKey
应用秘钥SECRET KEYAppSecret
标签tagtopictag
别名alias
统一账户userAccount第三方命名账户
请求idrequestid每次与第三方服务器交互时,请求的id号
管理者PushManagerMiPushClientPushManager推送服务的app方的管理类
接收器PushMessageReceiverPushMessageReceiverPushEventReceiver

管理类

平台百度小米华为备注
名称PushManager
Push服务初始化及绑定startWork;注意:不要在Application的onCreate里去做startWork的操作。registerPushrequestToken
停止Push服务stopWorkunregisterPushderegisterToken停止本应用Push服务进程,并且完成unbind工作
恢复Push服务resumeWork恢复本应用Push服务,并且再次完成bind工作
暂停接收pausePushenableReceiveNormalMsg与enableReceiveNotifyMsg
恢复接收resumePushenableReceiveNormalMsg与enableReceiveNotifyMsg这时服务器会把暂停时期的推送消息重新推送过来
设置免打扰时段setNoDisturbModesetAcceptTime设置免打扰模式的具体时段,该时间内处于免打扰模式,通知到达时去除通知的提示音、振动以及提示灯闪烁
查询push是否被停止的接口isPushEnabledrequestPushState
设置TagsetTagssubscribesetTags用于设置标签;成功设置后,可以从管理控制台或您的服务后台,向指定的设置了该tag的一群用户进行推送
删除TagdelTagsunsubscribedeleteTags用于删除标签
列举TaglistTagsgetAllTopicgetTags用于列出本机绑定的标签
设置别名setAlias开发者可以为指定用户设置别名,然后给这个别名推送消息,效果等同于给RegId推送消息。注: 一个RegId可以被设置多个别名,如果设置的别名已经存在,会覆盖掉之前的别名
取消别名unsetAlias
获取别名getAllAlias
设置userAccountsetUserAccount
取消UserAccountunsetUserAccount
设置通知的BuildersetNotificationBuilder设置通知栏样式,并为样式指定编号。在管理控制台或您的服务后台中,您可以指定相应的编号,让客户端显示预先设定好的样式
设置默认的通知BuildersetDefaultNotificationBuilder设置默认的通知栏样式;如果推送通知时不指定id的样式,都将显示该默认样式
设置富媒体通知的BuildersetMediaNotificationBuilder为富媒体通知设置样式
开启精确LBS推送模式enableLbs开启精确LBS推送模式,覆盖最近半小时内在指定区域出现过的终端
关闭精确LBS推送模式disableLbs
上报点击的消息reportMessageClicked

备注1:百度推送

  • 对于Android设备无账户体系:
    • 同一台设备对应唯一一个channel_id;
    • 同一台设备上的不同应用对应不同的user_id;
    • 同一台设备上的相同应用对应唯一一对[channel_id, user_id];
    • 不同的设备对应不同的channel_id,若channel_id不同,user_id一定不同;
  • 对于Android设备百度账户体系:
    • 同一台设备对应唯一一个channel_id;
    • 同一台设备上若有不同的用户登陆了同一个应用,那么就会有不同的user_id;
    • 若同一个用户在多个设备上登陆了相同的应用,那么得到的将都是同一个user_id;

接收器Receiver

平台百度小米华为备注
命名PushMessageReceiverPushMessageReceiveronToken
获取绑定请求的结果onBindonReceiveRegisterResult或onCommandResult
获取绑定状态onCheckBindStategetPushState
stopWork的回调函数onUnbindonReceiveRegisterResult或onCommandResult
接收透传消息的函数onMessageonReceivePassThroughMessageonPushMsg
接收通知到达的函数onNotificationArrivedonNotificationMessageArrivedonEvent
接收通知点击的函数onNotificationClickedonNotificationMessageClickedonEvent
setTags的回调函数onSetTagsonCommandResultonEvent
delTags的回调函数onDelTagsonCommandResult
listTags的回调函数onListTagsonCommandResult
设置别名的回调onCommandResult
删除别名的回调onCommandResult
设置通知时间的回调onCommandResult
暂停推送的回调onCommandResult
唤醒推送的回调onCommandResult
  • 小米 onCommandResult函数参数列表

参数列表    参数说明
message 服务器返回的命令封装在 MiPushCommandMessage的对象中,可以从该对象中获取command、commandArguments、
resultCode、 reason等信息。

command表示命令的类型。
调用MiPushClient.registerPush(),返回MiPushClient.COMMAND_REGISTER
调用MiPushClient.setAlias(),返回MiPushClient.COMMAND_SET_ALIAS
调用MiPushClient.unsetAlias(),返回MiPushClient.COMMAND_UNSET_ALIAS
调用MiPushClient.subscribe(),返回MiPushClient.COMMAND_SUBSCRIBE_TOPIC
调用MiPushClient.unsubscribe(),返回MiPushClient.COMMAND_UNSUBSCIRBE_TOPIC
调用MiPushClient.setAcceptTime(),返回MiPushClient.COMMAND_SET_ACCEPT_TIME
调用MiPushClient.pausePush(),返回MiPushClient.COMMAND_SET_TARGETPT_TIME
调用MiPushClient.resumePush(),返回MiPushClient.COMMAND_SET_ACCEPT_TIME

commandArguments 表示命令的参数。例如:
注册app就会返回app本次初始化所对应MiPush推送服务的唯一标识regId,alias就会返回alias的内容,订阅和取消订阅主题就会返回topic,setAcceptTime就会返回时间段。

resultCode 表示调用命令的结果。如果成功,返回ErrorCode.Sussess0;否则返回错误类型值。

reason表示调用命令失败的原因。如果失败,则返回失败原因,否则返回为null。
  • 华为 onEvent函数参数列表
NOTIFICATION_OPENED, //通知栏中的通知被点击打开
NOTIFICATION_CLICK_BTN, //通知栏中通知上的按钮被点击
PLUGINRSP, //标签上报回应

通知样式

平台百度小米华为备注
自定义通知BuilderBasicPushNotificationBuilder自定义通知状态栏构建类构造函数(定制通知栏基础样式)
自定义通知BuilderCustomPushNotificationBuilder自定义通知状态栏构建类构造函数(定制通知栏基础样式及layout)
设置通知flagssetNotificationFlags定制 Android Notification 里的flags
设置通知defaultssetNotificationDefaults定制 Android Notification 里的defaults
设置通知状态栏iconsetStatusbarIcon定制 Android Notification通知状态栏的icon图标
设置通知样式图片setLayoutDrawable定制自定义layout中显示的图片
设置通知样式声音setNotificationSound自定义推送的声音

推送配置

平台百度小米华为备注
PushSettings
调试模式enableDebugMode

支持

平台百度小米华为备注
启动点非“Application的oncreate()”Application的oncreate()非“Application的oncreate()”启动推送服务的位置

小米

  • 透传和通知栏,在送达率上有什么分别?

答:首先解释一下透传和通知栏方式的原理,透传是指当小米推送服务客户端SDK接收到消息之后,直接把消息通过回调方法发送给应用,不做任何处理;而通知栏方式,则在设备接收到消息之后,首先由小米推送服务SDK弹出标准安卓通知栏通知,在用户点击通知栏之后,激活应用。 在非MIUI系统中,由于维护小米推送服务长连接的service是寄生在App的运行空间当中的,因此透传和通知栏方式在送达率上并没有任何区别,都需要应用驻留在后台。即,如果一台设备通知栏消息能够接收到并弹出,那么其透传消息也同样能接收到。 在MIUI系统中,由于长连接是由MIUI系统服务建立并维护的,因此在接收消息的时候并不需要应用驻留后台。如果采用通知栏方式接收消息,由于通知栏也是MIUI系统服务弹出的,就可以做到不需要用户后台驻留或者可以自启动消息就能送达。而如果采用透传消息,由于需要直接执行应用的代码,因此即使消息已经到了系统服务,如果应用没有驻留后台或者能自启动,消息依然不能送达,需等下次用户手动点击激活应用后,才能接收到消息。 综上,在MIUI系统中,通知栏消息的送达率会远高于透传方式;在非MIUI系统中,通知栏和透传方式的送达率是一样的。

  • regID是根据什么生成的?会不会经常变化?

答:regID是在客户端向小米推送服务注册时,小米推送服务端根据设备标识、appID以及当前时间戳生成,因此能够保证每个设备上每个app对应的regID都是不同的。当app注册成功后,小米推送服务客户端SDK会在本地通过shared_prefs来保存这个regID,之后app调用注册,SDK后会在本地直接读取出这个regID并直接返回,不会重新请求服务器。因此只要应用不卸载重装或者清除应用本地数据,regID就不会变化。否则,如果SDK没有从本地读取到缓存的regID,则会向服务端重新请求,此时regID会重新生成。

  • 如果我使用通知栏类型消息,能否在通知栏消息到达之前,先执行一段app的代码?或者在通知栏到达时,通知app?

答:在MIUI系统上,通知栏类型的消息,是不需要应用启动就能弹出的(这一特性决定了通知栏消息的弹出可以不受应用自启动管理的影响),因此在整个弹出通知栏消息的过程中,app是完全不可感知的,当用户点击通知栏消息之后,才会执行到app的代码。

<think>我们正在配置核心交换机的静态路由,目标网段是10.0.1.0/24,下一跳地址是10.250.12.2。 根据网络配置的一般原则,我们需要在核心交换机上添加一条静态路由,指明目标网络和下一跳地址。 假设我们使用的是华为或类似命令体系的交换机,配置命令通常如下: 1. 进入系统视图:system-view 2. 添加静态路由:ip route-static 10.0.1.0 24 10.250.12.2 但是,我们需要确保以下几点: - 核心交换机上已经有与下一跳地址10.250.12.2相连的接口,并且该接口已经正确配置了IP地址(通常在同一网段)且处于up状态。 - 下一跳地址10.250.12.2所连接的对端设备(可能是另一台交换机或路由器)也配置了正确的路由,能够将去往10.0.1.0/24的流量返回。 另外,根据引用[1]和引用[2]中的思路,配置静态路由后,可能需要调整计算机的网关,但这里我们只配置核心交换机,计算机的网关应该指向核心交换机上的相应接口。 具体步骤: 1. 登录核心交换机的命令行界面。 2. 进入系统视图。 3. 配置静态路由。 4. 保存配置。 详细命令(以华为交换机为例): <步骤开始> system-view ip route-static 10.0.1.0 255.255.255.0 10.250.12.2 然后保存:save <步骤结束> 注意:子网掩码可以用24代替255.255.255.0,即:ip route-static 10.0.1.0 24 10.250.12.2 验证配置: 使用命令:display ip routing-table 查看是否已经存在目标网络10.0.1.0/24的路由,下一跳是否为10.250.12.2。 另外,根据引用[3]中提到的命令,我们可以使用类似命令查看ARP信息,但这里我们主要关注路由表。 引用[4]提到了OSPF区域划分,但这里我们只需要配置静态路由,涉及动态路由协议。 如果配置后无法访问,需要检查: - 下一跳地址10.250.12.2是否可达(在核心交换机上ping 10.250.12.2) - 下一跳设备上的返回路由是否配置正确(即从10.0.1.0/24网段返回核心交换机所连网段的路由) - 防火墙策略是否允许该网段的流量通过 根据用户需求,我们只配置核心交换机的静态路由。 生成相关问题: 1. 如何验证静态路由是否生效? 2. 如果配置后无法访问目标网段,应该如何排查? 3. 除了静态路由,还有哪些路由配置方式? 4. 在核心交换机上配置静态路由需要注意哪些安全事项?</think>### 核心交换机静态路由配置指南 要访问目标网段 `10.0.1.0/24` 且下一跳为 `10.250.12.2`,需在核心交换机上执行以下步骤(以华为/H3C交换机为例): #### 配置步骤: 1. **进入系统视图** ```bash system-view ``` 2. **添加静态路由** ```bash ip route-static 10.0.1.0 255.255.255.0 10.250.12.2 # 或简写:ip route-static 10.0.1.0 24 10.250.12.2 ``` - **参数说明**: - `10.0.1.0/24`:目标网段及子网掩码 - `10.250.12.2`:下一跳地址(需确保与交换机直连接口可达) 3. **保存配置** ```bash save ``` #### 关键验证命令: - 查看路由表: ```bash display ip routing-table | include 10.0.1.0 ``` 预期输出:`Destination/Mask: 10.0.1.0/24 NextHop: 10.250.12.2` - 测试连通性(在交换机上执行): ```bash ping -a 10.250.12.1 10.0.1.1 # 指定源IP(交换机接口IP)测试目标网段 ``` #### 注意事项: 1. **下一跳可达性**: - 确保交换机有接口与 `10.250.12.2` 同网段(例如接口IP=`10.250.12.1/24`)[^1]。 - 验证直连连通性:`ping 10.250.12.2`。 2. **回程路由**: - 目标网段设备(`10.0.1.0/24`)需配置返回核心交换机的路由,否则流量无法双向通行[^2]。 3. **安全策略**: - 若经过防火墙,需放行 `10.250.12.0/24` 与 `10.0.1.0/24` 的互访策略。 4. **替代方案**: - 若需高可用,可配置动态路由(如OSPF),将核心交换机和目标设备加入同一区域[^4]。 --- ### 相关问题 1. **如何验证静态路由是否生效?** - 使用 `display ip routing-table` 查看目标网段是否指向正确下一跳,并通过 `tracert` 测试路径。 2. **配置静态路由后仍无法访问目标网段,如何排查?** - 检查下一跳可达性、目标设备回程路由、ACL/防火墙策略及ARP表(`display arp`)[^3]。 3. **静态路由与动态路由(如OSPF)有何优劣?** - 静态路由配置简单但需手动维护;动态路由自动适应拓扑变化,适合复杂网络[^4]。 4. **多网段访问如何优化配置?** - 可汇总路由(如 `10.0.0.0/16` 指向同一下一跳),减少路由表条目。 [^1]: 引用自配置逻辑:需确保下一跳与交换机接口在同一子网。 [^2]: 引用自网关配置原则:回程路由缺失会导致单向通信故障。 [^3]: 引用自ARP验证方法:通过物理地址确认设备连通性。 [^4]: 引用自路由区域设计:动态路由适用于多区域骨干网络。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值