You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Swift调用OpenTok库时遇rumor_client未初始化错误求助

解决OpenTok iOS SDK调用时的rumor client未初始化错误

问题描述

通过Flutter平台通道调用iOS原生Swift代码使用OpenTok库时,触发以下错误:

[ERROR] rumor_client_v1.c:274 - otk_rumor_v1_client_send (pClient == NULL) rumor client is not initialized and cannot send message

测试官方示例项目、新建空白项目均出现相同错误。当前环境配置:

*********************** OpenTok iOS SDK **************************** 
**** Version/Revision: ios-2.22.3/86d684fa2c49c335cc63ce5c52f57fd8610db130 
**** Library built on: May 17 2022 
**** Copyright 2022 Vonage 
**** Licensed under the Apache License, Version 2.0 ****

Xcode 14.1、macOS 12.6

使用的Swift代码如下:

print("initSession")
let args = call.arguments as! [String: Any]
let apiKey = args["apiKey"] as! String
let sessionId = args["sessionId"] as! String
let token = args["token"] as! String
var error: OTError?
let session = OTSession(apiKey: apiKey, sessionId: sessionId, delegate: self)!
print("My session id" + session.sessionId)
// try to connect to the session with the token
session.connect(withToken: token, error: &error)
if let error = error {
print("Error connecting to session: \(error.localizedDescription)")
}

执行后能正常打印会话ID,但上述错误依然出现。

可能的解决方案

  • 强持有OTSession实例
    若session是局部变量,方法执行完毕后会被系统销毁,导致底层rumor client失去上下文。需将session声明为类的属性,保持强引用:

    class YourFlutterChannelHandler: NSObject, FlutterPlugin, OTSessionDelegate {
        private var session: OTSession? // 作为类属性持有实例
    
        func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
            // ... 解析参数逻辑
            session = OTSession(apiKey: apiKey, sessionId: sessionId, delegate: self)!
            // ... 连接会话逻辑
        }
    }
    
  • 升级OpenTok SDK版本
    当前使用的2.22.3版本为2022年旧版本,可能存在与Xcode 14.1、macOS 12.6的兼容性问题。尝试升级至最新稳定版,新版本通常会修复这类底层初始化异常。

  • 确认权限配置
    确保iOS项目Info.plist中添加了必要权限:

    • 相机权限:NSCameraUsageDescription
    • 麦克风权限:NSMicrophoneUsageDescription
      权限缺失可能间接导致SDK初始化流程异常,引发该错误。
  • 在主线程执行会话连接
    OpenTok API要求在主线程调用,需将session.connect逻辑切换至主线程:

    DispatchQueue.main.async {
        self.session?.connect(withToken: token, error: &error)
        if let error = error {
            print("Error connecting to session: \(error.localizedDescription)")
        }
    }
    

内容的提问来源于stack exchange,提问作者Théo MARIE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:05:14