Объединение видеосессий Zoom через веб-приложение в SDK Django и Flutter

Я интегрировал Zoom Video SDK в свое веб-приложение, используя Video Web SDK в JavaScript. Он отлично работает в веб-приложении.

У меня возникают проблемы при подключении к видеосессии из мобильного приложения с помощью функции session_name passed, которая интегрирована во Flutter для платформы Android.

Я интегрировал Zoom Video SDK в свое веб-приложение, используя Video Web SDK в JavaScript. Он отлично работает в веб-приложении.

У меня возникают проблемы при подключении к видеосессии из мобильного приложения с помощью функции session_name passed , которая интегрирована вFlutter для платформы Android.

Шаги, которым я следовал:

1: При поступлении API-запроса на создание видеосессии создает JWT-токен для начала видеосессии. Возвращает имя_сессии в ответе API

2: Используя это имя_сессии, при попытке присоединиться создается новая сессия вместо того, чтобы присоединиться к существующей.

Вот мой код во Flutter для создания JWT-токена:

String generateJwt(String sessionName, String roleType) {
 try {
var iat = DateTime.now();
var exp = DateTime.now().add(Duration(hours: 2));
final jwt = JWT(
  {
    'app_key': configs["ZOOM_SDK_KEY"],
    'version': 1,
    'user_identity': makeId(10),
    'iat': (iat.millisecondsSinceEpoch / 1000).round(),
    'exp': (exp.millisecondsSinceEpoch / 1000).round(),
    'tpc': sessionName,
    'role_type': int.parse(roleType),
    'cloud_recording_option': 1,
  },
);
var token = jwt.sign(SecretKey(configs["ZOOM_SDK_SECRET"]));
print(token);
return token;
  } catch (e) {
print(e);
return '';
  }
 }

, который передается сюда для присоединения к сессии:

String generateJwt(String sessionName, String roleType) {
try {
var iat = DateTime.now();
var exp = DateTime.now().add(Duration(hours: 2));
final jwt = JWT(
  {
    'app_key': configs["ZOOM_SDK_KEY"],
    'version': 1,
    'user_identity': makeId(10),
    'iat': (iat.millisecondsSinceEpoch / 1000).round(),
    'exp': (exp.millisecondsSinceEpoch / 1000).round(),
    'tpc': sessionName,
    'role_type': int.parse(roleType),
    'cloud_recording_option': 1,
  },
);
var token = jwt.sign(SecretKey(configs["ZOOM_SDK_SECRET"]));
print(token);
return token;
} catch (e) {
print(e);
return '';
}
}

Код на языке Python :

def video(request,session_name):

payload={
        "app_key": settings.ZOOM_API_KEY,
        "role_type": 0,
        "tpc": session_name,
        "version": 1,
        "session_key": "zoom-5678",
        "geo_regions": "US,AU,CA,IN,CN,BR,MX,HK,SG,JP,DE,NL",
        "iat": int(time.time()),
        "exp": int(time.time()) + 7200
        }


header = {
    "alg": "HS256",
    "typ": "JWT"
    }

secret_key = settings.ZOOM_API_SECRET


jwt = generate_jwt(header, payload, secret_key)
return JsonResponse({'signature': jwt},safe=False)

Код JavaScript для присоединения к сессии:

import uitoolkit from '{% static "zoom/@zoom/videosdk-ui-toolkit/index.js" %}';
    
    var base_url = document.getElementById('base_url').value; 
    var session_value = document.getElementById('session_value').value; 
    var session_name = 'session_name'
    var sessionContainer = document.getElementById('sessionContainer');
    var authEndpoint = base_url+'video_call/' + encodeURIComponent(session_value);
    console.log(authEndpoint);
    var config = {
        videoSDKJWT: '',
        // sessionName: session_value,
        sessionName: 'asadasdasd',
        userName: 'Deepthi',
        sessionPasscode: 'zoom-5678',
        features: ['video', 'audio', 'settings', 'users', 'chat', 'share']
    };
    var role = 0; // 1 for host, 0 for participant

    window.getVideoSDKJWT = getVideoSDKJWT;

    function getVideoSDKJWT() {
        document.getElementById('join-flow').style.display = 'none';

        fetch(authEndpoint, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-CSRFToken': csrf_token
            },
            body: JSON.stringify({
                sessionName: config.sessionName,
                role: role,
                csrf_token: csrf_token
            })
        }).then((response) => {
            // Read the JSON response only once
            return response.json().then((data) => {
                if (data.signature) {
                    console.log(data.signature);
                    config.videoSDKJWT = data.signature;
                    joinSession();
                } else {
                    console.log(data);
                }
            });
        }).catch((error) => {
            console.log(error);
        });
    }

    function joinSession() {
        uitoolkit.joinSession(sessionContainer, config);
        
        uitoolkit.onSessionClosed(sessionClosed);
    }

    var sessionClosed = (() => {
        console.log('session closed');
        uitoolkit.closeSession(sessionContainer);
        document.getElementById('join-flow').style.display = 'block';
    });

Не сообщается ни о какой ошибке. Только каждый раз создается новая сессия. Неужели нельзя сделать это таким образом? Нужно ли мне позаботиться о чем-то еще?

Вернуться на верх