uni-app 【报Bug】uni.getPushClientId 在ColorOS 13和14上首次启动获取不到clientId
uni-app 【报Bug】uni.getPushClientId 在ColorOS 13和14上首次启动获取不到clientId
操作步骤:
- 安装app后首次启动
- onLaunch中调用getPushClientId
预期结果:
拿到clientId
实际结果:
拿不到
bug描述:
在ColorOS 13和14上应用安装后首次启动后,不管调用多少次uni.getPushClientId都拿不到clientId 多次测试只有两种情况能拿到
- 安装完后直接在应用详情手动打开通知权限,再启动应用,这时可以拿到clientId
- 首次启动应用后,杀掉进程重启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)
},
})
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10 | HBuilderX |
Android | Android 13 | |
手机厂商 | 手机机型 | 页面类型 |
OPPO | Reno7 | vue |
HBuilderX | 3.99 |
2 回复
没问题了,vuex存值的问题
在使用 uni.getPushClientId
获取推送客户端 ID 时,在 ColorOS 13 和 14 上首次启动获取不到 clientId
,可能是由于以下原因导致的:
可能原因
- 系统权限问题:ColorOS 13 和 14 可能对推送服务有额外的权限要求,未授予相关权限可能导致无法获取
clientId
。 - 推送服务初始化延迟:某些系统在应用首次启动时,推送服务可能还未完全初始化,导致无法立即获取
clientId
。 - 网络问题:首次启动时,网络连接可能尚未建立,导致无法与推送服务器通信。
- 系统兼容性问题:ColorOS 13 和 14 可能存在与
uni.getPushClientId
的兼容性问题。
解决方案
-
检查权限:
-
确保应用已经获取了必要的权限,如网络权限、推送权限等。
-
可以在
manifest.json
中配置相关权限:{ "permission": { "scope.userLocation": { "desc": "你的位置信息将用于推送服务" }, "android.permission.INTERNET": {}, "android.permission.ACCESS_NETWORK_STATE": {} } }
-
-
延迟获取
clientId
:-
在应用启动后,延迟一段时间再尝试获取
clientId
,以确保推送服务已经初始化。setTimeout(() => { uni.getPushClientId({ success: (res) => { console.log('clientId:', res.cid); }, fail: (err) => { console.error('获取clientId失败:', err); } }); }, 3000); // 延迟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('网络未连接'); } } });
-
-
兼容性处理:
- 如果问题仍然存在,建议联系 uni-app 官方或 ColorOS 的技术支持,确认是否存在兼容性问题,并寻求解决方案。
-
日志记录:
-
在获取
clientId
时,记录详细的日志信息,以便更好地定位问题。uni.getPushClientId({ success: (res) => { console.log('clientId:', res.cid); }, fail: (err) => { console.error('获取clientId失败:', err); } });
-