rexcoder
rexcoder
  • 发布:2024-07-31 18:43
  • 更新:2024-08-05 10:18
  • 阅读:271

UTS 原生插件,集成IOS原生第三方SDK,不知道如何实现delegate ?

分类:uts

第三方SDK示例代码如下

// 添加代理。  
[[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil];  

// 收到消息回调。  

- (void)messagesDidReceive:(NSArray *)aMessages  
  {  
  // 收到消息,遍历消息列表。  
  for (EMChatMessage *message in aMessages) {  
    // 消息解析和展示。  
  }  
  }  

// 移除代理。  

- (void)dealloc  
  {  
  [[EMClient sharedClient].chatManager removeDelegate:self];  
  }  

我的实现


class ChatDelegate implements EMChatManagerDelegate {  
     messagesDidReceive(aMessages:any) : void {  
        console.log( 'aMessages')  
    }  
}  

EMClient.shared().chatManager?.add(new ChatDelegate(), delegateQueue = null)  
console.log(EMClient.shared().chatManager, 'EMClient.shared().chatManager')  

插件编译不报错, 但是无法正常收到messagesDidReceive回调

2024-07-31 18:43 负责人:无 分享
已邀请:
DCloud_iOS_LZY

DCloud_iOS_LZY

对比你的OC代码和uts代码,你目前的uts实现中有两处错误:
1、代理方法写错:

class ChatDelegate implements EMChatManagerDelegate {    
     messagesDidReceive(aMessages:any) : void {    
        console.log( 'aMessages')    
    }    
}  

上述代码中的代理方法应该是:

class ChatDelegate implements EMChatManagerDelegate {    
     messagesDidReceive(aMessages:any[]) : void {    
        console.log( 'aMessages')    
    }    
}  

2、代理对象创建方式错误:

EMClient.shared().chatManager?.add(new ChatDelegate(), delegateQueue = null)  

上述代码中的new ChatDelegate() 创建出来的delegate是个临时变量,出了函数作用域就会被释放,因此代理方法永远不会得到响应。应该创建一个全局的delegate变量:

let delegate: ChatDelegate = new ChatDelegate()

然后在具体的函数中引用delegate

EMClient.shared().chatManager?.add(delegate, delegateQueue = null)  
  • rexcoder (作者)

    谢谢,确实有效果

    2024-08-02 10:25

rexcoder

rexcoder (作者)

谢谢,我尝试下。

我在uniapp项目中尝试引入uts插件, error: 编译uts插件失败,无法拷贝目录。 这个错误怎么处理下?

  • 高级CV

    这个是怎么解决的

    2024-10-22 18:06

rexcoder

rexcoder (作者)

@DCloud_iOS_LZY 你好, 按第三方SDK集成

控制台提示。'userAccountDidForcedToLogout' has been renamed to 'userAccountDidForced(toLogout:)'

我在delegate中更改为
userAccountDidForced(aError: EMError | null), 控制台不报错了, 但是这个回调却一直不触发,是不是语法还有哪里不对

要回复问题请先登录注册