1.需求布景&方针
1.1需求布景
依据极光后台检查发送记载,大概有超越一半的push发送失败,此次push重构为了添加推送成功率
1.2方针
- 推送类型:
在线推送:app在前台或后台,依据极光战略推送,默许战略是先极光通道再厂商通道。华为现在已强制厂商通道,其他厂商有次数限制所以运用默许战略
离线推送:app进程不在,这个有必要走厂商通道才干送达
- 方针:app在后台/app进程不在时展现推送,在前台不展现推送
2.技术方案设计
2.1核心模块
2.1.1发送push链路
2.1.2上报alias流程图
客户端setAlias将当时设备绑定到该alias=md5(userId),并上报给极光,这样发每条推送home server拿到方针用户的userId后,经过jiguang push serivce 计算出alias=md5(userId)调极光api发推送,极光经过alias找到对应设备后发送推送
2.1.3App上报前后台状况给Jiguang Push Service
为了实现方针中app在前台不发推送,app在后台发推送,需求jiguang push service维护一份发送推送时该用户app在前后台状况。为了处理app反常退出未上报的鸿沟情况,app在前台时守时的告诉jiguang push service
2.1.4Jiguang push service发送push前置条件
作为中间层,home service发来恳求时,会依据当时alias的push开关、前后台状况来决议是否调用极光api发送push
2.2后端接口界说
//上报alias给极光
JPushInterface.setAlias(context, 0, getPushAlias())
//移除极光推送Alias绑定的一切设备:由jpushservice供给
@POST("mobile/deleteAlia")
fun deleteAliasRequest(@Body deleteAliasReq: DeleteAliasReq): Observable<Response<Void>>
//上报pushService前后台状况:由jpushservice供给
@POST("mobile/report")
fun reportActiveRequest(@Body reportActiveReq: ReportActiveReq): Observable<Response<Void>>
//从极光移除alias
JPushInterface.deleteAlias(context, 0)
2.3鸿沟情况
- 第一次登陆后忽然断网,导致alias上报失败,下次再进入首页会从头触发2.1.2上报alias逻辑
- app断网后,无法上报前后台状况,jiguang push service会执行发送逻辑,来网后仍然接收到push
- app反常退出没有上报前后台状况,jiguang push service会依据轮询时刻已过期,触发极光离线推送逻辑
- 华为因为极光通道不稳定强制走厂商,vivo因为默许测验,所以调整为出产:
thirdPartyChannel = new HashMap<>();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("importance", importance);
jsonObject.addProperty("distribution", "ospush");
thirdPartyChannel.put("huawei", jsonObject);
JsonObject vivoParam = new JsonObject();
vivoParam.addProperty("classification", 1);
thirdPartyChannel.put("vivo", vivoParam);
2.4兼容性
push开关逻辑不兼容之前已装置且已封闭push
不兼容未更新app版别用户
3.0上线注意事项
需求Jiguang push service & home server & android app同步上线,app需求强制更新
4.0参考资料
1.各个厂商注册push:docs.jiguang.cn/jpush/clien…
2.Android集成各个厂商通道:docs.jiguang.cn/jpush/clien…
3.Android SDK集成指南:docs.jiguang.cn/jpush/clien…
4.删去别号一切设备绑定关系:docs.jiguang.cn/jpush/serve…删去别号
5.vivo选择推送系统消息:dev.vivo.com.cn/documentCen…