极光消息推送多环境配置

简介: 极光消息推送多环境配置

在项目开发过程中,我们会使用到多个不同的环境开发、测试、生产,每个环境用来进行测试的打包APP也不一样,我们需要增加不同的环境配置,去满足需求。


我是基于Maven管理的SpringBoot项目


1.涉及到的环境有开发环境+测试环境+生产环境


2.在极光服务器增加应用配置


添加三个环境的应用配置

eb6f48c510d11c13a0d25a2b508a434d.png



每个应用中获取AppKey和MasterSecret


55dc084800ed581ebfb977016b0cd408.png


将变量放到配置文件中


68dd3ef3a302b3c6334ebabacc027e1c.png


如下图所示


2d42e2b9ad35a397d04d23df95563f1a.png


3.从配置文件中读取环境信息


@Configuration
public class JPushClientParamsModel {
    //极光用于标识唯一应用
    private String appKey;
    //客户端给极光推送时验证
    private String masterSecret;
    //IOS设备是否推生产环境
    private String apnsProdFlg;
    public String getAppKey() {
        return appKey;
    }
    @Value("${jpush.project.appkey}")
    public void setAppKey(String appKey) {
        this.appKey = appKey;
    }
    public String getMasterSecret() {
        return masterSecret;
    }
    @Value("${jpush.project.masterkey}")
    public void setMasterSecret(String masterSecret) {
        this.masterSecret = masterSecret;
    }
    public String getApnsProdFlg() {
        return apnsProdFlg;
    }
    @Value("${jpush.project.ios.apnsProdFlg}")
    public void setApnsProdFlg(String apnsProdFlg) {
        this.apnsProdFlg = apnsProdFlg;
    }
}


4.创建全局静态的JPushClient


@Component
public class PhiPushComponent {
    private static final Logger logger = LogManager.getLogger(PhiPushComponent.class);
    private static String MASTER_SECRET = "";// JPush服务器端下发的master_key
    private static String APP_KEY = "";// JPush服务器端下发的app_key
    private static String APNS_PRODFLG = "";// 是否发送到IOS设备的生产环境
    private static JPushClient jpushClient = null;
    @Autowired
    private JPushClientParamsModel jpushClientParamsModel;
    /**
     * 创建统一的JPush请求客户端
     */
    @PostConstruct
    public void initJPushClient() {
        //读取配置文件中的masterSecret
        MASTER_SECRET = jpushClientParamsModel.getMasterSecret();
        //读取配置文件中的appKey
        APP_KEY = jpushClientParamsModel.getAppKey();
        //读取配置文件中的apnsFlg
        APNS_PRODFLG = jpushClientParamsModel.getApnsProdFlg();
        //创建全局统一的JPushClient
        jpushClient = new JPushClient(jpushClientParamsModel.getMasterSecret(), jpushClientParamsModel.getAppKey(), null,
                ClientConfig.getInstance());
    }
    /**
     * 根据上报的设备类型,选择推送
     * @param model 上报设备的设备类型 1.Android 2.IOS 3.WinPhone 4.其他
     * @return
     */
    public JPushResponse jpushWithRegistId(PushWithRegistIdRequestModel model) {
        JPushResponse rsp = new JPushResponse();
        //设备类型为空时直接返回
        if(StringUtil.isNullOrEmpty(model.getOsType())){
            rsp.setStatusCode(Const.ResponseStatus.STATUS_NO_OS_TYPE_IN_REQUEST);
            return rsp;
        }
        if(model.getOsType().equals("0")){
            rsp = jPushToAndroid(model);
            rsp = jPushToiOS(model);
        }else if(model.getOsType().equals("1")){
            rsp = jPushToAndroid(model);
        }else if(model.getOsType().equals("2")){
            rsp = jPushToiOS(model);
        }else{
            rsp.setStatusCode(Const.ResponseStatus.STATUS_ILLEGAL_OS_TYPE_IN_REQUEST);
        }
        return rsp;
    }
    private JPushResponse jPushToAndroid(PushWithRegistIdRequestModel model) {
        JPushResponse rsp = new JPushResponse();
        try {
            PushResult result = jpushClient.sendAndroidMessageWithRegistrationID(model.getTitle(),
                    model.getMessage(),
                    model.getRegistrationId());
            rsp.setStatusCode(result.getResponseCode());
        } catch (APIConnectionException e) {
            logger.error(e);
            rsp.setStatusCode(10001);
        } catch (APIRequestException e) {
            logger.error(e);
            rsp.setStatusCode(10002);
        }
        logger.debug("Push to android rsp [{}]", rsp.getStatusCode());
        return rsp;
    }
    private JPushResponse jPushToiOS(PushWithRegistIdRequestModel model) {
        JPushResponse rsp = new JPushResponse();
        PushPayload payload = PushPayload.newBuilder().setPlatform(Platform.ios())
                .setAudience(Audience.newBuilder()
                        .addAudienceTarget(AudienceTarget.registrationId(model.getRegistrationId())).build())
                .setMessage(
                        Message.newBuilder().setMsgContent(model.getMessage()).addExtra("from", "ProjectPush").build())
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder().setAlert(model.getMessage()).setBadge(0)
                                .setSound("default").build())
                        .build())
                .setOptions(
                        Options.newBuilder().setApnsProduction(Boolean.parseBoolean(APNS_PRODFLG)).build())
                .build();
        //统一使用全局唯一的发送客户端
        pushInner(rsp, jpushClient, payload);
        logger.debug("Push to iOS rsp [{}]", rsp.getStatusCode());
        return rsp;
    }
}



5.测试推送


b11e0b02949ee3aa34bcebf7001fd50f.png



目录
相关文章
|
11月前
|
运维 开发工具 Android开发
.NET快速对接极光消息推送
.NET快速对接极光消息推送
|
Java API 开发工具
极光:手机APP消息推送平台
简单来说:极光推送是一个免费的开源的手机APP消息推送平台(类似帅哥美女们常用的购物APP某宝、某东等,一些优惠券消息后台推送到你们手机上)。
837 0
极光:手机APP消息推送平台
|
数据可视化 API 开发工具
.NET对接极光消息推送
.NET对接极光消息推送
156 0
.NET对接极光消息推送
|
iOS开发
IOS消息推送
IOS消息推送
135 0
|
JSON 数据格式 iOS开发
APNS IOS 消息推送JSON格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送。下面积累了我在进行apns推送时候总结的 apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 aps 字典。
3452 0
|
Android开发 iOS开发
了解iOS消息推送一文就够:史上最全iOS Push技术详解
本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表。 1、引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ、微信等IM界面处于前台时,聊天消息和指令都会通过IM自建的网络长连接通道推送过来,这种Pu...
3436 0
|
搜索推荐 iOS开发
iOS小技能:消息推送扩展的使用
iOS小技能:消息推送扩展的使用
547 0
iOS小技能:消息推送扩展的使用
|
PHP 数据安全/隐私保护 iOS开发
分分钟搞定IOS远程消息推送(二)
分分钟搞定IOS远程消息推送
407 0
分分钟搞定IOS远程消息推送(二)
|
存储 Android开发 数据安全/隐私保护
分分钟搞定IOS远程消息推送(一)
分分钟搞定IOS远程消息推送
245 0
分分钟搞定IOS远程消息推送(一)