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.vueonLaunch 事件写的 plus.globalEvent.addEventListener,他会一直监听不到消息,从而我这边收不到来电事件,当我刷掉 app 重进,就没问题了


更多关于uni-app plus.globalEvent.addEventListener回调不生效【紧急】的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

首次安装app是不是因为没有授权网络或者三方sdk未初始化完毕导致监听不到,这个问题从描述来看和框架无关,你先自行排查一下吧

更多关于uni-app plus.globalEvent.addEventListener回调不生效【紧急】的实战教程也可以访问 https://www.itying.com/category-93-b0.html


从代码和问题描述来看,这是一个典型的插件事件监听时序问题。在 onLaunch 中同时执行 linphone.registerUserWithDataplus.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);
}
回到顶部