你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

极光推送通知消息和定时消息 java代码

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


前言

  • 极光推送官网 注册并创建好应用(本文代码中测试的是安卓系统)
  • 引入极光推送jar包:JPush API Java Library
  • 阅读极光推送api文档:服务端 REST API 概述
  • 极光推送的消息有三种:notification(通知)、message(自定义消息)、和 schedule(定时消息),这里主要介绍通知和定时消息
    • notification(通知):消息会展示在通知栏
    • message(自定义消息):消息不会展示在通知栏,消息内容会透传给 App,需要 App 自行处理。
    • schedule(定时消息):消息会展示在通知栏,推送时间必须大于当前时间,api有单独的调用限制 官方文档
  • 本文为原创,转载请注明:https://blog.xinpapa.com/2017/11/21/jpush/

推送通知消息

  • 开发前需要先详细阅读官方文档,需要特别注意的是极光api调用次数的限制。免费版本各 API 频率限制如下表:
API 类型 频率(次/分钟)
Push API v3 600
Report-API 2400
Device-API 600
  • 推送通知消息代码如下:
    public class JPushUtils {
      //填写自己的appKey和masterSecret
      private static final String appKey = "";
      private static final String masterSecret = "";
        
      //推送消息的方法
      public static PushResult push(PushPayload payload) {
          JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
          try {
              //推送消息
              PushResult pushResult = jpushClient.sendPush(payload);
              return pushResult;
          } catch (APIConnectionException e) {
              // Connection error, should retry later
          } catch (APIRequestException e) {
              // Should review the error, and fix the request
          }
          return null;
      }
        
      //测试方法
      public static void main(String[] args) {
          //消息设置
          Options.Builder builder = Options.newBuilder();
          builder.setTimeToLive(86400L * 10);//离线消息保留时长:推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
          builder.setApnsProduction(false);//True 表示推送生产环境,False 表示要推送开发环境
        
          //消息的自定义参数,用于给app端传参数,用户看不到
          Map<String, String> extras = new HashMap<>();
          extras.put("参数1", "1");
            
          //创建消息
          PushPayload payload = PushPayload.newBuilder()
              .setPlatform(Platform.all())//设置接受的平台
              .setAudience(Audience.all())//接收推送的用户设置 all表示所有设备
              .setNotification(Notification.android("通知名称", "标题", extras))//推送的内容(安卓和ios这里不一样)
              .setOptions(builder.build())
              .build();
          //发送消息
          PushResult pushResult = push(payload);
          //消息发送成功后,返回pushResult对象的参数如下
          long msg_id = pushResult.msg_id;//消息id,可以用此id查询消息发送情况
          int sendno = pushResult.sendno;//API 调用标识
          int statusCode = pushResult.statusCode;//消息状态码
          boolean resultOK = pushResult.isResultOK();//消息是否成功
          int rateLimitQuota = pushResult.getRateLimitQuota();//当前 AppKey 一个时间窗口内可调用次数
          int rateLimitRemaining = pushResult.getRateLimitRemaining();//当前时间窗口剩余的可用次数
          int rateLimitReset = pushResult.getRateLimitReset();//距离时间窗口重置剩余的秒数
          int responseCode = pushResult.getResponseCode();//请求状态码
      }
    }
    

推送定时消息

  • 需要特别注意的是,在定时消息文档最下面有调用限制,限制如下:

    定时最多有效数(当前未过期数)与周期最多有效数(当前未过期数)总数 100个。超过后失败。
    最大频率当前为100/分。
    periodical任务的最大跨度为12个月。

  • 推送定时消息代码如下:
    public class JPushUtils {
      //填写自己的appKey和masterSecret
      private static final String appKey = "";
      private static final String masterSecret
        
      //推送定时消息的方法,和推送通知消息类似,只是多了两个参数
      public static ScheduleResult push(PushPayload payload, String name, String time) {
          JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
          try {
              //推送定时消息
              ScheduleResult singleSchedule = jpushClient.createSingleSchedule(name, time, payload);
              return singleSchedule;
          } catch (APIConnectionException e) {
              // Connection error, should retry later
          } catch (APIRequestException e) {
              // Should review the error, and fix the request
          }
          return null;
      }
        
      //测试方法
      public static void main(String[] args) {
          //消息设置
          Options.Builder builder = Options.newBuilder();
          builder.setTimeToLive(86400L * 10);//离线消息保留时长:推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
          builder.setApnsProduction(false);//True 表示推送生产环境,False 表示要推送开发环境
        
          //消息的自定义参数,用于给app端传参数,用户看不到
          Map<String, String> extras = new HashMap<>();
          extras.put("参数1", "1");
        
          //创建消息
          PushPayload payload = PushPayload.newBuilder()
              .setPlatform(Platform.all())//设置接受的平台
              .setAudience(Audience.all())//接收推送的用户设置
              .setMessage(
                  Message.newBuilder()
                      .setTitle("标题")
                      .setMsgContent("消息内容")
                      .setContentType("类型")//消息的类型(自己定义)
                      .addExtras(extras)//自定义参数
                      .build()
              )
              .setOptions(builder.build())
              .build();
          //推送定时消息(推送时间必须大于当前时间,否则推送任务创建失败)
          ScheduleResult scheduleResult = push(payload, "定时推送", "2017-11-21 17:49:47");
      }
    }
    

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。