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

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

录入时版本号:

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

属性

平台百度小米华为备注
标示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的代码。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值