uni-app unipush2.0 在线消息问题:app后台运行(未销毁)时点击通知栏消息无法唤起app
uni-app unipush2.0 在线消息问题:app后台运行(未销毁)时点击通知栏消息无法唤起app
类别 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC版本号 | 11 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.99 |
手机系统 | Android |
手机版本号 | Android 13 |
手机厂商 | 小米 |
手机机型 | 小米11 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
'use strict';
const uniPush = uniCloud.getPushManager({
appId: "xxx"
})
exports.main = async (event) => {
let obj = JSON.parse(event.body)
console.log(obj,'参数');
const res = await uniPush.sendMessage({
"push_clientid": obj.cids, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000
"title": obj.title, // 标题
"content": obj.content, // 内容
"payload": obj.data, // 数据
"force_notification": true, // 服务端推送 需要加这一句
"request_id": obj.request_id ,//请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失
"options":obj.options //消息分类,没申请可以不传这个参数
})
return res;
};
操作步骤:
- 发送在线消息
预期结果:
- 唤起app进入相应页面
实际结果:
- 无法唤起app
bug描述:
unipush2.0 在线消息 app后台运行(未销毁)点击通知栏消息 无法唤起app,控制台能监听到 点击事件 也进入了相应的逻辑 就是无法唤起app。redmi和小米都不行,后台弹窗权限都给了。但是我在开发者中心 发送通知消息 同样的场景下 可以唤起app。
更多关于uni-app unipush2.0 在线消息问题:app后台运行(未销毁)时点击通知栏消息无法唤起app的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前发现的原因是因为APP的targetSdkVersion 因为上架应用市场改成了31,改回28的话就可以正常拉起app,但是如果targetSdkVersion 降低的话,升级又会有问题
更多关于uni-app unipush2.0 在线消息问题:app后台运行(未销毁)时点击通知栏消息无法唤起app的实战教程也可以访问 https://www.itying.com/category-93-b0.html
一样的问题,有结果了吗
在 uni-app 中使用 UniPush 2.0 时,如果应用在后台运行(但未被销毁),点击通知栏消息无法唤起应用,可能是由于以下原因导致的:
1. 通知点击事件未正确处理
UniPush 2.0 提供了通知点击事件的回调,但需要开发者手动处理。如果未正确处理通知点击事件,可能会导致点击通知栏消息时无法唤起应用。
解决方案:
在 App.vue
或相关页面中,监听 onLaunch
或 onShow
事件,并处理通知点击事件。
// App.vue
export default {
onLaunch(options) {
// 监听通知点击事件
plus.push.addEventListener('click', (msg) => {
// 处理通知点击逻辑
console.log('通知被点击', msg);
// 可以在这里执行一些操作,如跳转到指定页面
uni.navigateTo({
url: '/pages/your-page'
});
});
}
}
2. 通知参数未正确传递
如果通知点击事件中未正确传递参数,可能会导致应用无法根据通知内容执行相应的操作。
解决方案: 确保在推送消息时,正确传递了通知参数。在接收到通知点击事件时,解析参数并执行相应的操作。
// App.vue
export default {
onLaunch(options) {
plus.push.addEventListener('click', (msg) => {
const payload = msg.payload; // 获取通知的附加数据
if (payload) {
const data = JSON.parse(payload);
// 根据 data 中的内容执行相应的操作
if (data.page) {
uni.navigateTo({
url: data.page
});
}
}
});
}
}
3. 应用生命周期管理问题
如果应用在后台运行时,生命周期管理不当,可能会导致应用无法正常唤起。
解决方案:
确保应用在后台运行时,生命周期管理正确。可以在 App.vue
中监听应用的生命周期事件,确保应用在后台运行时能够正确处理通知点击事件。
// App.vue
export default {
onShow(options) {
// 应用从后台唤起时处理通知点击事件
if (options && options.path) {
// 根据 options 中的内容执行相应的操作
uni.navigateTo({
url: options.path
});
}
}
}
4. UniPush 2.0 配置问题
如果 UniPush 2.0 的配置不正确,可能会导致通知点击事件无法正常触发。
解决方案:
检查 UniPush 2.0 的配置,确保在 manifest.json
中正确配置了 UniPush 2.0 的相关参数。
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>"
],
"push": {
"unipush": {
"appid": "your-appid",
"appkey": "your-appkey",
"appsecret": "your-appsecret"
}
}
},
"ios": {
"push": {
"unipush": {
"appid": "your-appid",
"appkey": "your-appkey",
"appsecret": "your-appsecret"
}
}
}
}
}
}
5. 设备权限问题
如果设备未授予应用通知权限,可能会导致通知无法正常显示或点击。
解决方案: 确保应用在设备上拥有通知权限。可以在应用启动时检查并请求通知权限。
// App.vue
export default {
onLaunch() {
// 检查并请求通知权限
plus.android.requestPermissions(['android.permission.POST_NOTIFICATIONS'], (result) => {
console.log('通知权限请求结果', result);
});
}
}