uni-push 1.0推送

UniPush 是 DCloud 联合个推公司推出的集成型统一推送服务,是所有uni-app开发者首选的推送服务。

移动端页面

获取cid
plus.push.getClientInfoAsync((info) => {
     let cid = info["clientid"];
});
监听推送

勾选push推送服务,在app.vue页面中设置监听推送设置

export default {
	onLaunch: function() {
		console.log('App Launch')
		uni.onPushMessage((res) => {
			console.log("收到推送消息:",res) //监听推送消息
		})
	},
	onShow: function() {
		console.log('App Show')
	},
	onHide: function() {
		console.log('App Hide')
	}
}

在线推送

默认推送,将其中的appId、appKey等字段修改为自己应用的字段,就可以调用接口测试了。
优点:简单、快捷
缺点:无法离线推送,即应用不在线,就无法收到推送消息

	// 默认推送、只能实现在线推送,无法实现厂商通道推送
    @RequestMapping("/push")
    public void push(){
        // host     appKey   masterSecret
        IGtPush push  = new IGtPush("http://sdk.open.api.igexin.com/apiex.htm","appKey", "masterSecret");
        TransmissionTemplate t = new TransmissionTemplate();
        t.setAppId("appid");
        t.setAppkey("appKey");

        String s = UUID.randomUUID().toString();
        //推送格式
        t.setTransmissionContent("{title:\"通知标题\",content:\"您有一条新通知,点击查看\",payload:\""+s+"\"}");

        //1:强制应用启动 2:等待应用启动
        t.setTransmissionType(1);
        SingleMessage message = new SingleMessage();
        // 把透传消息设置到消息模板中
        message.setData(t);
        // 设置优先级
        message.setPriority(1);
        // 是否进行离线发送
        message.setOffline(true);
        // 离线有效时间,单位为毫秒
        message.setOfflineExpireTime(1000 * 600);
        // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
        message.setPushNetWorkType(0);
        //按照用户的cid推送
        Target target = new Target();
        target.setAppId("lK8wLQjjhvAMUPA3YMgDd9");
        target.setClientId("cid");      // 在此填写设备cid
        IPushResult ret = null;
        try {
            ret = push.pushMessageToSingle(message, target);

        } catch (RequestException e) {
            e.printStackTrace();
            ret = push.pushMessageToSingle(message, target, e.getRequestId());
        }
        if (ret != null) {
            System.out.println(ret.getResponse().toString());
        } else {
            System.out.println("服务器响应异常");
        }
    }

离线推送

第一步:开启厂商推送
ps:2022年 实测发现,所有平台个人开发者无法实现离线推送。也就是说 必须要注册企业开发者,才可以实现离线推送
在这里插入图片描述
第二步: 确保厂商通道设置成功
可以在【Uni Push】-【配置管理】-【故障排查】-【 状态查询】中输入CID 查询,看是否会返回 devicetoken ,如果可以返回devicetoken,则证明厂商通道配置成功。
ps:厂商通道配置后需要重新打包,或重新生成基座

在这里插入图片描述

第三步:

	public void push(){
		GtApiConfiguration apiConfiguration = new GtApiConfiguration();
        //填写应用配置
        apiConfiguration.setAppId(appId);
        apiConfiguration.setAppKey(appKey);
        apiConfiguration.setMasterSecret(masterSecret);
        apiConfiguration.setDomain(host);
        // 实例化ApiHelper对象,用于创建接口对象
        ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
        // 创建对象,建议复用。目前有PushApi、StatisticApi、UserApi
        PushApi pushApi = apiHelper.creatApi(PushApi.class);
        //根据cid进行单推
        PushDTO<Audience> pushDTO = new PushDTO<Audience>();
        // 设置推送参数
        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);
        settings.setTtl(3600000);//消息有效期,走厂商消息需要设置该值
        //推送苹果离线通知标题内容
        Alert alert=new Alert();
        alert.setTitle("苹果离线通知栏标题");
        alert.setBody("苹果离线通知栏内容");
        Aps aps = new Aps();
        //1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。
        //苹果建议1小时最多推送3条静默消息
        aps.setContentAvailable(0);
        aps.setSound("default");
        aps.setAlert(alert);
        IosDTO iosDTO = new IosDTO();
        iosDTO.setAps(aps);
        iosDTO.setType("notify");
        PushChannel pushChannel = new PushChannel();
        pushChannel.setIos(iosDTO);
        // 安卓离线厂商通道推送消息体
        // PushChannel pushChannel = new PushChannel();
        AndroidDTO androidDTO = new AndroidDTO();
        Ups ups = new Ups();
        ThirdNotification notification1 = new ThirdNotification();;
        ups.setNotification(notification1);
        notification1.setTitle("您有一条新通知,点击查看");
        notification1.setBody(pushTitle);
        notification1.setClickType("intent");
        notification1.setIntent(
                "intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;component=io.dcloud.XXX.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"
        );	// 将XXX换成自己的包名
        androidDTO.setUps(ups);
        pushChannel.setAndroid(androidDTO);
        pushDTO.setPushChannel(pushChannel);

        // PushMessage在线走个推通道才会起作用的消息体
        PushMessage pushMessage = new PushMessage();
        pushDTO.setPushMessage(pushMessage);
        pushMessage.setTransmission( " {title:\"标题\",content:"+pushTitle+",payload:\"自定义数据\"}" );
        // 设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
        audience.addCid(cid);   // cid

        // 进行cid单推
        ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
        if (apiResult.isSuccess()) {
            // success
            System.out.println(apiResult.getData());
        } else {
            // failed
            System.out.println( "code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg() );
        }
    }
 }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐