登录
原创

SpringBoot集成极光推送

发布于 2020-11-11 阅读 705
  • Java
  • Spring Boot
原创

极光链接:

官网:https://www.jiguang.cn
文档:https://docs.jiguang.cn//jpush/guideline/intro/
java示例git地址:https://github.com/jpush/jpush-api-java-client

客户端:

苹果、安卓集成极光sdk省略请见其他文章

java后端

pom.xml导入依赖包(这里与其他包有冲突剔除了部分)

        <!-- 极光推送 -->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.4.4</version>
            <exclusions>
                <exclusion>
                    <groupId>org.bouncycastle</groupId>
                    <artifactId>bcprov-jdk15on</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.bouncycastle</groupId>
                    <artifactId>bcpkix-jdk15on</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

yml配置

jiguang:
  appKey: 5a9**************48c
  masterSecret: e***********6a

java代码

通知消息

public static PushResult sendPushForPlatform(PushConfig cfg, PushMsgBO pushMsgBO)
        throws APIRequestException {
        Map<String, String> extras = getExtrasMap(cfg, pushMsgBO);
        ClientConfig clientConfig = ClientConfig.getInstance();
        final JPushClient jpushClient = new JPushClient(cfg.getMasterSecret(), cfg.getAppKey(), null, clientConfig);
        final PushPayload payload = buildPush(cfg, pushMsgBO.getAlert(), pushMsgBO.getTitle(), extras,
            pushMsgBO.getTarget(), pushMsgBO.getTag(), pushMsgBO.getAlias());
        try {
            PushResult result = jpushClient.sendPush(payload);
            log.info("Got result - " + result);
            return result;
        } catch (APIConnectionException e) {
            log.error("Connection error. Should retry later. ", e);
            log.error("Sendno: " + payload.getSendno());
            throw new GlobalException("推送消息失败");
        } catch (APIRequestException e) {
            log.info("HTTP Status: " + e.getStatus());
            log.info("Error Code: " + e.getErrorCode());
            log.info("Error Message: " + e.getErrorMessage());
            log.info("Msg ID: " + e.getMsgId());
            log.error("Sendno: " + payload.getSendno());
            throw e;
        }
    }

构建消息体:

  /**
     * 构建全部安卓与推送消息
     *
     * @param alert 弹出信息
     * @param title 消息标题
     * @param extras 消息体
     */
    public static PushPayload buildPush(PushConfig cfg, String alert, String title,
        Map<String, String> extras, String target, String tag, List<String> alias) {
        //设置ios与安卓消息提
        IosNotification.Builder ios_builder = IosNotification.newBuilder()
            .incrBadge(1)
            .setSound("default")
            .setAlert(IosAlert.newBuilder()
                .setTitleAndBody(title, "", alert)
                .build());
        //自定义参数
        extras.entrySet().forEach(con -> {
            ios_builder.addExtra(con.getKey(), con.getValue());
        });
        AndroidNotification.Builder android_builder = AndroidNotification.newBuilder()
            .setTitle(title)
            .addExtras(extras)
            .setAlert("")//安卓alert有值时,会出现2条通知
            .setLargeIcon(cfg.getLargeIcon());//设置icon图标
        //if (PushTargetEnum.IOS.getId().equals(target)) {
        return getIosBuild(cfg, ios_builder, alias, tag);
        } else if (PushTargetEnum.ANDROID.getId().equals(target)) {
            return getAndroidBuild(cfg, android_builder,alias,tag);
        } else {
            return getAndroidIosBuild(cfg, ios_builder, android_builder,alias,tag);
        }
    }

ios设置

   private static PushPayload getIosBuild(PushConfig cfg, Builder ios_builder, List<String> alias, String tag) {
        Audience audience = getAudience(alias, tag, cfg);
        return PushPayload.newBuilder()
            .setPlatform(Platform.ios())//设置平台
            .setAudience(audience)//设置根据别名、标识、所有推送(Audience.tag("xxx"):标识;Audience.alias("xxx"):别名;Audience.all():所有)
            .setOptions(Options.newBuilder()
                .setApnsProduction(cfg.getIsProd())//设置推送环境,测试与正式环境
                .setSendno(ServiceHelper.generateSendno())
                .build())
            .setNotification(Notification.newBuilder()
                .addPlatformNotification(ios_builder.build())//设置消息体
                .build())
            .build();
    }

安卓配置与ios设置类似。

评论区

励志做一条安静的咸鱼,从此走上人生巅峰。

2

1

0

举报