zoukankan      html  css  js  c++  java
  • 极光推送>>java SDK服务端集成后台项目

    PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看

    极光文档(java SDK)请参考

    [ 极光文档 ]


    步骤一:

    • 首先,你必须在 [极光官网] 上注册一个账号
    • 其次,注册完后登录,选择极光开发者服务
      这里写图片描述
    • 进去之后,创建一个应用,已有应用可跳过
      这里写图片描述

    • 创建完成
      这里写图片描述

    • 进入应用,看到AppKey和MasterSecret,这两个参数在sdk集成的时候会用到
      这里写图片描述


    项目中的操作

    • 我是直接用的maven库,毕竟这个年头手动到jar包的项目估计没几个了,如果你是手动导入jar,那么,请去官网下载jar包-o-

    Maven方式导入极光推送的依赖jar包

    • PS:将下面全部jar复制到你项目的pom.xml里面(我项目之前本来就有log4j,就没有写到下面,导入的时候注意下,可以参考官网的jar包)
    <dependency>
        <groupId>cn.jpush.api</groupId>
        <artifactId>jpush-client</artifactId>
        <version>3.2.17</version>
    </dependency>
    
    <dependency>
        <groupId>cn.jpush.api</groupId>
        <artifactId>jiguang-common</artifactId>
        <version>1.0.3</version>
    </dependency>
    <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-all</artifactId>
       <version>4.1.6.Final</version>
       <scope>compile</scope>
    </dependency>
    <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <version>2.3</version>
    </dependency>
    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.7</version>
    </dependency>

    记住,以下代码,如果你是单纯的复制粘贴,那么你肯定会报错,有博主自己项目的参数,所以,请复制粘贴后看一下参数(提示什么的)

    然后在项目中创建一个包和一个类,(类放到该包下)取名随便取

    我是这么取得:

    com.XXX.jdpush //包名
    jdpush //类名

    • 接下来是在jdpush类的操作
      其实,极光已经给我们集成好了,只需调用推送方法即可

      现在在jdpush类中,先进行android的推送(第一个方法)

    • 在jdpush类中,创建一个方法 : jpushAndroid
      别忘了!!!!!! app_key和masterSecret 是必须的
     1  //极光推送>>Android
     2    //Map<String, String> parm是我自己传过来的参数,同学们可以自定义参数
     3    public static void jpushAndroid(Map<String, String> parm) {
     4        // 设置好账号的app_key和masterSecret 
     5        String appKey = "**************";
     6        String masterSecret = "************";
     7        //创建JPushClient(极光推送的实例)
     8        JPushClient jpushClient = new JPushClient(masterSecret, appKey);
     9        //推送的关键,构造一个payload 
    10        PushPayload payload = PushPayload.newBuilder()
    11             .setPlatform(Platform.android())//指定android平台的用户
    12             .setAudience(Audience.all())//你项目中的所有用户
    13             .setNotification(Notification.android(parm.get("msg"), "这是title", parm))
    14             //发送内容,这里不要盲目复制粘贴,这里是我从controller层中拿过来的参数)
    15             .setOptions(Options.newBuilder().setApnsProduction(false).build())
    16             //这里是指定开发环境,不用设置也没关系
    17             .setMessage(Message.content(parm.get("msg")))//自定义信息
    18             .build();
    19 
    20        try {
    21             PushResult pu = jpushClient.sendPush(payload);  
    22         } catch (APIConnectionException e) {
    23             e.printStackTrace();
    24         } catch (APIRequestException e) {
    25             e.printStackTrace();
    26         }    
    27    }

    然后又在jdpush类中,再进行ios的推送(第二个方法)

    • 在jdpush类中,创建一个方法 : jpushIOS
      又别忘了!!!!!! app_key和masterSecret 是必须的
     1 //极光推送>>ios
     2    //Map<String, String> parm是我自己传过来的参数,同学们可以自定义参数
     3    public static  void jpushIOS(Map<String, String> parm) {
     4        // 设置好账号的app_key和masterSecret是必须的
     5        String appKey = "*********************";
     6        String masterSecret = "**********************";
     7 
     8        //创建JPushClient
     9        JPushClient jpushClient = new JPushClient(masterSecret, appKey);
    10        PushPayload payload = PushPayload.newBuilder()
    11             .setPlatform(Platform.ios())//ios平台的用户
    12             .setAudience(Audience.all())//所有用户
    13             .setNotification(Notification.newBuilder()
    14             .addPlatformNotification(IosNotification.newBuilder()
    15                             .setAlert(parm.get("msg"))
    16                             .setBadge(+1)
    17                             .setSound("happy")//这里是设置提示音(更多可以去官网看看)
    18                             .addExtras(parm)
    19                             .build())
    20                     .build())
    21             .setOptions(Options.newBuilder().setApnsProduction(false).build())
    22             .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定义信息
    23             .build();
    24 
    25        try {
    26             PushResult pu = jpushClient.sendPush(payload);
    27 
    28         } catch (APIConnectionException e) {
    29             e.printStackTrace();
    30         } catch (APIRequestException e) {
    31             e.printStackTrace();
    32         }    
    33    }

    PS:

    • 以上只是列出了2种推送的方法,(一般设置安卓和ios就够了)还有更多(去看看官网)比如推送winPhone平台,安卓andIos,全部平台,等等等等,自定义去组合,反正你写的方法可以调用
    • 极光已经集成好了众多方法,同学们都是可以直接 . 点出来的,比如,想设置环境指定为开发,那么就在方法里设置:

    .setOptions(Options.newBuilder().setApnsProduction(false).build())


    • 大家可以将app_key和masterSecret 定义为全局变量,将推送方法定义为静态,这样更方便调用
    • 如果你还想再设置其他推送的系统参数,那么,可以去参考,里面有参数讲解

    [ 极光文档Push API v3 ]

    ————————————————–

    我用的是SSM框架,所以在controller里面调用我写的推送方法,其他框架调用推送方法也一样

    调用简直不要太简单

    controller:

     1 //这是我的添加文章的接口方法
     2 //现在我要添加一篇文章后,进行推送
     3 public Map<String, Object> addArticle() throws Exception {
     4 Map<String, Object> result = new HashMap<String, Object>();
     5 ....
     6 //省略文章添加的步骤
     7 
     8 //从前端页面传个参数过来判断是否推送
     9    if((infoMap.get("is_push").toString()).trim().equals("1")){
    10        //设置推送参数
    11        //这里同学们就可以自定义推送参数了
    12         Map<String, String> parm =new HashMap<String, String>();
    13         //这是我的文章id
    14         parm.put("id",(""+id).trim());
    15         //文章标题
    16         parm.put("Atitle",(String) infoMap.get("Atitle") );
    17         //设置提示信息,内容是文章标题
    18         parm.put("msg",(String) infoMap.get("Atitle") );
    19         //调用ios的
    20         Jdpush.jpushIOS(parm);
    21         //然后调用安卓的
    22         Jdpush.jpushAndroid(parm);
    23     }
    24   return result;
    25 }

    这样就推送完了….


    童鞋们可能出现的的错误

    推送后报错了

    Your request params is invalid. Please check them according to error message.
    Error response from JPush server. Should review and fix it.
    //然后状态码是
    INFO 2017-07-14 11:08:04,208 com.weiwend.jdpush.Jdpush.http-bio-8080-exec-7 HTTP Status: 400
    INFO 2017-07-14 11:08:04,208 com.weiwend.jdpush.Jdpush.http-bio-8080-exec-7 Error Code: 1011
    INFO 2017-07-14 11:08:04,208 com.weiwend.jdpush.Jdpush.http-bio-8080-exec-7 Error Message: cannot find user by this audience
    INFO 2017-07-14 11:08:04,208 com.weiwend.jdpush.Jdpush.http-bio-8080-exec-7 Msg ID: 4241206476

    • 这种的话不要慌,去看看你的极光开发者服务>>点进去你的应用>>点击推送>>选择是web|Api下拉框
      这里写图片描述

    这里写图片描述

    这里写图片描述

    应该会看到一条红色的推送记录

    比如:

    这里写图片描述

    ——这就是发送失败了,为什么呢?提示是:

    这里写图片描述

    就是说,你当前项目中

    没有用户!!!

    没有用户!!!

    没有用户???

    这就很尴尬了
    如果你的项目中有用户,
    但是,是你的参数(setAudience)设置错了,也会也会报错.


    po一条视频教程(内容比较简单,试着去理解):

    [ 极客学院>>极光推送javaSDK集成使用 ]

    还有要注意的是app_key和masterSecret 是必须的

     


    2017-09-16 补充:

    PS:推送所有平台
    注意事项:安卓直接忽略开发环境和生产环境,但是ios对环境敏感哦~~~~
    (就是安卓不论生产开发都会推送,但是ios必须指定才能推,默认生产模式)

     1  //极光推送>>All所有平台
     2    public static void jpushAll(Map<String, String> parm) {
     3        // 设置好账号的ACCESS_KEY和SECRET_KEY
     4 
     5        //创建JPushClient
     6        JPushClient jpushClient = new JPushClient(masterSecret, appKey);
     7        //创建option
     8 
     9        PushPayload payload = PushPayload.newBuilder()
    10             .setPlatform(Platform.all())  //所有平台的用户
    11             .setAudience(Audience.registrationId(parm.get("RegId")))//registrationId指定用户
    12             .setNotification(Notification.newBuilder()
    13                     .addPlatformNotification(IosNotification.newBuilder()
    14                             .setAlert(parm.get("msg"))
    15                             .setBadge(+1)
    16                             .setSound("happy")
    17                             .addExtras(parm)
    18                             .build())
    19                     .addPlatformNotification(AndroidNotification.newBuilder()
    20                             .addExtras(parm)
    21                             .setAlert(parm.get("msg"))
    22                             .build())
    23                     .build())
    24             .setOptions(Options.newBuilder().setApnsProduction(true).build())//指定开发环境
    25             .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定义信息
    26             .build();
    27        try {
    28             PushResult pu = jpushClient.sendPush(payload);
    29         } catch (APIConnectionException e) {
    30             e.printStackTrace();
    31         } catch (APIRequestException e) {
    32             e.printStackTrace();
    33         }    
    34    }
  • 相关阅读:
    redis
    libevent简述
    IPC-本地套接字
    广播和组播
    UDP实现并发服务器
    select
    epoll
    BUUCTF-[极客大挑战 2019]HardSQL 1
    CTFHUB-Injection V2.0
    SQL注入中登录框只验证用户名情况下的绕过
  • 原文地址:https://www.cnblogs.com/codeyou/p/8572432.html
Copyright © 2011-2022 走看看