uniApp的消息推送和热更新

有关于uniApp的热更新和消息推送

大家好,这是一个java小白第一次写博客,写的不好,大家见谅哈,多多指教!!!

uniApp的热更新

这次接到任务是做uniApp的热更新和消息推送,对我这种完全没有接触过app的小白来说,感觉还是压力不小,之前都不知道app是如何的一个情况,但还是答应下来了,多接触多学习才会嘛

1.首先我去请教了做app的大佬,讲解了一下热更新和消息推送的逻辑理论

2.热更新我们使用的最简单的想法,不知道各位大佬是如何做的,我是直接后端获取一个更新包的列表,取出其中最新的那一条,然后分“wgt"和“apk”包,因为我们暂时只做了安卓版本的app

3 逻辑是以版本号的前面了两位来区分是大版本更新(apk)以版本号两位后的作为小版本更新(wgt)
在这里插入图片描述
一个很简单的逻辑,先获取当前数据库最新版本号,然后对比是否为最新代码,如果不是,就判断前两位是否相同来确定更新为wgt还是apk
下面是sql语句
在这里插入图片描述
根据创建时间获取倒序的最新一条(写的不好,各位大佬多多指教)
接下来传给前端就可以了

uniApp的消息推送

先放一波指南和常见问题吧,我下面说的是我遇到的坑,分享一下

UniPush开通指南

UniPush使用指南

Unipush常见问题

服务端api接口推送调用文档
(都是在官方获取的)

消息推送中间遇到了很多问题还是比较费心神的,因为周围的人基本上没咋做过app,想请教都不是很好请教,只有问了很多的技术支持

1.首先要做消息推送我们当然要先考虑用哪个插件,考虑了极光推送和unipush后选择了unipush

2.消息推送基本上就是后端的活了,用了unipush后还是很快就完成了

3.开始使用的是这套推送模版和sdk也是在官网找到的,但是有些限制,地址我就不放给大家了

在这里插入图片描述

在这里插入图片描述
4.使用了这套模版后,能够成功的在线推送消息到app但是不能实现离线推送,这里以华为手机为例子,各大安卓手机平台都是要开通厂商通道才能实现离线推送的

5.在我们开通了华为的厂商通道后又使用了另外一套模版,但是问题来了,我笑了,这套模版可以离线推送,但是不能在线,我现在手里两个,一个可以离线一个可以在线,难道我自己做判断吗,就很难,哈哈,中间还拨打了华为官方的技术支持的电话,虽然没有解决问题,但是态度还是特别好了,熬夜到晚上三点钟,后来测试的手机没电了,暂停先回家睡觉。

6.后来加到了unipush个推到技术支持的微信群,获取到了新的模版

@Override
    public Result appPush(String remark, String title) {
        GtApiConfiguration apiConfiguration = new GtApiConfiguration();
        //填写应用配置
        apiConfiguration.setAppId(appId);
        apiConfiguration.setAppKey(appKey);
        apiConfiguration.setMasterSecret(masterSecret);
        apiConfiguration.setDomain("https://restapi.getui.com/v2/");
        // 实例化ApiHelper对象,用于创建接口对象
        ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
        // 创建对象,建议复用。目前有PushApi、StatisticApi、UserApi
        PushApi pushApi = apiHelper.creatApi(PushApi.class);
        PushDTO<String> pushDTO = new PushDTO<String>();
        // 设置推送参数
        pushDTO.setRequestId(System.currentTimeMillis() + "");//requestid需要每次变化唯一
        //配置推送条件
        // 1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道;
        // 2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线;
        // 3: 表示该消息只通过个推通道下发,不考虑用户是否在线;
        // 4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。
        Strategy strategy = new Strategy();
        strategy.setDef(1);
        Settings settings = new Settings();
        settings.setStrategy(strategy);
        pushDTO.setSettings(settings);
        //安卓离线厂商通道推送消息体
        PushChannel pushChannel = new PushChannel();
        AndroidDTO androidDTO = new AndroidDTO();
        Ups ups = new Ups();
        ThirdNotification notification1 = new ThirdNotification();
        ;
        notification1.setTitle(title);
        notification1.setBody(remark);
        notification1.setClickType("intent");
        notification1.setIntent("intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end");
        ups.setNotification(notification1);
        androidDTO.setUps(ups);
        pushChannel.setAndroid(androidDTO);
        pushDTO.setPushChannel(pushChannel);
        PushMessage pushMessage = new PushMessage();
        pushDTO.setPushMessage(pushMessage);
        pushMessage.setTransmission("{title:" + title + ",content:" + remark + ",payload:\"自定义数据\"}");
        ApiResult<TaskIdDTO> apiResult = pushApi.pushAll(pushDTO);
        if (apiResult.isSuccess()) {
            return Result.succeed(apiResult.getData());
        } else {
            return Result.failed(apiResult.getMsg());
        }
    }

这个完整的是有苹果的ios通道的,因为我们的app没有ios版本所以我就没有用,去掉了,注意把Intent中的compoent改为自己的包名,下面是对应的sdk下载地址

模版对应的sdk

7.你以为这就结束了其实并没有,我发现我还是不能实现离线推送,这就涉及前端问题了,其实因为前端一直使用的Hbuilderx基座打包测试的千万不要用基座打包测试呀,用自有证书打签名包,云打包测试离线,参数都用自己的参数,别使用Dcloud官方的参数

8.unipush后台 厂商配置那边 相关厂商参数 json文件 都上传保存 用自有证书打包 云打包,就可以了,测试成功,离线在线都能够成功的实现推送(华为开通厂商通道相对简单,小米的话就要企业账号了)

至此小白的第一个博客就结束了,希望各位大佬能多多指点


版权声明:本文为weixin_45400277原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。