java集成极光推送

一、引入jar包

 <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.4.3</version>
        </dependency>

        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.1.7</version>
        </dependency>

二、工具类

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.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.JsonObject;
import com.gxkj.common.core.util.DataSyncUtils;
import com.gxkj.common.modular.system.model.SystemUser;
import jodd.util.StringUtil;

import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @description:  极光推送工具类
 */

public class JpushUtils {
	
	// 极光推送官网注册后的key
    private static String appKey = "1991614a4c14b8bcbf062cce";

	// 极光推送官网注册后的Secret
    private static String masterSecret = "2033a9e112c577c9e2c71d28";

    private static JPushClient jPushClient = new JPushClient(masterSecret, appKey);


    /**
     * @desc: 批量推送
     * platForm: android/ios
     * pattern: 根据alias(根据别名)/registrationId(设备id)推送 / 全局推送(推所有用户)
     * title 标题
     * alert 内容
     * alias 别名
     * registrationIds 设备Id
     * key 拓展字段key值
     * value 拓展字段value
     * indent:是否点击消息推送打开到指定的页面
     **/
  public static Long jiguangSend_batch( String platForm,
                                          String pattern,
                                          String title,
                                          String alert,
                                          String[] alias,
                                          String[] registrationIds,
                                          String key,
                                          String value,
                                          String indent) {
        PushResult pushResult = null;
        try {
            NotificationBO notificationBO = new NotificationBO();
            notificationBO.setTitle(title);
            notificationBO.setAlert(alert);
            JsonObject jsonObject = new JsonObject();
            if(StringUtil.isNotEmpty(indent)){
                jsonObject.addProperty("url",indent);
            }else{
                jsonObject.addProperty("url","");
            }
             PushPayload pushPayload = JpushUtils.pushBatch(notificationBO, alias, registrationIds, platForm, pattern, key, value, jsonObject);
            System.out.println(pushPayload);
            pushResult = jPushClient.sendPush(pushPayload);
            System.out.println(pushResult);
            if (pushResult.getResponseCode() == 200) {
                return pushResult.msg_id;
            }
        } catch (APIConnectionException | APIRequestException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * @desc: 设置别名
     * alias: 别名
     * registrationIds: 注册Id
     **/
    public static void setAlias(String registrationIds, String alias) {
        HashSet<String> tagsToAdd = new HashSet<>();
        HashSet<String> tagsToRemove = new HashSet<>();
        try {
            jPushClient.updateDeviceTagAlias(registrationIds, alias, tagsToAdd, tagsToRemove);
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }



    /**
     * @desc: 指定平台批量推送
     * notificationBO: 消息
     * alias: 别名
     * registrationIds: 注册Id
     * platForm: android/ios
     * pattern: 根据alias/registrationIds推送 / 全局推送(推所有用户)
     * key 拓展字段key值
     * value 拓展字段value
     **/
    private static PushPayload pushBatch(NotificationBO notificationBO, String[] alias, String[] registrationIds, String platForm, String pattern, String key, String value, JsonObject indent) {
        // 创建一个IosAlert对象,可指定APNs的alert、title等字段
        return PushPayload.newBuilder()
                // 指定要推送的平台
                .setPlatform(platForm.equals(PushEnum.Android.getContent()) ? Platform.android()
                        : platForm.equals(PushEnum.IOS.getContent()) ? Platform.ios() : Platform.all())
                // 指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration
                .setAudience(pattern.equals(PushEnum.Alias.getContent()) ? Audience.alias(alias) :
                        pattern.equals(PushEnum.RegistrationId.getContent()) ? Audience.registrationId(registrationIds) :
                                Audience.all())
                // jpush的通知
                .setNotification(cn.jpush.api.push.model.notification.Notification.newBuilder()
                        // 指定当前推送的通知
                        .addPlatformNotification(platForm.equals(PushEnum.Android.getContent()) ? AndroidNotification.newBuilder().
                                setAlert(notificationBO.getAlert())
                                .setTitle(notificationBO.getTitle())
                                .setIntent(indent)
                                .addExtra(key,value)
                                .build() :
                                IosNotification.newBuilder().setThreadId(notificationBO.getTitle()).setAlert(notificationBO.getAlert()).build())
                        .build())
                .setOptions(Options.newBuilder()
                        // 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                        .setApnsProduction(false)
                        // 此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                        .setSendno(1)
                        // 此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
                        .setTimeToLive(86400)
                        .build())
                .build();
    }

    /**
     * @desc: 删除别名
     * alias: 别名
     **/
    public static void delAlias(String alias) {
        try {
            jPushClient.deleteAlias(alias,null);
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
    /**
     * 请求极光推送的接口以用来取消推送(DELETE)请求
     * @Param msgId 需要取消的推送id
     */
    public static void auroraPush (Long msgId) {
        //        设置key 推荐从springBean中获取,或者配置静态类
        String appKey = JpushUtils.appKey;
        String masterKey = JpushUtils.masterSecret;

        String url = "https://api.jpush.cn/v3/push/" + msgId;
        CloseableHttpResponse response = null;
        CloseableHttpClient httpClient = null;

        String responseContent = "";

        try {
            httpClient = HttpClients.createDefault();
            HttpDelete httpDelete = new HttpDelete(url);
            httpDelete.addHeader("Accept","application/json");
            //            设置请求标头
            httpDelete.addHeader("Content-Type", "text/plain");
            httpDelete.addHeader("Authorization", "Basic " + Base64.getUrlEncoder()
                    .encodeToString((appKey+ ":" + masterKey).getBytes()));
            response = httpClient.execute(httpDelete);
            //           接收返回的数据
            HttpEntity entity = response.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
            response.close();
            httpClient.close();
        } catch (IOException e) {
            e.printStackTrace();
            log.error(responseContent);
        } finally {
            close(response, httpClient);
        }
    }

}

三、示例

 // 通知司机
 // 使用极光推送通知司机
 // 获取别名(别名要注册到极光推送平台,可调用工具类中的设置别名接口)
  String[] alias = {item.getCode()};

 // 获取设备ID(设备ID既手机设备ID,由APP发送过来保存)
  SystemUser user = userMapper.selectOne(new QueryWrapper<SystemUser>()
                       .lambda()
                       .eq(SystemUser::getUsername, item.getCode()));

               String[] registrationIds = {user.getRegistrationId()};
               String alert = "位置" + item.getLocation() + "的拖车订单已经三分钟还未有人接单!";
               //推送平台为android,推送方式为使用别名推送
//               JpushUtils.jiguangSend_batch(DataSyncUtils.android, DataSyncUtils.registrationIds, DataSyncUtils.awaitOrder, alert, alias, registrationIds, DataSyncUtils.trafficTrailerId, item.getId());
//               JpushUtils.jiguangSend_batch(DataSyncUtils.android, DataSyncUtils.registrationIds, DataSyncUtils.awaitOrder, alert, alias, registrationIds, null, null);
               JpushUtils.jiguangSend_batch("android", "registrationId", "测试", alert, alias, registrationIds, null, null,"");

撤回发起的推送

String msgId = stringRedisTemplate.opsForValue().get(trailerOrderInfo.getId());
            if(StringUtil.isNotEmpty(msgId)) {
                JpushUtils.auroraPush(Long.valueOf(msgId));
                stringRedisTemplate.delete(trailerOrderInfo.getId());
            }

注:stringRedisTemplate.opsForValue().get(trailerOrderInfo.getId()); 这段代码是为了拿到存在redis上的msgId(上面示例中的方法有返回),可自行修改写法

**注:**首先要先到极光推送官网注册一个账号,这样才能获取到上面说的appKey以及masterSecret ,第二既是注册别名(可以是用户账号)以及设备ID(这个由APP提供)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值