集成极光推送-服务端

简介: 集成极光推送-服务端
  • 地址

https://www.jiguang.cn/


  • 创建应用


image.png

  • 创建应用后可得到应用的AppKeyAppSecret
  1. 客户端集成(略)
    将生成一个 Registration ID,形如 171976fa8ae931b4e93
  2. 服务端集成:
  • 依赖

"cn.jpush.api:jpush-client:3.4.3"
  • 推送代码

package com.wise.service.configuration;
import cn.hutool.core.util.RandomUtil;
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.AndroidNotification;
import cn.jpush.api.push.model.notification.IosAlert;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import com.alibaba.fastjson.JSON;
import com.wise.framework.exception.Excep;
import com.wise.model.proxy.ProxyErrMsgs;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import javax.annotation.PostConstruct;
import java.util.Collection;
/**
 * @author futao
 * @date 2019/12/20.
 */
@Slf4j
@Configuration
public class JpushClientConfiguration {
    @Autowired
    private Environment environment;
    private static Environment environmentHolder;
    /**
     * @PostConstruct 注解的方法将会在依赖注入完成后被自动调用。
     */
    @PostConstruct
    public void injectEnvironment() {
        JpushClientConfiguration.environmentHolder = environment;
    }
    /**
     * 推送消息给指定的用户
     *
     * @param jPushClient         客户端配置
     * @param registrationIds     要推送的目的用户
     * @param message             提示消息
     * @param title               标题
     * @param noVisualableMessage 透传消息
     */
    public static void push(JPushClient jPushClient, Collection<String> registrationIds, String title, String message, Object noVisualableMessage) {
        String messageUUID = RandomUtil.simpleUUID();
        PushPayload.Builder builder = PushPayload.newBuilder()
                //接收设备类型
                .setPlatform(Platform.all())
                //消息ID--用于防止 api 调用端重试造成服务端的重复推送而定义的一个标识符。
//                .setCid("03b6bf760c86f9fe77c0caef-")
                //此部分内容不会展示到通知栏上--透传给 App
                .setMessage(Message.newBuilder().setMsgContent(noVisualableMessage != null ? JSON.toJSONString(noVisualableMessage) : "{}").build())
                //title是标题,alert是内容
                .setNotification(Notification.newBuilder()
//                        .setAlert(message)
                        .addPlatformNotification(
                                IosNotification
                                        .newBuilder()
                                        //子标题展示不出来
                                        .setAlert(IosAlert.newBuilder().setTitleAndBody(title, null, message).build())
                                        //IOS角标
//                                        .incrBadge(1)
                                        //推送唤醒
                                        .setContentAvailable(true)
                                        //通知声音
                                        .setSound("default")
                                        .build()
                        )
                        .addPlatformNotification(
                                AndroidNotification
                                        .newBuilder()
                                        .setTitle(title)
                                        .setAlert(message)
                                        //消息,振动,呼吸灯类型           doc:  https://community.jiguang.cn/question/150550
                                        .setAlertType(7)
                                        .build()
                        )
                        .build())
                .setOptions(Options.newBuilder().setApnsProduction(environmentHolder.acceptsProfiles("pro")).build());
        if (CollectionUtils.isNotEmpty(registrationIds)) {
            //接收对象
            builder.setAudience(Audience.registrationId(registrationIds));
        } else {
            builder.setAudience(Audience.all());
        }
        PushPayload payload = builder
                .build();
        try {
            log.info("【{}】before极光消息推送-body:{}", messageUUID, JSON.toJSONString(payload));
            PushResult pushResult = jPushClient.sendPush(payload);
            log.info("【{}】极光消息推送成功结果:{}", messageUUID, JSON.toJSONString(pushResult));
        } catch (APIConnectionException | APIRequestException e) {
            log.error("【{}】消息推送失败", messageUUID, e);
            throw Excep.le(ProxyErrMsgs.ERR_100300100009);
        }
    }
}


  • 注意点:
    IOS区分开发环境与生产环境,需要设置.setOptions(Options.newBuilder().setApnsProduction(environmentHolder.acceptsProfiles("pro")).build());。且IOS打包的时候需要选择是开发环境还是正式环境,否则消息推送不到。Android不区分环境。
  • 环境问题:可以将IOS获取到的 Registration ID到管理后台查看注册到了什么环境,从而得知IOS的打包环境是否错误。


image.png


image.png

image.png

image.png

当选择了开发环境,且预估人数为1,说明该IOS设备注册到了极光的开发环境。

image.png


image.png

当选择了正式环境,再查询该Registration ID。发现预估人数为0,是正常的,因为这台设备注册在了开发环境。

相关文章
|
19天前
|
JSON Java 开发工具
Java服务端集成Google FCM推送的注意事项和实际经验
公司的app要上海外,涉及到推送功能,经过综合考虑,选择Google FCM进行消息推送。 查看一些集成博客和官方文档,看的似懂非懂,迷迷惑惑。本篇文章除了将我实际集成的经验分享出来,也会对看到的博客及其中产生的疑惑、注意事项一一评论。 从官方文档和众多博客中,你会发现Java集成FCM推送有多种实现方式,会让生产生文档很乱,不知作何选择的困惑。
46 0
|
3月前
|
开发工具 开发者
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二)
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二)
56 0
|
3月前
|
JSON 安全 应用服务中间件
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(一)
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(一)
64 0
|
3月前
|
安全 Java API
【新手必看】服务端集成网易云信IM 即时通讯
【新手必看】服务端集成网易云信IM 即时通讯
92 0
|
存储 前端开发 小程序
springboot集成webstock实战:服务端数据推送数据到客户端实现实时刷新
之前介绍过springboot集成webstock方式,具体参考: springboot集成websocket实战:站内消息实时推送
springboot集成webstock实战:服务端数据推送数据到客户端实现实时刷新
|
监控 Java 微服务
Spring Cloud - 集成 Spring Boot Admin 服务端
Spring Cloud - 集成 Spring Boot Admin 服务端
Spring Cloud - 集成 Spring Boot Admin 服务端
|
缓存 Java 应用服务中间件
Apollo:服务端搭建、和SpringBoot集成
Apollo:服务端搭建、和SpringBoot集成
511 0
极光推送集成
极光推送集成(一)极光推送集成(二)极光推送集成(三)极光推送集成(四)极光推送集成(五)极光推送集成(六)极光推送集成(七)极光推送集成(八)—— 工程实践
1275 0
|
开发工具 Android开发 开发者
极光推送(一)集成
一. 概述 image 开发者集成 JPush Android SDK 到其应用里,JPush Android SDK 作为 Android Service 长期运行在后台为APP提供永久在线的能力并保持与JPush Cloud 的长连接,当开发者想要及时地推送消息到达 App 时,只需要调用 JPush API 推送,或者使用其他方便的智能推送工具,即可轻松与用户交流。
1327 0
|
前端开发 API 开发工具
三分钟帮你集成极光推送——和那些你可能不知道的事
本文简介:本文前篇,可以帮助朋友们快速集成极光推送。本文后篇,是我自己项目实践的一些总结和心得,应该对读者们还是很有参考价值的,相信读完这篇文章,你会对极光推送有更加深入的理解,而不仅仅只是会集成而已。
2147 0