uni-app targetSdkVersion33 uniPush2在线推送问题:退到后台收到在线推送消息,点击通知栏消息无法调起APP
uni-app targetSdkVersion33 uniPush2在线推送问题:退到后台收到在线推送消息,点击通知栏消息无法调起APP
类别 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | windows10 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.98 |
手机系统 | Android |
手机系统版本 | Android 13 |
手机厂商 | 小米 |
手机机型 | 所有机型可复现 |
页面类型 | nvue |
Vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
操作步骤:
- targetSdkVersion33在线推送,APP退到后台存活,点击通知栏推送消息
预期结果:
- 点击通知栏消息调起APP
实际结果:
- 点击通知栏消息无法调起APP
bug描述:
- targetSdkVersion33 uniPush在线推送app退到后台收到在线推送消息,点击通知栏消息无法调起APP。使用开发者后台发送测试消息可以调起APP。targetSdkVersion不设置33就没问题
在 uni-app
中,使用 uniPush2
进行在线推送时,如果应用退到后台后收到推送消息,点击通知栏消息无法调起应用,可能是由于以下原因导致的:
1. Target SDK Version 33 的权限问题
从 Android 13(API 33)开始,系统对通知权限进行了更严格的限制。应用需要明确请求通知权限,否则无法正常显示通知或处理通知点击事件。
解决方案:
确保在 AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
并在应用启动时动态请求通知权限:
if (uni.getSystemInfoSync().platform === 'android' && uni.getSystemInfoSync().SDKVersion >= 33) {
uni.requestPermissions({
permissions: ['android.permission.POST_NOTIFICATIONS'],
success: (res) => {
console.log('权限请求成功', res);
},
fail: (err) => {
console.log('权限请求失败', err);
}
});
}
2. 通知点击事件未正确处理
uniPush2
的通知点击事件需要通过 uni.onPushMessage
或 uni.getPushMessage
来监听和处理。如果未正确处理通知点击事件,可能会导致应用无法调起。
解决方案:
在 App.vue
或入口文件中添加以下代码来监听通知点击事件:
onLaunch: function() {
uni.onPushMessage((res) => {
console.log('收到推送消息', res);
// 处理通知点击事件
if (res.type === 'click') {
// 跳转到指定页面
uni.navigateTo({
url: '/pages/your-page/your-page'
});
}
});
}
3. 通知渠道配置问题
从 Android 8.0(API 26)开始,系统要求应用必须为通知分配一个通知渠道。如果未正确配置通知渠道,可能会导致通知无法正常显示或处理。
解决方案:
在 AndroidManifest.xml
中配置通知渠道:
<meta-data
android:name="com.huawei.hms.client.channel.android.provider.ChannelProvider"
android:value="your_channel_id" />
并在应用启动时创建通知渠道:
if (uni.getSystemInfoSync().platform === 'android') {
uni.createPushChannel({
channelId: 'your_channel_id',
channelName: 'Your Channel Name',
importance: 'high'
});
}
4. 应用被系统杀死
如果应用被系统杀死,点击通知栏消息可能无法直接调起应用。这种情况下,需要确保应用在后台时能够正常接收和处理推送消息。
解决方案:
确保 uniPush2
的配置正确,并且应用在后台时能够正常接收推送消息。可以通过 uni.getPushMessage
来获取后台推送消息:
onLaunch: function() {
uni.getPushMessage((res) => {
console.log('获取到后台推送消息', res);
// 处理通知点击事件
if (res.type === 'click') {
// 跳转到指定页面
uni.navigateTo({
url: '/pages/your-page/your-page'
});
}
});
}
5. 检查 uniPush2
配置
确保 uniPush2
的配置正确,包括 AppID
、AppKey
等。如果配置不正确,可能会导致推送消息无法正常接收或处理。
解决方案:
检查 manifest.json
中的 uniPush2
配置:
"uniPush": {
"appid": "your_appid",
"appkey": "your_appkey"
}
6. 调试和日志
如果以上方法都无法解决问题,可以通过调试和日志来进一步排查问题。在 uni-app
中,可以使用 console.log
或 uni.showToast
来输出调试信息。
解决方案: 在关键位置添加调试信息,例如:
onLaunch: function() {
console.log('应用启动');
uni.onPushMessage((res) => {
console.log('收到推送消息', res);
});
}