Jpush踩过的坑

来源:互联网 发布:视频点播软件哪个好 编辑:程序博客网 时间:2024/04/28 13:15

JPush集成,客户端和服务端都不需要进行二次开发,只要配置一下就可以了,最多发送消息这块服务端需要调用一下Jpush的接口,就一个http请求,非常简单,要是不想自建推送平台,Jpush,Mipush 都是不错的选择。

一直以来,都是使用的MiPush推送消息,领导要求切换成Jpush,理由嘛,说是不稳定,才搞了这么一朝,那就切吧,在过渡阶段,需要两个push共存,这样也就带来些bug。

1、两种push共存,收到重复消息
场景:启动app后初始化两种push,然后请求接口,返回使用push类型flag,根据flag,决定设置对应的tag和alias,这种情况下,接收消息正常。切换push类型,设置对应的tag和alias,反注册另外一种push的tag和alias,接收消息正常。注册上一种push后,退出app,切换成另一种push,再次进入app,会收到2种push推送相同的消息,(push对消息有几天保留期,再次进入会把没有送达的消息推送到客户端)

解决这个问题,在启动app时,清空所有的tag和alias。

2、Jpush setTag或setAlias 返回6002错误码

场景:连续调用setTag,setAlias 返回6002错误码,不同手机在同样的网络下表现不一样,有的手机不会超时,有的手机超时频繁。
极光社区介绍原因: 1)网络的问题; 2)服务器端处理慢的问题。3)调用了stopPush后没有调用resumePush。

通过排查,WiFi条件下,网络良好,原因1基本上排除;项目在启动时候没有调用stopPush,原因3排除;把重点放到服务器端处理慢的问题,通过与jpush客服交流,他们说连续调用setTag或setAlias要间隔3-5秒钟,不然会抛掉后一次请求,可能造成返回超时,返回6002错误码

解决: setTag与setAlias最终都是调用setTagsAndAlias方法,直接调用setTagsAndAlias方法把2次调用降到1次,然后清空与设置tag与alias两次调用间隔5s,再加上一个超时重试机制,超时后间隔5秒重试一次,最多重试3次。

3、Tag、Alias、Registrationid不需要每次初始化时都重新设置

tag、alias可以参考API进行设置,每次设置是覆盖设置,而不是增量设置。Tag和alias一经设置成功,除非取消或覆盖,是不会变化的。设置好的tag、alias与客户端的对应关系保存在JPush服务器,目前没有从JPush服务器查询这个对应关系的接口,所以需要客户将对应关系保存在APP应用服务器。

Registrationid是客户端SDK第一次成功连接到Jpush服务器时,Jpush服务器给分配的。可以通过获取 RegistrationID API来获取Registrationid进行推送。Registrationid对应一个应用的一个客户端。

所以没必要多次设置,除非你有多个push通道,并且会切换,防止重复收消息,才有必要重新去设置这些值。

还有其他的坑,可以去社区找找,或者直接联系客服,问清楚情况,官方API写的很简单,很多坑都没介绍,慢慢去踩吧

0 0
原创粉丝点击