# push 对外接口文档 ## 1、生成推送任务接口【入库,可针对场景统计发送总数和打开总数】 #### 适用场景: - 针对一批确定的用户,比如订阅了某个秒杀活动的20W用户,给他们推`秒杀活动即将开始`的消息。 #### 对接方式: - 直接往rabbitMQ写一条消息进MQ, 所有`push`节点会监听MQ, 接收到推送任务之后,生成一条具体的task。 - topic类型 : `yoho_task_push` - 测试环境rabbitMq账号密码:[取的是global-autoconfig.properties中`rabbit_common`的值] - rabbit_host=${rabbit_common} 【`192.168.102.211:5672`】 - rabbit_user=${rabbit_common_user}【yoho】 - rabbit_password=${rabbit_common_password}【yoho】 - rabbit_vhost=yoho - AWS rabbitMq账号密码:[取的是global-autoconfig.properties中`rabbit_common`的值] - rabbit_host=${rabbit_common} 【`rabbitmq-common.yohoops.org:5672`】 - rabbit_user=${rabbit_common_user}【yoho】 - rabbit_password=${rabbit_common_password}【yoho】 - rabbit_vhost=yoho - PUSH收到此中MQ消息,会生成一条具体的推送任务入库,表名是q_msg_system的send_task表。PUSH在处理的时候会把该条推送对应的用户写进redis。 #### 消息格式体 | 参数名称 | 参数类型 | 可否为空 | 参数解释 | 默认值 | 备注 | |:-------| -----:|-----:|-----:|-----:|----:| |androidTitle|String|是|安卓推送标题|null|无| |androidContent|String|是|安卓推送内容|null|`安卓的推送分为title和content两部分`| |iosAlert|String|是|ios推送内容|null|`ios的推送只有alert`| |appendParams|String|否|APP跳转链接|null|必须为`JSON格式`的字符串,给APP跳转使用| |sendTime|long|否|发送时间|null|可做定时用,此值小于PUSH服务器的时间即会发送| |sceneType|String|否|此次推送的场景|null|如`品牌上新`为ADDED_BRANDS| |sceneKey|String|否|此次推送的场景key|null|如`品牌上新`时此值为brand_id| |uids|List<String>|否|推送给哪些用户|null|大小不要超过10000,量大时自行分片| |iosVersions|List<String>|是|ios版本号|null|无| |androidVersions|List<String>|是|安卓的版本号|null|无| - 参数申明 - androidTitle和androidContent同时为空,则不会生成安卓的推送任务。 - iosAlert为空,则不会生成ios的推送任务。 - sceneType 和 sceneKey 很重要,大数据统计时会用到,请合理命名。 - uids大小不要超过1W,数据量大时,请自行分片。 #### 生成MQ消息实体的demo - PushTaskMqMessage对象 public class PushTaskMqMessage{ private String androidTitle;// 安卓推送标题 private String androidContent;// 安卓推送内容 private String iosAlert;// IOS推送内容 private String appendParams = "{\"type\":\"event\",\"ad_action\":\"go.brand\",\"ad_option\":\"brand=4\"}";// 推送跳转的链接,默认品牌首页 private Long sendTime;// 推送时间 private String sceneType;// sceneType 的类型(如上新推送、改价推送、到时候有统一的配置,方便) private String sceneKey;// 推送场景的key(如上新推送的brandId) private List<String> uids;// 要给哪些用户推送 private List<String> iosVersions;// 推送的版本号 private List<String> androidVersions;// 推送的版本号 } - 生成写进MQ的消息字符串 public static void main(String[] args) { JSONObject pushMessage = new JSONObject(); PushTaskMqMessage pushTaskMqMessage = new PushTaskMqMessage(); //设置安卓推送标题和内容,同时为空则不推送安卓 pushTaskMqMessage.setAndroidTitle("秒杀活动即将开始"); pushTaskMqMessage.setAndroidContent("adidas秒杀活动计即将开始,赶紧戳进来>>"); //设置IOS推送内容,为空则不推送IOS pushTaskMqMessage.setIosAlert("您订阅的adidas秒杀活动计即将开始,赶紧戳进来>>"); //APP跳转链接,有参考文档,一定要是个完整的JSON字符串 pushTaskMqMessage.setAppendParams("{\"type\":\"event\",\"ad_action\":\"go.url\",\"ad_option\":\"link=http://feature.yoho.cn/1019/1019NEWGIRL/index.html?app_version=4.9.2.1609120001\",\"isLogin\":\"Y\",\"act_id\":\"841\"}"); //设置推送场景和推送key pushTaskMqMessage.setSceneType("SpecilSkill"); pushTaskMqMessage.setSceneKey("841"); //设置推送的uids,一批不要超过1W,量大自行分片 pushTaskMqMessage.setUids(Arrays.asList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15")); //设置APP版本,不设则所有的版本 pushTaskMqMessage.setIosVersions(null); pushTaskMqMessage.setAndroidVersions(null); //生成丢进mq的字符串 pushMessage.put("data", pushTaskMqMessage); String addToMqString = pushMessage.toJSONString(); System.out.println(addToMqString); //TODO ADD pushMessage json String to RabbitMq,topic is yoho_task_push } ## 2、直接发给用户【不入库,日志中可统计推送总数,无法统计打开总数】 #### 适用场景: - 针对某些业务场景,如给用户发一条‘你的订单即将过期,请赶紧支付’的消息,默认不入库。 #### 对接方式: - 直接往rabbitMQ写一条消息进MQ, 所有`push`节点会监听MQ, 接收到推送任务之后,进行推送。 - topic类型 : `yoho_push` - 测试环境rabbitMq账号密码:[取的是global-autoconfig.properties中`rabbit_common`的值] - rabbit_host=${rabbit_common} 【`192.168.102.211:5672`】 - rabbit_user=${rabbit_common_user}【yoho】 - rabbit_password=${rabbit_common_password}【yoho】 - rabbit_vhost=yoho - AWS rabbitMq账号密码:[取的是global-autoconfig.properties中`rabbit_common`的值] - rabbit_host=${rabbit_common} 【`rabbitmq-common.yohoops.org:5672`】 - rabbit_user=${rabbit_common_user}【yoho】 - rabbit_password=${rabbit_common_password}【yoho】 - rabbit_vhost=yoho - PUSH收到此中MQ消息,不会生成具体的任务,拿到了直接发给用户。发的过程中会记日志。 #### 消息格式体 | 参数名称 | 参数类型 | 可否为空 | 参数解释 | 默认值 | 备注 | |:-------| -----:|-----:|-----:|-----:|----:| |id|int|否|任务id,`请设为0`|无|| |title|String|否|推送标题|无|推送类型为安卓时,为安卓标题,ios则设为''| |content|String|否|推送内容|无|安卓推送的内容或IOS推送的内容| |sendMethods|String|否|推送方法|android_getui或ios|安卓为android_getui,ios为ios| |version|String|是|APP推送的具体版本|null|不传为全部版本| |appendParams|String|否|APP跳转链接|null|必须为`JSON格式`的字符串,给APP跳转使用| |pushScene|String|否|此次推送的场景|null|如`订单即将关闭`为ORDER_PUSH| |pushSceneKey|String|否|此次推送的场景key|null|如`订单即将关闭`,此值为order_id| |uids|List<String>|否|推送给哪些用户|null|大小不要超过10000,量大时自行分片| - 参数申明 - title和content表示推送的内容和标题,安卓两个字段都要填,ios的title设为'',content设为完整的推送内容 - id为send_task表中对应的id,因为业务方并不知道,默认情况下直接设为0即可。 - sceneType 和 sceneKey 很重要,大数据统计时会用到,请合理命名。 - uids大小不要超过1W,数据量大时,请自行分片。 #### 生成MQ消息实体的demo - PushSendTaskBO对象 public class PushSendTaskBO { private int id = 0;//任务id,为0即可 private String title;//推送标题 private String content;//推送内容 private String sendMethods;//ios/android_getui private String version;//版本,可为空 private String appendParams;//APP跳转链接 private String pushScene;//推送场景 private String pushSceneKey;//推送场景key } - DispatchPushMsgBO对象 public class DispatchPushMsgBO { private PushSendTaskBO task; private List<String> uids; } - 生成写进MQ的消息字符串 public class DispatchPushMsgDemo { public static void main(String[] args) { JSONObject dispatchPushMsgDemo = new JSONObject(); DispatchPushMsgBO dispatchPushMsg = new DispatchPushMsgBO(); //构造推送内容 PushSendTaskBO pushSendTaskBO = new PushSendTaskBO(); pushSendTaskBO.setId(0); pushSendTaskBO.setTitle(""); pushSendTaskBO.setContent("您订阅的adidas秒杀活动计即将开始,赶紧戳进来>>"); pushSendTaskBO.setAppendParams("{\"type\":\"event\",\"ad_action\":\"go.url\",\"ad_option\":\"link=http://feature.yoho.cn/1019/1019NEWGIRL/index.html?app_version=4.9.2.1609120001\",\"isLogin\":\"Y\",\"act_id\":\"841\"}"); pushSendTaskBO.setPushScene("SpecilSkill"); pushSendTaskBO.setPushSceneKey("841"); pushSendTaskBO.setSendMethods("ios"); dispatchPushMsg.setTask(pushSendTaskBO); //构造推送的uids dispatchPushMsg.setUids(Arrays.asList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15")); dispatchPushMsgDemo.put("data", dispatchPushMsg); //显示MQ消息的内容 System.out.println(dispatchPushMsgDemo.toJSONString()); } }