来聊一聊那个很牛逼的极光推送(优化版)

一、前述

上次写了一篇关于极光推送( https://blog.csdn.net/qq_37189624/article/details/87878070 )来推送消息的,但是过于单一,繁琐,使用起来不是很方便,今天发现了一个优化方便的,分享一下

二、代码

package com.gizwits.lease.util;/**
 * @author tanxi
 * @date 2019/2/26
 */

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.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.Notification;
import com.gizwits.boot.utils.SysConfigUtils;
import com.gizwits.lease.config.CommonSystemConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * @ClassName JpushService$
 * @Description TODO 极光推送
 * @Author tanxi$
 * @Date 2019/2/26 10:44
 * @Version 1.0
 **/
@Slf4j
@Service
public class JpushService {

    /**
     * 根据别名推送通知
     */
    public boolean pushAlertByAlias(String content, String... alias) {
        return pushAlertByAudience(Audience.alias(alias), content);
    }

    /**
     * 根据标签推送通知
     */
    public boolean pushAlertByTag(String content, String... tag) {
        return pushAlertByAudience(Audience.tag(tag), content);
    }

    /**
     * 根据听众推送通知
     */
    public boolean pushAlertByAudience(Audience audience, String content) {
        return pushAlertByAudienceAndPlatform(Platform.all(), audience, content);
    }

    /**
     * 根据平台推送消息
     *
     * @param title 标题
     * @param message 具体消息
     */
    public boolean pushMessage(String title, String content, Map<String, String> message) {
        return pushMessageByPlatform(Platform.all(), title, content, message);
    }

    /**
     * 根据平台推送消息
     *
     * @param title 标题
     * @param message 具体消息
     */
    public boolean pushMessageByPlatform(Platform platform, String title, String content, Map<String, String> message) {
        return pushMessageByTagAndPlatform(platform, title, content, message);
    }


    /**
     * 根据标签推送消息
     *
     * @param tag 标签
     * @param title 标题
     * @param message 具体消息
     */
    public boolean pushMessageByTag(String title, String content, Map<String, String> message, String... tag) {
        return pushMessageByTagAndPlatform(Platform.all(), title, content, message, tag);
    }

    /**
     * 根据平台和标签推送消息
     *
     * @param tag 标签
     * @param title 标题
     * @param message 具体消息
     */
    public boolean pushMessageByTagAndPlatform(Platform platform, String title, String content,
                                               Map<String, String> message, String... tag) {
        Audience audience = Audience.all();
        if (tag.length > 0) {
            audience = Audience.tag(tag);
        }

        PushPayload payload = buildMessagePayload(platform, audience, title, content, message);
        return push(payload);
    }

    /**
     * 根据别名推送消息
     *
     * @param alias 别名
     * @param title 标题
     * @param content 内容
     */
    public boolean pushMessageByAlias(String title, String content, String... alias) {
        return pushMessageByAlias(title, content, MapUtils.EMPTY_MAP, alias);
    }

    /**
     * 根据别名推送消息
     *
     * @param alias 别名
     * @param title 标题
     * @param message 具体消息
     */
    public boolean pushMessageByAlias(String title, String content, Map<String, String> message, String... alias) {
        return pushMessageByAliasAndPlatform(Platform.all(), title, content, message, alias);
    }

    /**
     * 根据平台和别名推送消息
     *
     * @param alias 别名
     * @param title 标题
     * @param message 具体消息
     */
    public boolean pushMessageByAliasAndPlatform(Platform platform, String title, String content,
                                                 Map<String, String> message, String... alias) {
        Audience audience = Audience.all();
        if (alias.length > 0) {
            audience = Audience.alias(alias);
        }

        PushPayload payload = buildMessagePayload(platform, audience, title, content, message);
        return push(payload);
    }

    private PushPayload buildMessagePayload(Platform platform, Audience audience, String title, String content,
                                            Map<String, String> message) {
        return PushPayload.newBuilder()
                .setPlatform(platform)
                .setAudience(audience)
                .setMessage(Message.newBuilder()
                        .setTitle(title)
                        .setMsgContent(content)
                        .addExtras(message)
                        .build())
                .setOptions(Options.newBuilder().setApnsProduction(true).build())
                .build();
    }

    /**
     * 推送通知给所有用户
     */
    public boolean pushAlertToAll(String content) {
        return pushAlertByPlatform(Platform.all(), content);
    }

    /**
     * 推送通知给安卓用户
     */
    public boolean pushAlertToAndroid(String content) {
        return pushAlertByPlatform(Platform.android(), content);
    }

    /**
     * 推送通知给IOS用户
     */
    public boolean pushAlertToIOS(String content) {
        return pushAlertByPlatform(Platform.ios(), content);
    }

    /**
     * 根据平台推送通知给用户
     */
    public boolean pushAlertByPlatform(Platform platform, String content) {
        return pushAlertByAudienceAndPlatform(platform, Audience.all(), content);
    }

    /**
     * 根据标签和平台推送通知
     */
    public boolean pushAlertByAudienceAndPlatform(Platform platform, Audience audience, String content) {
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(platform)
                .setAudience(audience)
                .setNotification(Notification.alert(content))
                .setOptions(Options.newBuilder().setApnsProduction(true).build())
                .build();
        return push(payload);
    }

    public boolean push(PushPayload payload) {

        CommonSystemConfig commonSystemConfig = SysConfigUtils.get(CommonSystemConfig.class);
        String rxJiGuangKey = commonSystemConfig.getRxJiGuangKey();
        String rxJiGuangSecret = commonSystemConfig.getRxJiGuangSecret();

        try {
            JPushClient jPushClient = new JPushClient(rxJiGuangSecret, rxJiGuangKey, null,
                    ClientConfig.getInstance());
            PushResult pushResult = jPushClient.sendPush(payload);
            log.info("极光推送结果,ResponseCode:{} ,{}", pushResult.getResponseCode(), pushResult.getOriginalContent());
            if (pushResult.isResultOK()) {
                return true;
            }
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
        return false;
    }
}

三、总结

本文更新的极光推送,更加实用,简单明了,已经经过项目实战,可用,分享出来
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值