public static void main(String[] args) throws PushClientException, PushServerException {
    // 1. get apiKey and secretKey from developer console
    String apiKey = "xxxxxxxxxxxxxxxxxxxx";
    String secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    PushKeyPair pair = new PushKeyPair(apiKey, secretKey);

    // 2. build a BaidupushClient object to access released interfaces
    BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);

    // 3. register a YunLogHandler to get detail interacting information
    // in this request.
    pushClient.setChannelLogHandler(
        new CloudLogHandler() {
          @Override
          public void onHandle(CloudLogEvent event) {
            System.out.println(event.getMessage());
          }
        });

    try {
      // 4. specify request arguments
      // pushTagTpye = 1 for common tag pushing
      PushMsgToTagRequest request =
          new PushMsgToTagRequest()
              .addTagName("xxxxx")
              .addMsgExpires(new Integer(3600))
              .addMessageType(0) // 添加透传消息
              // .addSendTime(System.currentTimeMillis() / 1000 + 120) //设置定时任务
              .addMessage("Hello Baidu push")
              .addDeviceType(3);
      // 5. http request
      PushMsgToTagResponse response = pushClient.pushMsgToTag(request);
      // Http请求结果解析打印
      System.out.println(
          "msgId: "
              + response.getMsgId()
              + ",sendTime: "
              + response.getSendTime()
              + ",timerId: "
              + response.getTimerId());
    } catch (PushClientException e) {
      if (BaiduPushConstants.ERROROPTTYPE) {
        throw e;
      } else {
        e.printStackTrace();
      }
    } catch (PushServerException e) {
      if (BaiduPushConstants.ERROROPTTYPE) {
        throw e;
      } else {
        System.out.println(
            String.format(
                "requestId: %d, errorCode: %d, errorMessage: %s",
                e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
      }
    }
  }
  @Test
  @Category(com.baidu.llv23.test.category.LocalCloudPushInterface.class)
  public void testPushBroadcastMessage()
      throws PushClientException, PushServerException, FileNotFoundException, IOException {
    // see: pre-requisite. ApiKey/SecretKey on developer platform
    Properties defaultProps = new Properties();
    try (FileInputStream in =
        new FileInputStream("src/main/resources/META-INF/application.properties")) {
      defaultProps.load(in);
    }

    // 1. get apiKey and secretKey from developer console
    String appidKey = defaultProps.getProperty("appidKey");
    if (appidKey.equals("${appidKey}")) {
      // TODO : not defined
      appidKey = System.getProperty("appidKey");
    }
    String secretKey = defaultProps.getProperty("secretKey");
    if (secretKey.equals("${secretKey}")) {
      // TODO : not defined
      secretKey = System.getProperty("secretKey");
    }

    PushKeyPair pair = new PushKeyPair(appidKey, secretKey);

    // 2. build a BaidupushClient object to access released interfaces
    BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);

    // 3. register a YunLogHandler to get detail interacting information in this request.
    pushClient.setChannelLogHandler(
        new CloudLogHandler() {
          @Override
          public void onHandle(CloudLogEvent event) {
            System.out.println(event.getMessage());
          }
        });

    try {
      // 4. specify request arguments
      // see : create iOS notification
      JSONObject notification = new JSONObject();
      JSONObject jsonAPS = new JSONObject();
      jsonAPS.put("alert", "Hello Baidu Push");
      jsonAPS.put("sound", "ttt"); // setup for ringing style, for example "ttt", user defined
      notification.put("aps", jsonAPS);
      notification.put("key1", "value1");
      notification.put("key2", "value2");

      PushMsgToAllRequest request =
          new PushMsgToAllRequest()
              .addMsgExpires(new Integer(3600))
              .addMessageType(1)
              .addMessage(notification.toString())
              .addSendTime(
                  System.currentTimeMillis() / 1000
                      + 70) // setup of delay time for sending, must more than 1 minute, unit in
              // second, here set for 70 seconds
              .addDepolyStatus(DeployStatus.development.getValue())
              .addDeviceType(4);
      // 5. http request
      PushMsgToAllResponse response = pushClient.pushMsgToAll(request);
      // Http response print out
      System.out.println(
          String.format(
              "msgId: %s ,sendTime: %d,timerId: %s",
              response.getMsgId(), response.getSendTime(), response.getTimerId()));
    } catch (PushClientException e) {
      if (BaiduPushConstants.ERROROPTTYPE) {
        throw e;
      } else {
        e.printStackTrace();
      }
    } catch (PushServerException e) {
      if (BaiduPushConstants.ERROROPTTYPE) {
        throw e;
      } else {
        System.err.println(
            String.format(
                "requestId: %d, errorCode: %d, errorMessage: %s",
                e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
      }
    }
  }