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() );
}
}
}
|