第一步,先 开通UniPush推送服务 , 具体怎么开通设置,参考下面网址! https://ask.dcloud.net.cn/article/35716
注意:1 在申请开通时,需要确保输入的 Android包名或 iOS Bundle ID 必须与打包时配置的一致,否则可能会导致无法收到推送消息.
2 Android平台:
Android包名必须与HBuilderX中App云端打包时配置的Android包名一致;Android 应用签名必须填入打包时使用证书的SHA1指纹。
iOS平台:
iOS BundleId必须与HBuilderX中App云端打包时配置的Bundle ID(AppID)一致。
3 iOS 平台还需要在 “配置管理”-“应用配置” 页面上传推送证书
第二步:服务端下发推送消息,
第三步:客户端处理推送消息
1 在登陆成功之后就把参数传给后台,绑定cid 和用户
onShow () {
// #ifdef APP-PLUS
var info = plus.push.getClientInfo();
this.appId = info.appid
this.appKey = info.appkey
this.clientId = info.clientid
// this.$cache.put("cid", this.clientId);
if (!this.clientId ) { //如果获取的cid为空,说明客户端向推送服务器注册还未完成,可以使用setTimeout延时重试1。
setTimeout(() => {
this.clientId = JSON.stringify( info.clientid )
}, 3000)
}
this.clientidUserRole()
// plus.nativeUI.alert(this.clientId)
// #endif
},
2 然后在 methods中 定义传接口的方法
methods: {
//开始获取
// #ifdef APP-PLUS
async clientidUserRole () {
let options = {
url: this. s t o r e . s t a t e . a p i . I T S M A P I P O S T C I D , d a t a : a p p i d : t h i s . a p p I d , a p p k e y : t h i s . a p p K e y , c l i e n t i d : t h i s . c l i e n t I d , t o k e n : t h i s . store.state.api.ITSM_API_POST_CID, data: { appid:this.appId, appkey:this.appKey, clientid: this.clientId }, token: this. store.state.api.ITSMAPIPOSTCID,data:appid:this.appId,appkey:this.appKey,clientid:this.clientId,token:this.cache.get(“token”)
}
let [err, res] = await this. h t t p . p o s t ( o p t i o n s . u r l , o p t i o n s . d a t a , o p t i o n s . t o k e n , f a l s e ) p l u s . n a t i v e U I . a l e r t ( r e s , ′ 这是获取到的 c i d 信息 a a a a a a a a a a a a a a a a a a a ′ ) i f ( ! t h i s . http.post(options.url, options.data, options.token, false) plus.nativeUI.alert(res,'这是获取到的cid信息aaaaaaaaaaaaaaaaaaa') if (!this. http.post(options.url,options.data,options.token,false)plus.nativeUI.alert(res,′这是获取到的cid信息aaaaaaaaaaaaaaaaaaa′)if(!this.http.errCheck(err, res)) return
},
// #endif
//结束获取
}
3 最后在app.vue文件中 进行事件监听
老版
onLaunch: function () {
//console.log('App Launch');
//#ifdef APP-PLUS
var info = plus.push.getClientInfo();
this.clientId = JSON.stringify( info.clientid )
plus.nativeUI.alert( this.clientId ,'这是获取到的cid')
/* 5+ push 消息推送 ps:使用:H5+的方式监听,实现推送*/
plus.push.addEventListener("click", function (msg) {
plus.nativeUI.alert("click:" + JSON.stringify(msg));
plus.nativeUI.alert(msg.payload,'这是啥');
// plus.nativeUI.alert(JSON.stringify(msg));
}, false);
// 监听在线消息事件
plus.push.addEventListener("receive", function (msg) {
// plus.ui.alert(2);
plus.unativeUIi.alert("recevice:" + JSON.stringify(msg))
}, false);
//#endif
this.downloadCount = this.$cache.get("downloadCount");
this.checkUpdate();
},
新版
onLaunch: function () {
// #ifdef APP-PLUS
/* 5+ push 消息推送 ps:使用:H5+的方式监听,实现推送*/
plus.push.addEventListener("click", function (msg) {
plus.nativeUI.alert("click:" + JSON.stringify(msg));
plus.nativeUI.alert(msg.payload,'在线消息');
if (app.isIOS()) { //如果是IOS
var payload;
if (msg.type == "click") { //APP离线点击包含click属性,这时payload是JSON对象
payload = msg.payload;
} else { //APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象
payload = JSON.parse(msg.payload);
}
if (payload != null || payload != undefined) {
var messageType = payload.messageType;
messageClick(messageType, payload);
}
}
if (app.isAndroid()) { //如果是Android,收到playload均是是JSON字符串,需要转为JSON对象
var payload = JSON.parse(msg.payload);
if (payload != null || payload != undefined) {
var messageType = payload.messageType;
messageClick(messageType, payload);
}
}
}, false);
// 监听在线消息事件
plus.push.addEventListener("receive", function (msg) {
// plus.ui.alert(2);
plus.nativeUI.alert("recevice:" + JSON.stringify(msg))
plus.nativeUI.alert(msg.payload,'在线消息');
if (app.isIOS()) { //如果是IOS
var payload = msg.payload;
//【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)
//【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环
if (msg.aps == null && msg.type == "receive") {
var messageTitle = payload.messageTitle;
var messageContent = payload.messageContent;
//创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null
plus.push.createMessage(messageContent, JSON.stringify(payload), {title: messageTitle});
}
}
if (app.isAndroid()) { //如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。
var payload = JSON.parse(msg.payload);
var messageTitle = payload.messageTitle;
var messageContent = payload.messageContent;
plus.push.createMessage(messageContent, msg.payload, {title: messageTitle});
}
}, false);
//#endif
this.downloadCount = this.$cache.get("downloadCount");
this.checkUpdate();
},
***************************推送的解释
这里填写的cid就是APP代码段获取到的clientId,填入后预览系统提示发送成功。
var info = plus.push.getClientInfo();
console.log( JSON.stringify( info ) );
unipush id
‘c1ebaa9aac70ef39cf2738dce4685f94’ token
‘c1ebaa9aac70ef39cf2738dce4685f94’ clientid 这是我手机的cid
pPyZWvH3Fa6PXba10aJ009 appid
b7dOGINPHR7pqwUxDhpTi4 appkey
如果点击通知消息,跳转不了页面,加上定时器试一试
setTimeout(function(){
uni.navigateTo({
url: ‘…/fire/detail?detailID=’+msgObj.id
})
},1000);
注意:
手机必须是云打包或者自定义基座运行的app
填写正确clientId,这个id定位了你的手机,可以理解为手机的ip。
手机通知权限要打开,要不你就等到天荒地老吧