uni-app plus.globalEvent.addEventListener回调不生效【紧急】
uni-app plus.globalEvent.addEventListener回调不生效【紧急】
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 19045.5854 | HBuilderX |
## 示例代码:
```javascript
const linphone = uni.requireNativePlugin('sn-linphone-sip');
export default {
onLaunch: function() {
console.log('App Launch')
linphone.start();
plus.globalEvent.addEventListener('registerChange', ({
state
}) => {
// None(0),
// Progress(1),
// Ok(2),
// Cleared(3),
// Failed(4);
if (state == 2) {
console.log('register ok');
this.isRegister = true;
uni.showToast({
icon: 'none',
title: '注册成功'
});
} else {
this.isRegister = false;
console.log('register state:', state);
}
});
console.error("register...");
linphone.registerUserWithData({
username: '978',
password: 'Zexin.133052',
domain: 'api.aiaodun.com:5061',
type: 'TLS'
})
}
}
操作步骤:
自定义基座运行app,第一次打开直接看控制台,会先输出App Launch 然后输出register…如果回调正常会有打印register state: [Number]1或者register ok
预期结果:
自定义基座运行app,第一次打开初始化app注册成功并且需要有回调
实际结果:
自定义基座运行app,第一次打开初始化app注册无回调,注册大概率成功,因为如果不成功也会给异常回调
bug描述:
问题描述:plus.globalEvent.addEventListener 接口,当我写了一个监听器,监听 "linphone网络电话" 插件的回调,其他页面都能正常使用,但是在 app.vue 中有一种情况不生效,就是我第一次安装 App,进入之后,我是在 app.vue 的 onLaunch 事件写的 plus.globalEvent.addEventListener,他会一直监听不到消息,从而我这边收不到来电事件,当我刷掉 app 重进,就没问题了
更多关于uni-app plus.globalEvent.addEventListener回调不生效【紧急】的实战教程也可以访问 https://www.itying.com/category-93-b0.html
首次安装app是不是因为没有授权网络或者三方sdk未初始化完毕导致监听不到,这个问题从描述来看和框架无关,你先自行排查一下吧
更多关于uni-app plus.globalEvent.addEventListener回调不生效【紧急】的实战教程也可以访问 https://www.itying.com/category-93-b0.html
从代码和问题描述来看,这是一个典型的插件事件监听时序问题。在 onLaunch 中同时执行 linphone.registerUserWithData 和 plus.globalEvent.addEventListener 可能导致事件监听器尚未完全注册时,插件的回调事件已经触发。
解决方案: 调整代码执行顺序,确保先完成事件监听注册再触发插件操作:
onLaunch: function() {
console.log('App Launch');
linphone.start();
// 先注册事件监听
plus.globalEvent.addEventListener('registerChange', (e) => {
const state = e.state;
if (state == 2) {
console.log('register ok');
this.isRegister = true;
uni.showToast({
icon: 'none',
title: '注册成功'
});
} else {
this.isRegister = false;
console.log('register state:', state);
}
});
// 延迟执行注册操作,确保监听器生效
setTimeout(() => {
console.error("register...");
linphone.registerUserWithData({
username: '978',
password: 'Zexin.133052',
domain: 'api.aiaodun.com:5061',
type: 'TLS'
});
}, 100);
}

