uniapp之unipush安卓app信息推送
uniapp之unipush安卓app信息推送
·
第一步,uniapp 官网查找推送
介绍业务、开通流程,请务必仔细阅读 UniPush使用指南 - DCloud问答
第二步,unipush相关链接
开通的unipush是封装了个推SDK,但Dcloud平台没有技术联系方式,他们技术支持是付费的,所以我们个推这边也会关注下unipush用户的集成情况,给予技术上的协助。
这里是完整的技术文档,请仔细研读:
UniPush使用指南 UniPush使用指南 - DCloud问答
Unipush常见问题 Unipush常见问题 - DCloud问答
Unipush咨询入口:DCloud问答
服务端api接口推送调用文档
可联系管理员进微信技术群
重点来了~~~
第三步,前端记录
unipush 信息推送,需要前端获取到app的cid,后端通过cid推送给对应的app,
开通UniPush推送服务
Android平台支持厂商推送通道
注意:开通UniPush后,需在后台配置“厂商推送设置”,配置好厂商参数后请一定要提交云打包,并且使用“自有证书”打签名包;将云打包后的安装包安装到手机上,再获取cid 进行离线厂商推送测试,不可使用基座方式获取的cid进行离线厂商推送测试。
获取手机厂商推送设置信息请参考:厂商推送应用创建配置流程
应用桌面图标的角标
如何获取CID和任务ID
- 在应用安装后第一次运行时应该调用5+ API的plus.push.getClientInfo方法获取客户端标识,如果获取的cid为空,说明客户端向推送服务器注册还未完成,可以使用setTimeout延时重试。
document.addEventListener('plusready', function(){ // 页面加载时触发 var pinf = plus.push.getClientInfo(); var cid = pinf.clientid;//客户端标识 }, false );
- 服务端推送的,请求成功后会返回result,result中【taskid】的值就是任务ID;平台上推送的,在【推送记录】中点击详情,页面上显示的【task ID】的值。
监听点击事件
// 点击推送信息 离线
plus.push.addEventListener('click', res => {
//模板消息
console.log('push--->click');
});
// 接收推送信息 在线
plus.push.addEventListener('receive', res => {
console.log('push--->receive');
});
uniapp 安卓demo代码
app.vue
app.vue
<script>
//引入推送js
import plusListener from '@/common/unipush-listener.js';
export default {
extends: base,
onLaunch: function() {
// 信息推送
//开启推送
//#ifdef APP-PLUS
plusListener.getClientInfoLoop();// 循环获取cid
plus.runtime.setBadgeNumber(0); // 角标清空
plusListener.pushListener(); // 监听通知栏信息
// #endif
}
}
</script>
unipush-listener.js
unipush-listener.js
/**
* 监听push 消息 以及后台数据恢复
*/
import store from '@/store'
let timer = false;
var numloop = 0;
export default {
// 开启监听推送
pushListener() {
console.log('pushListener=================pushListener');
// 点击推送信息 离线
plus.push.addEventListener('click', res => {
//模板消息
console.log('push--->click');
this.addEventListenerPushMessage(res, 'click');
});
// 接收推送信息 在线
plus.push.addEventListener('receive', res => {
console.log('push--->receive');
this.addEventListenerPushMessage(res, 'receive');
});
},
// 点击click方法,获取push数据,判断是否登录,进行跳转
addEventListenerPushMessage(push, type) {
console.log("push, type", push, type);
clearTimeout(timer);
timer = setTimeout(function() {
var row = push.payload;
console.log(JSON.stringify(row), "JSON.stringify(row)");
if (store.state.user.token) {
if (row.id) {
uni.navigateTo({
url: '/packagehome/pages/task/TodoList?row=' + JSON.stringify(row)
})
} else {
uni.reLaunch({
url: '../index/index',
});
}
} else {
uni.reLaunch({
url: '/pages/login/login'
});
}
}, 1500)
},
// 循环获取clientid信息,直到获取到为止
getClientInfoLoop() {
plus.push.getClientInfoAsync(function(info) {
console.log("info", JSON.stringify(info));
console.log(info);
console.log(info.clientid);
console.log(!info || !info.clientid, (info && info.clientid ? true : false));
// 如果info不存在,或者info存在,cid不存在则再次获取cid
if (!info || !info.clientid) {
console.log("cid为空=========================================");
let infoTimer = false;
infoTimer = setInterval(function() {
console.log('setInterval======');
console.log('numloop======', numloop++);
// 同步获取cid
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid; //客户端标识
console.log(pinf, cid, cid ? true : false);
if (cid) {
clearInterval(infoTimer); //清定时器
uni.setStorageSync('cid', cid); // 储存cid
console.log(uni.getStorageSync('cid'), '储存的cid======');
// this.passCid(cid); // 向后台传送cid
// 是否有cid,登录的时候上传后台,否则首页上传
var havecid = uni.getStorageSync('havecid');
console.log('havecid', havecid, cid);
console.log(!havecid && cid)
if (!havecid && cid) {
this.$http.get('/sys/updateCid?clientId=' + cid).then(({
data
}) => {
console.log(cid, 'passCid,向后台传cid========2data', data);
if (data.success) {
uni.setStorageSync('havecid', true);
}
})
}
}
}, 100);
} else if (info && info.clientid) {
// 储存cid
var cid = info.clientid;
uni.setStorageSync('cid', cid);
console.log(uni.getStorageSync('cid'), '本地储存cid======');
// this.passCid(cid); // 向后台传送cid
// 是否有cid,登录的时候上传后台,否则首页上传
var havecid = uni.getStorageSync('havecid');
console.log('havecid', havecid, cid);
console.log(!havecid && cid)
if (!havecid && cid) {
this.$http.get('/sys/updateCid?clientId=' + cid).then(({
data
}) => {
console.log(cid, 'passCid,向后台传cid========2data', data);
if (data.success) {
uni.setStorageSync('havecid', true);
}
})
}
}
}, function(e) {
console.log('Failed', JSON.stringify(e));
// 同步获取cid
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid; //客户端标识
if (cid) {
// 储存cid
uni.setStorageSync('cid', cid);
console.log(uni.getStorageSync('cid'), '======');
this.passCid(cid); // 向后台传送cid
}
})
},
// 向后台传送cid
passCid(cid) {
// 是否有cid,登录的时候上传后台,否则首页上传
var havecid = uni.getStorageSync('havecid');
console.log('havecid', havecid, cid, !havecid && cid);
if (!havecid && cid) {
this.$http.get('/sys/updateCid?clientId=' + cid).then(({
data
}) => {
console.log(cid, 'passCid,向后台传cid========2data', data);
if (data.success) {
uni.setStorageSync('havecid', true);
}
})
}
},
// // receive,接收到推送信息,前端创建推送信息
// addEventListenerReceive(push, type) {
// console.log("push, type", push, type);
// clearTimeout(timer);
// timer = setTimeout(function() {
// plus.push.createMessage(push.content,push.payload,push.options);
// }, 1500)
// },
}
以下是Java-sdk封装Rest-V2厂商推送示例:
{
"request_id":"请填写10到32位的id",
"audience": {
"cid": [
"请填写clientid"
]
},
"settings":{
"ttl":3600000,
"strategy":{
"default":1
}
},
"push_message":{
"transmission":" {title:"标题",content:"内容",payload:"自定义数据"}"
},
"push_channel":{
"android":{
"ups":{
"notification":{
"title":"安卓离线展示的标题",
"body":"安卓离线展示的标题",
"click_type":"intent",
"intent":"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"
}
}
},
"ios":{
"type":"notify",
"payload":"自定义消息",
"aps":{
"alert":{
"title":"苹果离线展示的标题",
"body":"苹果离线展示的内容"
},
"content-available":0
},
"auto_badge":"+1"
}
}
完整服务端厂商推送教程参考:
https://docs.getui.com/getui/server/rest_v2/common_args/
遇到的坑
更多推荐
已为社区贡献3条内容
所有评论(0)