美文网首页对接第三方
集成极光推送-服务端

集成极光推送-服务端

作者: 垃圾简书_吃枣药丸 | 来源:发表于2020-03-12 17:06 被阅读0次
    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

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


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

    相关文章

      网友评论

        本文标题:集成极光推送-服务端

        本文链接:https://www.haomeiwen.com/subject/gblmjhtx.html