uni-app targetSdkVersion33 uniPush2在线推送问题:退到后台收到在线推送消息,点击通知栏消息无法调起APP

发布于 1周前 作者 zlyuanteng 来自 Uni-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就没问题

1 回复

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.onPushMessageuni.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 的配置正确,包括 AppIDAppKey 等。如果配置不正确,可能会导致推送消息无法正常接收或处理。

解决方案: 检查 manifest.json 中的 uniPush2 配置:

"uniPush": {
    "appid": "your_appid",
    "appkey": "your_appkey"
}

6. 调试和日志

如果以上方法都无法解决问题,可以通过调试和日志来进一步排查问题。在 uni-app 中,可以使用 console.loguni.showToast 来输出调试信息。

解决方案: 在关键位置添加调试信息,例如:

onLaunch: function() {
    console.log('应用启动');
    uni.onPushMessage((res) => {
        console.log('收到推送消息', res);
    });
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!