admin
2024-01-23 81da61b828e29b7745e1382dfbbaeb685dc083ef
fanli/src/main/java/com/yeshi/fanli/util/push/OPPOPushUtil.java
@@ -1,347 +1,346 @@
package com.yeshi.fanli.util.push;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yeshi.utils.annotation.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.oppo.push.server.Notification;
import com.oppo.push.server.Result;
import com.oppo.push.server.Sender;
import com.oppo.push.server.Target;
import com.yeshi.fanli.entity.config.push.HWPushConfig;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@Component
public class OPPOPushUtil {
   private static OPPOPushUtil hWPushUtil;
   @Autowired
   private BusinessSystemService businessSystemService;
   @PostConstruct
   public void init() {
      hWPushUtil = this;
      hWPushUtil.businessSystemService = this.businessSystemService;
   }
   private static String appkey = "";
   private static String masterSecret = "";
   static {
      Properties ps = org.yeshi.utils.PropertiesUtil
            .getProperties(TaoBaoUtil.class.getClassLoader().getResourceAsStream("push_hw.properties"));
      HWPushConfig config = (HWPushConfig) MapUtil.parseMap(HWPushConfig.class, ps);
      appkey = config.getAppId();
      masterSecret = config.getAppSecret();
   }
   private static Map<String, String> getParams(String type, String activity, String url, String webUrl, Long id) {
      Map<String, String> data = new HashMap<>();
      if (type != null)
         data.put("type", type);
      if (activity != null)
         data.put("activity", activity);
      if (url != null)
         data.put("url", url);
      if (webUrl != null)
         data.put("webUrl", webUrl);
      if (id != null)
         data.put("id", id + "");
      return data;
   }
   /**
    * 推送商品
    *
    * @param registerIds
    *            -最大值1000
    * @param title
    * @param content
    * @param goodsType
    * @param goodsId
    * @throws PushException
    */
   public static void pushGoods(List<String> registerIds, String title, String content, int goodsType, Long goodsId)
         throws PushException {
      if (registerIds != null && registerIds.size() > 100)
         throw new PushException(1, "设备数不能超过100个");
      String activity = Constant.systemCommonConfig.getAndroidBaseactivityName()
            + ".ui.recommend.GoodsBrowserActivity";
      Map<String, String> params = getParams("goodsdetail", activity, null, null, goodsId);
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 网页推送
    *
    * @param registerIds
    *            最大值1000
    * @param title
    * @param content
    * @param url
    *            -网页链接
    * @throws PushException
    */
   public static void pushUrl(List<String> registerIds, String title, String content, String url)
         throws PushException {
      if (registerIds != null && registerIds.size() > 100)
         throw new PushException(1, "设备数不能超过1000个");
      String activity = Constant.systemCommonConfig.getAndroidBaseactivityName() + ".ui.invite.ShareBrowserActivity";
      Map<String, String> params = getParams("url", activity, null, url, null);
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 站内信推送
    *
    * @param registerIds
    *            最大值1000
    * @param title
    * @param content
    * @param url
    *            -网页链接
    * @throws PushException
    */
   public static void pushZNX(List<String> registerIds, String title, String content) throws PushException {
      if (registerIds != null && registerIds.size() > 100)
         throw new PushException(1, "设备数不能超过100个");
      Map<String, String> params = getParams("ZNX", null, null, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushWEEX(List<String> registerIds, String title, String content, String weexUrl)
         throws PushException {
      String activity = Constant.systemCommonConfig.getAndroidBaseactivityName()
            + ".ui.mine.weex.WeexApplicationActivity";
      Map<String, String> params = getParams("weex", activity, weexUrl, weexUrl, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushBaiChuanUrl(List<String> registerIds, String title, String content, String url)
         throws PushException {
      Map<String, String> params = getParams("baichuan", null, url, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushWelfareCenter(List<String> registerIds, String title, String content) throws PushException {
      String activity = Constant.systemCommonConfig.getAndroidBaseactivityName() + ".ui.mine.WelfareCenterActivity";
      Map<String, String> params = getParams("welfare", activity, null, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushUserSignInNotification(List<String> registerIds, String title, String content)
         throws PushException {
      String activity = Constant.systemCommonConfig.getAndroidBaseactivityName() + ".ui.goldtask.GoldTaskActivity";
      Map<String, String> params = getParams("signin", activity, null, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    *
    * @param list
    *            最大为1000
    */
   public static boolean push(List<String> list, String title, String content, Map<String, String> dataParams) {
      Map<String, String> params = null;
      if (dataParams != null) {
         params = new HashMap<>();
         JSONObject json = new JSONObject();
         for (Iterator<String> its = dataParams.keySet().iterator(); its.hasNext();) {
            String key = its.next();
            json.put(key, dataParams.get(key));
         }
         params.put("data", json.toJSONString());
      }
      try {
         Sender sender = new Sender("f14S6P4sCrW4gs0WCO80w80cW", "E7976fe3d1758bf0c3480d8DcE4236e2");
         Notification notifyCation = getNotification(title, content,
               "com.yeshi.ec.rebate.myapplication.ui.OPPOPushMessageActivity", params);
         if (list.size() == 1) {
            Result result = sender.unicastNotification(notifyCation, Target.build(list.get(0)));
            result.getStatusCode(); // 获取http请求状态码
            result.getReturnCode(); // 获取平台返回码
            System.out.println(result.getStatusCode() + "-" + result.getReturnCode());
            if (result.getReturnCode().getCode() == 0)
               return true;
            else
               return false;
         } else {
            Map<Target, Notification> batch = new HashMap<Target, Notification>(); // batch最大为1000
            for (String registerId : list) {
               batch.put(Target.build(registerId), notifyCation);
            }
            Result result = sender.unicastBatchNotification(batch); // 发送批量单推消息
            result.getStatusCode(); // 获取http请求状态码
            result.getReturnCode(); // 获取平台返回码
            System.out.println(result.getStatusCode() + "-" + result.getReturnCode());
            if (result.getReturnCode().getCode() == 0)
               return true;
            else
               return false;
         }
         // List<Result.UnicastBatchResult> batchResult =
         // result.getUnicastBatchResults(); // 批量单推结果
         // for (Result.UnicastBatchResult record : batchResult) {
         // record.getErrorCode();
         // record.getErrorMessage();
         // record.getMessageId();
         // record.getTargetValue();
         // }
      } catch (Exception e) {
         e.printStackTrace();
      }
      return false;
   }
   private static Notification getNotification(String title, String content, String activity,
         Map<String, String> params) {
      Notification notification = new Notification();
      /**
       *
       * 以下参数必填项
       *
       */
      notification.setTitle(title);
      notification.setSubTitle(title);
      notification.setContent(content);
      /**
       *
       * 以下参数非必填项, 如果需要使用可以参考OPPO push服务端api文档进行设置
       *
       */
      // App开发者自定义消息Id,OPPO推送平台根据此ID做去重处理,对于广播推送相同appMessageId只会保存一次,对于单推相同appMessageId只会推送一次
      notification.setAppMessageId(UUID.randomUUID().toString());
      // 应用接收消息到达回执的回调URL,字数限制200以内,中英文均以一个计算
      // notification.setCallBackUrl("http://www.test.com");
      // App开发者自定义回执参数,字数限制50以内,中英文均以一个计算
      // notification.setCallBackParameter("");
      // 点击动作类型0,启动应用;1,打开应用内页(activity的intent
      // action);2,打开网页;4,打开应用内页(activity);【非必填,默认值为0】;5,Intent scheme URL
      notification.setClickActionType(4);
      // 应用内页地址【click_action_type为1或4时必填,长度500】
      notification.setClickActionActivity(activity);
      // 网页地址【click_action_type为2必填,长度500】
      // notification.setClickActionUrl("http://www.test.com");
      // 动作参数,打开应用内页或网页时传递给应用或网页【JSON格式,非必填】,字符数不能超过4K,示例:{"key1":"value1","key2":"value2"}
      JSONObject paramsData = new JSONObject();
      if (params != null)
         for (Iterator<String> its = params.keySet().iterator(); its.hasNext();) {
            String key = its.next();
            paramsData.put(key, params.get(key));
         }
      notification.setActionParameters(paramsData.toJSONString());
      // 展示类型 (0, “即时”),(1, “定时”)
      notification.setShowTimeType(0);
      // 定时展示开始时间(根据time_zone转换成当地时间),时间的毫秒数
      // notification.setShowStartTime(System.currentTimeMillis() + 1000 * 60
      // * 3);
      // 定时展示结束时间(根据time_zone转换成当地时间),时间的毫秒数
      // notification.setShowEndTime(System.currentTimeMillis() + 1000 * 60 *
      // 5);
      // 是否进离线消息,【非必填,默认为True】
      notification.setOffLine(true);
      // 离线消息的存活时间(time_to_live) (单位:秒), 【off_line值为true时,必填,最长3天】
      notification.setOffLineTtl(24 * 3600);
      // 时区,默认值:(GMT+08:00)北京,香港,新加坡
      notification.setTimeZone("GMT+08:00");
      // 0:不限联网方式, 1:仅wifi推送
      notification.setNetworkType(0);
      return notification;
   }
}
package com.yeshi.fanli.util.push;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yeshi.utils.annotation.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.oppo.push.server.Notification;
import com.oppo.push.server.Result;
import com.oppo.push.server.Sender;
import com.oppo.push.server.Target;
import com.yeshi.fanli.entity.config.push.HWPushConfig;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@Component
public class OPPOPushUtil {
   private static OPPOPushUtil hWPushUtil;
   @Autowired
   private BusinessSystemService businessSystemService;
   @PostConstruct
   public void init() {
      hWPushUtil = this;
      hWPushUtil.businessSystemService = this.businessSystemService;
   }
   private static String appkey = "";
   private static String masterSecret = "";
   static {
      Properties ps = org.yeshi.utils.PropertiesUtil
            .getProperties(TaoBaoUtil.class.getClassLoader().getResourceAsStream("push_hw.properties"));
      HWPushConfig config = (HWPushConfig) MapUtil.parseMap(HWPushConfig.class, ps);
      appkey = config.getAppId();
      masterSecret = config.getAppSecret();
   }
   private static Map<String, String> getParams(String type, String activity, String url, String webUrl, String id) {
      Map<String, String> data = new HashMap<>();
      if (type != null)
         data.put("type", type);
      if (activity != null)
         data.put("activity", activity);
      if (url != null)
         data.put("url", url);
      if (webUrl != null)
         data.put("webUrl", webUrl);
      if (id != null)
         data.put("id", id + "");
      return data;
   }
   /**
    * 推送商品
    *
    * @param registerIds
    *            -最大值1000
    * @param title
    * @param content
    * @param goodsType
    * @param goodsId
    * @throws PushException
    */
   public static void pushGoods(List<String> registerIds, String title, String content, int goodsType, String goodsId,String androidBaseActivity)
         throws PushException {
      if (registerIds != null && registerIds.size() > 100)
         throw new PushException(1, "设备数不能超过100个");
      String activity =androidBaseActivity
            + ".ui.recommend.GoodsBrowserActivity";
      Map<String, String> params = getParams("goodsdetail", activity, null, null, goodsId);
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 网页推送
    *
    * @param registerIds
    *            最大值1000
    * @param title
    * @param content
    * @param url
    *            -网页链接
    * @throws PushException
    */
   public static void pushUrl(List<String> registerIds, String title, String content, String url,String androidBaseActivity)
         throws PushException {
      if (registerIds != null && registerIds.size() > 100)
         throw new PushException(1, "设备数不能超过1000个");
      String activity =androidBaseActivity + ".ui.invite.ShareBrowserActivity";
      Map<String, String> params = getParams("url", activity, null, url, null);
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 站内信推送
    *
    * @param registerIds
    *            最大值1000
    * @param title
    * @param content
    *            -网页链接
    * @throws PushException
    */
   public static void pushZNX(List<String> registerIds, String title, String content) throws PushException {
      if (registerIds != null && registerIds.size() > 100)
         throw new PushException(1, "设备数不能超过100个");
      Map<String, String> params = getParams("ZNX", null, null, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushWEEX(List<String> registerIds, String title, String content, String weexUrl,String androidBaseActivity)
         throws PushException {
      String activity =androidBaseActivity
            + ".ui.mine.weex.WeexApplicationActivity";
      Map<String, String> params = getParams("weex", activity, weexUrl, weexUrl, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushBaiChuanUrl(List<String> registerIds, String title, String content, String url)
         throws PushException {
      Map<String, String> params = getParams("baichuan", null, url, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushWelfareCenter(List<String> registerIds, String title, String content,String androidBaseActivity) throws PushException {
      String activity =androidBaseActivity + ".ui.mine.WelfareCenterActivity";
      Map<String, String> params = getParams("welfare", activity, null, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   public static void pushUserSignInNotification(List<String> registerIds, String title, String content,String androidBaseActivity)
         throws PushException {
      String activity =androidBaseActivity + ".ui.goldtask.GoldTaskActivity";
      Map<String, String> params = getParams("signin", activity, null, null, null);
      if (params == null)
         return;
      try {
         boolean success = push(registerIds, title, content, params);
         if (!success)
            throw new PushException(2, "推送失败");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    *
    * @param list
    *            最大为1000
    */
   public static boolean push(List<String> list, String title, String content, Map<String, String> dataParams) {
      Map<String, String> params = null;
      if (dataParams != null) {
         params = new HashMap<>();
         JSONObject json = new JSONObject();
         for (Iterator<String> its = dataParams.keySet().iterator(); its.hasNext();) {
            String key = its.next();
            json.put(key, dataParams.get(key));
         }
         params.put("data", json.toJSONString());
      }
      try {
         Sender sender = new Sender("f14S6P4sCrW4gs0WCO80w80cW", "E7976fe3d1758bf0c3480d8DcE4236e2");
         Notification notifyCation = getNotification(title, content,
               "com.yeshi.ec.rebate.myapplication.ui.OPPOPushMessageActivity", params);
         if (list.size() == 1) {
            Result result = sender.unicastNotification(notifyCation, Target.build(list.get(0)));
            result.getStatusCode(); // 获取http请求状态码
            result.getReturnCode(); // 获取平台返回码
            System.out.println(result.getStatusCode() + "-" + result.getReturnCode());
            if (result.getReturnCode().getCode() == 0)
               return true;
            else
               return false;
         } else {
            Map<Target, Notification> batch = new HashMap<Target, Notification>(); // batch最大为1000
            for (String registerId : list) {
               batch.put(Target.build(registerId), notifyCation);
            }
            Result result = sender.unicastBatchNotification(batch); // 发送批量单推消息
            result.getStatusCode(); // 获取http请求状态码
            result.getReturnCode(); // 获取平台返回码
            System.out.println(result.getStatusCode() + "-" + result.getReturnCode());
            if (result.getReturnCode().getCode() == 0)
               return true;
            else
               return false;
         }
         // List<Result.UnicastBatchResult> batchResult =
         // result.getUnicastBatchResults(); // 批量单推结果
         // for (Result.UnicastBatchResult record : batchResult) {
         // record.getErrorCode();
         // record.getErrorMessage();
         // record.getMessageId();
         // record.getTargetValue();
         // }
      } catch (Exception e) {
         e.printStackTrace();
      }
      return false;
   }
   private static Notification getNotification(String title, String content, String activity,
         Map<String, String> params) {
      Notification notification = new Notification();
      /**
       *
       * 以下参数必填项
       *
       */
      notification.setTitle(title);
      notification.setSubTitle(title);
      notification.setContent(content);
      /**
       *
       * 以下参数非必填项, 如果需要使用可以参考OPPO push服务端api文档进行设置
       *
       */
      // App开发者自定义消息Id,OPPO推送平台根据此ID做去重处理,对于广播推送相同appMessageId只会保存一次,对于单推相同appMessageId只会推送一次
      notification.setAppMessageId(UUID.randomUUID().toString());
      // 应用接收消息到达回执的回调URL,字数限制200以内,中英文均以一个计算
      // notification.setCallBackUrl("http://www.test.com");
      // App开发者自定义回执参数,字数限制50以内,中英文均以一个计算
      // notification.setCallBackParameter("");
      // 点击动作类型0,启动应用;1,打开应用内页(activity的intent
      // action);2,打开网页;4,打开应用内页(activity);【非必填,默认值为0】;5,Intent scheme URL
      notification.setClickActionType(4);
      // 应用内页地址【click_action_type为1或4时必填,长度500】
      notification.setClickActionActivity(activity);
      // 网页地址【click_action_type为2必填,长度500】
      // notification.setClickActionUrl("http://www.test.com");
      // 动作参数,打开应用内页或网页时传递给应用或网页【JSON格式,非必填】,字符数不能超过4K,示例:{"key1":"value1","key2":"value2"}
      JSONObject paramsData = new JSONObject();
      if (params != null)
         for (Iterator<String> its = params.keySet().iterator(); its.hasNext();) {
            String key = its.next();
            paramsData.put(key, params.get(key));
         }
      notification.setActionParameters(paramsData.toJSONString());
      // 展示类型 (0, “即时”),(1, “定时”)
      notification.setShowTimeType(0);
      // 定时展示开始时间(根据time_zone转换成当地时间),时间的毫秒数
      // notification.setShowStartTime(System.currentTimeMillis() + 1000 * 60
      // * 3);
      // 定时展示结束时间(根据time_zone转换成当地时间),时间的毫秒数
      // notification.setShowEndTime(System.currentTimeMillis() + 1000 * 60 *
      // 5);
      // 是否进离线消息,【非必填,默认为True】
      notification.setOffLine(true);
      // 离线消息的存活时间(time_to_live) (单位:秒), 【off_line值为true时,必填,最长3天】
      notification.setOffLineTtl(24 * 3600);
      // 时区,默认值:(GMT+08:00)北京,香港,新加坡
      notification.setTimeZone("GMT+08:00");
      // 0:不限联网方式, 1:仅wifi推送
      notification.setNetworkType(0);
      return notification;
   }
}