uni-app 【报Bug】uni.getPushClientId 在ColorOS 13和14上首次启动获取不到clientId

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app 【报Bug】uni.getPushClientId 在ColorOS 13和14上首次启动获取不到clientId

操作步骤:

  1. 安装app后首次启动
  2. onLaunch中调用getPushClientId

预期结果:

拿到clientId

实际结果:

拿不到

bug描述:

在ColorOS 13和14上应用安装后首次启动后,不管调用多少次uni.getPushClientId都拿不到clientId 多次测试只有两种情况能拿到

  1. 安装完后直接在应用详情手动打开通知权限,再启动应用,这时可以拿到clientId
  2. 首次启动应用后,杀掉进程重启app,此时不管开没开通知权限都可以拿到clientId MIUI14上也有这个问题 只要是首次启动,在 app.vue的onLaunch中调用,在首页调用这个,都拿不到clientId
uni.getPushClientId({  
    success: (res) => {  
        let push_clientid = res.cid  
        uni.$u.toast('客户端推送标识:' + JSON.stringify(res), 5000)  
        uni.setStorageSync('clientId', push_clientid)  
        commit('SET_CID', push_clientid)  
        resolve(push_clientid)  
    },  
    fail(err) {  
        console.log(err)  
        uni.$u.toast('客户端推送标识失败:' + JSON.stringify(err), 5000)  
        uni.removeStorage({ key: 'clientId' })  
        reject(err)  
    },  
})

Image

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
Android Android 13
手机厂商 手机机型 页面类型
OPPO Reno7 vue
HBuilderX 3.99

2 回复

没问题了,vuex存值的问题


在使用 uni.getPushClientId 获取推送客户端 ID 时,在 ColorOS 13 和 14 上首次启动获取不到 clientId,可能是由于以下原因导致的:

可能原因

  1. 系统权限问题:ColorOS 13 和 14 可能对推送服务有额外的权限要求,未授予相关权限可能导致无法获取 clientId
  2. 推送服务初始化延迟:某些系统在应用首次启动时,推送服务可能还未完全初始化,导致无法立即获取 clientId
  3. 网络问题:首次启动时,网络连接可能尚未建立,导致无法与推送服务器通信。
  4. 系统兼容性问题:ColorOS 13 和 14 可能存在与 uni.getPushClientId 的兼容性问题。

解决方案

  1. 检查权限

    • 确保应用已经获取了必要的权限,如网络权限、推送权限等。

    • 可以在 manifest.json 中配置相关权限:

      {
        "permission": {
          "scope.userLocation": {
            "desc": "你的位置信息将用于推送服务"
          },
          "android.permission.INTERNET": {},
          "android.permission.ACCESS_NETWORK_STATE": {}
        }
      }
  2. 延迟获取 clientId

    • 在应用启动后,延迟一段时间再尝试获取 clientId,以确保推送服务已经初始化。

      setTimeout(() => {
        uni.getPushClientId({
          success: (res) => {
            console.log('clientId:', res.cid);
          },
          fail: (err) => {
            console.error('获取clientId失败:', err);
          }
        });
      }, 3000); // 延迟3秒获取
  3. 监听网络状态

    • 在获取 clientId 之前,检查网络状态,确保网络连接正常。

      uni.getNetworkType({
        success: (res) => {
          if (res.networkType !== 'none') {
            uni.getPushClientId({
              success: (res) => {
                console.log('clientId:', res.cid);
              },
              fail: (err) => {
                console.error('获取clientId失败:', err);
              }
            });
          } else {
            console.error('网络未连接');
          }
        }
      });
  4. 兼容性处理

    • 如果问题仍然存在,建议联系 uni-app 官方或 ColorOS 的技术支持,确认是否存在兼容性问题,并寻求解决方案。
  5. 日志记录

    • 在获取 clientId 时,记录详细的日志信息,以便更好地定位问题。

      uni.getPushClientId({
        success: (res) => {
          console.log('clientId:', res.cid);
        },
        fail: (err) => {
          console.error('获取clientId失败:', err);
        }
      });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!