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

3 回复

目前发现的原因是因为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 或相关页面中,监听 onLaunchonShow 事件,并处理通知点击事件。

// 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);
    });
  }
}
回到顶部