一步步教你如何实现极光推送

极光推送,其实就是依赖第三方平台推送消息,匹配多端推送,可以支持的设备有Android、ios、winphone,单靠这样说我们还是无法知道他能做什么,我们先来看个小例子。

一、首先注册极光服务账号,登录后进入应用设置,记录AppKey和Master Secret,java后台开发者要用到。

二、点击“推送设置”:
设置Android和iOS:
Android应用包名自己定义,下载demo,Android开发人员查看集成指南,将sdk集成到项目中。
在这里插入图片描述
iOS应用包名自己定义,下载demo,iOS开发人员查看集成指南,将sdk集成到项目中。
在这里插入图片描述
三、Android和iOS分别在自己的业务内调用java提供的后台接口:用户和极光id绑定接口。
绑定成功后发送通知,模拟发一条通知:预估人数是1,这是极光后台返回的值。
在这里插入图片描述
四、发送后显示推送历史:
在这里插入图片描述
五、以上是模拟在极光开发者服务推送消息的过程。
该过程没有问题的话,我们java就可以开始爽爽的开发接口了。拼接极光推送所需的json数据,调用接口推送就可以。
六、java核心代码:
一、绑定接口开发:
绑定员工与极光id,我们是需要推给门店下所有登录门店的员工的所有手机(Android和iOS)。
这里有个麻烦的地方,就是每次移动端重装app,极光id都可能会变化,这样绑定的时候我不能确定是同一设备生成了不同极光id,还是不同设备生成了新的极光id,所以我采用的方法就是将这些id都绑定,但是线上会产生很多脏数据,不知道大牛们都怎么处理的。

二、走自己业务逻辑
三、拼接极光推送所需json:

/*** 组装极光推送专用json串* @param alert* @param registrationId* @return json*/private JSONObject generateJson(String alert, List registrationId,Map android_extras,Map ios_extras){JSONObject json = new JSONObject();JSONArray platform = new JSONArray();//平台platform.add("android");platform.add("ios");JSONObject audience = new JSONObject();//推送目标audience.put("registration_id", registrationId);JSONObject notification = new JSONObject();//通知内容JSONObject android = new JSONObject();//android通知内容android.put("alert", alert);android.put("extras", android_extras);//android额外参数JSONObject ios = new JSONObject();//ios通知内容ios.put("alert", alert);ios.put("sound", "default");ios.put("extras", ios_extras);//ios额外参数notification.put("android", android);notification.put("ios", ios);JSONObject options = new JSONObject();//设置参数options.put("time_to_live", Integer.valueOf(time_to_live));options.put("apns_production", apns_production);json.put("platform", platform);json.put("audience", audience);json.put("notification", notification);json.put("options", options);return json;}

推送:

    @Value("${jiguang.appKey}")private String appKey;                         //极光appKey@Value("${jiguang.masterSecret}")private String masterSecret;                   //极光secret@Value("${jiguang.pushUrl}")private String pushUrl;                        //极光推送接口url@Value("${jiguang.apns_production}")private String apns_production;                //推送环境参数,设置true表示推送生产环境,false表示开发;默认推送生产环境@Value("${jiguang.time_to_live}")private String time_to_live;                   //离线消息保留时长,默认保留86400(1天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到。@Overridepublic ApiResponse jiGuangPush(JpushRequestModel jpushRequestModel) {//构建极光推送所需jsonlog.info("极光推送带参:{}",jpushRequestModel);JSONObject object = generateJson(jpushRequestModel.getAlert(),jpushRequestModel.getRegistrationId(),jpushRequestModel.getAndroid_extras(),jpushRequestModel.getIos_extras());String data = object.toJSONString();log.info("-------极光推送构建的json消息:{}",data);//1.推送消息log.info("---------appKey:{},---------masterSecret:{}",appKey,masterSecret);String base64_auth_string = encryptBASE64(appKey + ":" + masterSecret);String authorization = "Basic " + base64_auth_string;log.info("Authorization值是:{}",authorization);HttpPost httpPost = new HttpPost(pushUrl);CloseableHttpClient client = HttpClients.createDefault();CloseableHttpResponse response = null;String result = "";Map map = new HashMap<>();try {StringEntity entity = new StringEntity(data, "UTF-8");entity.setContentType("application/json");httpPost.setEntity(entity);httpPost.setHeader("Authorization",authorization.trim());log.info("--------开始调用极光推送push-----");response = client.execute(httpPost);result = EntityUtils.toString(response.getEntity(), "UTF-8");log.info("--------push消息执行完毕-----,结果:{}",result);JSONObject jsonObject = JSONObject.parseObject(result);if(jsonObject.containsKey("error")){log.info("针对极光id为" + model.getAudience().getRegistration_id() + "的信息推送失败!");JSONObject error = JSONObject.parseObject(JSONObject.toJSONString(jsonObject.get("error")));log.info("错误信息为:" + error.get("message").toString());log.info("针对极光id为" + model.getAudience().getRegistration_id() + "的信息推送失败!");map.put("error",error);}else {log.info("----------极光推送成功!!!!!");map.put("sendno",jsonObject.get("sendno"));map.put("msg_id",jsonObject.get("msg_id"));}} catch (Exception e) {log.error("请求接口时偶遇异常,堆栈轨迹如下", e);}finally{if(response != null){try {response.close();} catch (IOException e) {e.printStackTrace();}}if(client != null){try {client.close();} catch (IOException e) {e.printStackTrace();}}}return ApiResponse.builder().setData(map);}/*** BASE64加密工具*/public static String encryptBASE64(String str) {byte[] key = str.getBytes();BASE64Encoder base64Encoder = new BASE64Encoder();String strs = base64Encoder.encodeBuffer(key);return strs;}

极光推送参考文档:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/
极光推送案例:https://v.qq.com/x/page/m01923a24ec.html

总结:

  • 官方文档是个很好的学习工具,我主要给大家分享的是使用方式,欢迎大家拍砖!
  • 写接口,不是实现了就好的,我们还应该考虑自己的接口是否好用,好用体现在别人复用的时候,可以很容易实现。(我们的代码需要不断优化)
  • 移动端开发者千万注意:生产环境要传生产环境的证书,打生产环境的包
  • 极光推送本身也是不稳定的,在极光服务平台测试发通知时,获取的预估人数对不上也时常发生,也不用急,用任何一家软件,都不能保证100%满足用户需求,只能从多家同类软件中对比,选择适合自己的就可以。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部