Android实战——极光推送前后端整体设计

1,530 阅读2分钟

1.需求背景&目标

1.1需求背景

根据极光后台查看发送记录,大概有超过一半的push发送失败,此次push重构为了增加推送成功率

jpush_xianzhuang1

jpush_xianzhuang1

1.2目标

  1. 推送类型

在线推送:app在前台或后台,根据极光策略推送,默认策略是先极光通道再厂商通道。华为现在已强制厂商通道,其他厂商有次数限制所以使用默认策略

离线推送:app进程不在,这个必须走厂商通道才能送达

  1. 目标:app在后台/app进程不在时展示推送,在前台不展示推送

2.技术方案设计

2.1核心模块

2.1.1发送push链路

jpush_xianzhuang1

2.1.2上报alias流程图

客户端setAlias将当前设备绑定到该alias=md5(userId),并上报给极光,这样发每条推送home server拿到目标用户的userId后,经过jiguang push serivce 计算出alias=md5(userId)调极光api发推送,极光通过alias找到对应设备后发送推送

jpush_xianzhuang1

2.1.3App上报前后台状态给Jiguang Push Service

为了实现目标中app在前台不发推送,app在后台发推送,需要jiguang push service维护一份发送推送时该用户app在前后台状态。为了处理app异常退出未上报的边界情况,app在前台时定时的告诉jiguang push service

jpush_xianzhuang1

2.1.4Jiguang push service发送push前置条件

作为中间层,home service发来请求时,会根据当前alias的push开关、前后台状态来决定是否调用极光api发送push

jpush_xianzhuang1

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边界情况

  1. 第一次登陆后突然断网,导致alias上报失败,下次再进入首页会重新触发2.1.2上报alias逻辑
  2. app断网后,无法上报前后台状态,jiguang push service会执行发送逻辑,来网后依然接收到push
  3. app异常退出没有上报前后台状态,jiguang push service会根据轮询时间已过期,触发极光离线推送逻辑
  4. 华为因为极光通道不稳定强制走厂商,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…