uniapp实现阿里云消息推送
今天来实现app的离线 / 在线 消息推送功能 使用的是阿里云消息推送。具体操作可以看插件文档来写,上面基本都有 接下来从我写代码中操作的步骤跟大家一一说明。
一:前期准备
1.引入阿里云插件,可以用使用本地插件和远程插件,我这里使用的是远程插件
2.选择 manifest.json文件,选择 APP原生插件配置,点击云端插件选择,勾选 阿里云移动推送 阿里云移动推送-厂商通道 两个插件
3.勾选后,在APP原生插件配置里,会增加阿里云移动推送相关的参数配置
4.配置 阿里云移动推送的AppKey和AppSecret,Android和iOS如果是一样的,就配置一样的AppKey和AppSecret。
5.(可选)使用哪个厂商通道,就配置哪个厂商通道的参数,不配置则不使用,具体参数由各厂商平台提供。有些厂商是需要配置多个参数,请注意参数配置完整
6.在uniapp 应用中注册初始化推送
7.在uniapp项目的manifest.json中 APP模块配置中打开 Push模块,但是不勾选uniPush
二:具体实现代码
这块代码是放在app.vue里面 引入写的js直接暴露出去 放在onLaunch里面即可。
/* 消息推送 */
function MessagePush(){
// 判断客户端环境是ios、android、小程序
const platform = uni.getSystemInfoSync().platform;
if (!['ios', 'android'].includes(platform)) return;
const aliyunPush = uni.requireNativePlugin('Aliyun-Push');
const that = this;
// ios
if (platform == 'ios') {
// 获取设备ID的方法
const idResult = aliyunPush.getDeviceId();
console.log(idResult,'存设备ID')
if (idResult.data.deviceId != '') {
// 存设备ID
uni.setStorageSync('registerID', idResult.data.deviceId);
}
//一个设备只能绑定一个账号,一个账号被设备绑定也有次数限制 account是要绑定的账号参数
// aliyunPush.bindAccount({
// account: this.account
// }, result1 => {
// console.error("苹果bindAccount注册推送", result1)
// });
// 应用在前台时,推送通知 应用在前台时,是否展示推送通知,默认false不展示
aliyunPush.showNoticeWhenForeground({
enable: true
});
// 注册前台推送通知的回调接口
aliyunPush.setNotificationCallback({},res=>{
console.error("setNotificationCallback", JSON.stringify(res))
})
// 注册推送消息的回调接口
aliyunPush.setMessageCallback({}, result => {
console.error("setMessageCallback", JSON.stringify(result))
});
// 注册用户点击推送通知的回调接口
aliyunPush.setNotificationResponseCallback({}, result => {
console.error("setNotificationResponseCallback", result)
});
}
// 安卓
if (platform == 'android') {
// 注册推送,开始接收数据
aliyunPush.registerPush({}, result => {
const event = result.event;
const channel = uni.requireNativePlugin('Aliyun-Push-NotificationChannel');
// 检查 应用通知通道的总开关
const channelRes = channel.isNotificationEnabled({
id: 'amp_channel'
});
// 先创建NotificationChannel
channel.createChannel({
id: 'amp_channel',
name: '安卓通知通道',
desc: '安卓通知通道',
importance: 3,
});
// 厂商通道
const aliyunThirdPush = uni.requireNativePlugin('Aliyun-ThirdPush');
// 在用户点击厂商通道推送的通知后,应用通过此接口接收数据 用户未点击或者直接移除,应用是无法感知的。
aliyunThirdPush.registerThirdPush({}, thirdRes => {
const data = JSON.stringify(thirdRes);
androidOperations(data,1)
})
// 注册日志接口
aliyunThirdPush.registerLog({}, result => {
console.log("third push plugin log : " + result);
})
// 注册推送
if (event === 'registerPush') {
if (result.code === 'success') {
console.log("注册推送 成功 ");
// 获取设备推送ID,注意必须注册推送成功之后,才能获取
const idResult = aliyunPush.getDeviceId();
if (idResult.data.deviceId != '') {
// 存设备ID
uni.setStorageSync('registerID', idResult.data.deviceId);
}
// aliyunPush.bindAccount({ //一个设备只能绑定一个账号,一个账号被设备绑定也有次数限制
// account: this.account // 登陆成功获取到的
// }, result1 => {
// console.error("安卓bindAccount注册推送", result1)
// });
} else {
console.log("注册推送 " + result.code + " " + result.msg);
}
}
// 打开通知
else if (event === 'onNotificationOpened') {
// 跳转,具体业务
const res = JSON.stringify(result);
androidOperations(res,2)
} else {
console.log("receive push event : " + event);
console.log("receive push data : " + JSON.stringify(result));
// uniapp的消息提示 本项目中需要后端配置 此处代码不要
// uni.createPushMessage({
// title:result.data.title,
// content:result.data.content
// })
}
});
}
}
// 推送成功后具体业务
function androidOperations(data,index) {
let arr;
if(index == 1){
arr = JSON.parse(data)
}else if(index == 2){
arr = JSON.parse(JSON.parse(data).data.extraStr)
}
...
}
export {
MessagePush
}
参考了文章https://blog.csdn.net/weixin_45013604/article/details/130705350?spm=1001.2014.3001.5502