java使用极光推送

1.添加依赖

<dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.10</version>
        </dependency>
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.1.4</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.6.Final</version>
            <scope>compile</scope>
        </dependency>

2.申请masterSecret和appKey

需要到极光的官网(https://www.jiguang.cn/push)去注册用户信息,创建项目后会得到这两个值

3.java代码

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import com.newings.vo.backstage.PushDto;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author swy
 * @date 2019-12-09 11:16
 */
@Component
@Slf4j
public class JgPush {

     public  static void jgPushTest(){

        JPushClient jpushClient = new JPushClient("masterSecret的值","appKey的值",null, ClientConfig.getInstance());
        //自定义的额外参数
        Map<String, String> parm = new HashMap<>();
        parm.put("driverName","李四");
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(Platform.all())//推送所有平台的用户
               // .setPlatform(Platform.android()) //推送安卓平台的用户
                .setAudience(Audience.tag("debug"))      //使用标签推送
                //.setAudience(Audience.alias("S00001"))//使用别名推送
                //.setAudience(TestAudience.tag("debug","S00001"))  //同时使用标签和别名推送,
                //.setAudience(Audience.tag_and("debug1","debug2"))//使用多标签推送
                //.setAudience(Audience.registrationId(parm.get("id")))//registrationId(注册ID)指定用户  使用注册id推送
                
                //设置发送内容,Extras为额外参数
                .setNotification(Notification.newBuilder().setAlert("通知内容")
                        .addPlatformNotification(AndroidNotification.newBuilder().setAlert("通知内容").setTitle("通知标题").addExtras(parm).build())
                        .addPlatformNotification(IosNotification.newBuilder().setAlert("通知内容").addExtras(parm).build())
                        .build())               //发送通知    addExtras(parm)可以放额外的参数,可以把一些需要的信息通过该参数返出
                .setMessage(Message.newBuilder().setMsgContent("消息内容").setTitle("消息标题").addExtras(parm).build())//发送自定义信息
                .build();
        try {
            PushResult result = jpushClient.sendPush(payload);
            log.info("Got result - " + result);
            jpushClient.close();
        } catch (APIConnectionException e1) {
            e1.printStackTrace();
            log.error("Connection error, should retry later", e1);
        } catch (APIRequestException e) {
            e.printStackTrace();
            log.error("Should review the error, and fix the request", e);
            log.info("HTTP Status: " + e.getStatus());
            log.info("Error Code: " + e.getErrorCode());
            log.info("Error Message: " + e.getErrorMessage());
        }
    }
}

需要推送时调用这个类就可以了

JgPush.jgPushTest()

4.参数解释

如果想要同时使用标签和别名推送,寻找极光本身的推送时,没有找到满足条件的设置,所以下面根据极光的设置写了一个自定义的设置,可以同时使用标签和别名推送。

import cn.jiguang.common.utils.Preconditions;
import cn.jpush.api.push.model.PushModel;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.audience.AudienceTarget;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

/**
 * @auth swy
 * @date 2020/5/23 10:59 下午
 **/
public class TestAudience implements PushModel {
    private static final String ALL = "all";

    private final boolean all;
    private final Set<AudienceTarget> targets;

    private TestAudience(boolean all, Set<AudienceTarget> targets) {
        this.all = all;
        this.targets = targets;
    }

    public static Audience.Builder newBuilder() {
        return new Audience.Builder();
    }

    public static Audience all() {
        return newBuilder().setAll(true).build();
    }

    public static Audience tag(String tagValue,String alias) {
        AudienceTarget target = AudienceTarget.tag(tagValue);
        AudienceTarget target1 = AudienceTarget.alias(alias);
        return newBuilder().addAudienceTarget(target).addAudienceTarget(target1).build();
    }
 }

想要同时使用标签和别名时只需要写如下代码。setAudience 这个如果写了多行代码,只有最后一个会生效,前面的都会被覆盖。

.setAudience(TestAudience.tag("标签","别名"))

设置推送平台

setPlatform(Platform.all())  

设置推送类型 通知类型

.setNotification(Notification.newBuilder().setAlert("通知内容")
                        .addPlatformNotification(AndroidNotification.newBuilder().setAlert("通知内容").setTitle("通知标题").addExtras(parm).build())
                        .addPlatformNotification(IosNotification.newBuilder().setAlert("通知内容").addExtras(parm).build())
                        .build()) 

设置推送类型 消息类型 ;消息和通知可以同时存在,两者必须存在一个

 .setMessage(Message.newBuilder().setMsgContent("消息内容").setTitle("消息标题").addExtras(parm).build())//发送自定义信息
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页