Вы когда-нибудь хотели, чтобы создание приложения для видеозвонков работало как Messenger на Facebook? Подберите друзей, позвоните им, и они получат уведомление. Они примут приглашение на звонок, и вы сможете поговорить друг с другом.

Во-первых, я думаю, что создать такое приложение непросто, потому что для этого нужно настроить множество вещей. Но однажды я понял, что мне не нужно делать всю тяжелую работу. Я нашел платформу ZegoCloud, которая предоставляет нам услуги по созданию приложения для видео, звонков или чата с помощью простых шагов. Мне нужно немного времени, чтобы сделать свое первое приложение для видеозвонков. И я покажу вам, как в этой статье, шаг за шагом.

Давайте сделаем это со следующим шагом.

1. Создайте проект ReactJS с приглашением на видеозвонок

Использование приложения create-react-app (Если вы не знакомы с приложением create-react-app, вы можете узнать больше здесь Создать приложение React)

npx create-react-app video-call-invitation

Теперь у вас есть проект React со следующей структурой:

2. Установите плагин call kit в свой проект.

Вам нужно перейти в корневую папку и установить пакет плагина

npm i @zegocloud/zego-uikit-prebuilt zego-zim-web --save

Измените файл App.js на это. Я импортирую экземпляры из zego-zim-web и @zegocloud/zego-uikit-prebuilt

// App.js
import React from 'react';
import { ZIM } from "zego-zim-web";
import { ZegoUIKitPrebuilt } from '@zegocloud/zego-uikit-prebuilt';

export default function App() {
  return (
    <div>App</div>
  );
}

3. Создайте учетную запись ZegoCloud и настройте проект для получения appID и ServerSecret:

  • Вы можете подписаться на 10 000 бесплатных минут в месяц здесь: https://bit.ly/3yXsodf
  • Зарегистрируйтесь, выполнив простой шаг

Изображение 0. Нажмите, чтобы создать проект
Изображение 1. Выберите «Голосовой и видеозвонок»
Изображение 2. Прокрутите вниз и нажмите «Далее»
Изображение 3. Заполните имя проекта и нажмите «Начать с UIKits».
Изображение 4: ZegoCloud создаст для вас новый проект и перенаправит вас на эту страницу. Вы можете нажать «Для Интернета», чтобы получить руководство по настройке Интернета.

Изображение 5: Это некоторая конфигурация, вы можете изменить конфигурацию с помощью переключателя, затем нажмите Сохранить и начать интеграцию
Изображение 6: Вы можете попробовать это с этой демонстрацией
Изображение 7: Нажмите на обзор на боковой панели, чтобы получить список вашего проекта. Нажмите на свой проект.
Изображение 8. Теперь вы можете получить appId и ServerSecret для проекта кодирования. Это уникально для вашего проекта, так что не делитесь им ни с кем, ок =)).

4. Кодирование

Это весь код файла App.js

import React, { useEffect, useState, useRef } from "react";
import { ZIM } from "zego-zim-web";
import { ZegoUIKitPrebuilt } from "@zegocloud/zego-uikit-prebuilt";

function randomID(len) {
  let result = "";
  if (result) return result;
  var chars = "12345qwertyuiopasdfgh67890jklmnbvcxzMNBVCZXASDQWERTYHGFUIOLKJP",
    maxPos = chars.length,
    i;
  len = len || 5;
  for (i = 0; i < len; i++) {
    result += chars.charAt(Math.floor(Math.random() * maxPos));
  }
  return result;
}

export default function App() {
  const [userInfo, setUserInfo] = useState({
    userName: "",
    userId: "",
  });
  const [calleeId, setCalleeId] = useState("");
  const zeroCloudInstance = useRef(null);

  async function init() {
    const userId = randomID(5);
    const userName = "user_" + userId;
    setUserInfo({
      userName,
      userId,
    });
    const appID = 62xxxx016;
    const serverSecret = "bead82axxxxxx470404736";

    const KitToken = ZegoUIKitPrebuilt.generateKitTokenForTest(
      appID,
      serverSecret,
      null,
      userId,
      userName
    );

    zeroCloudInstance.current = ZegoUIKitPrebuilt.create(KitToken);
    // add plugin
    zeroCloudInstance.current.addPlugins({ ZIM });
  }

  function handleSend(callType) {
    const callee = calleeId;
    if (!callee) {
      alert("userID cannot be empty!!");
      return;
    }

    // send call invitation
    zeroCloudInstance.current
      .sendCallInvitation({
        callees: [{ userID: callee, userName: "user_" + callee }],
        callType: callType,
        timeout: 60,
      })
      .then((res) => {
        console.warn(res);
        if (res.errorInvitees.length) {
          alert("The user dose not exist or is offline.");
        }
      })
      .catch((err) => {
        console.error(err);
      });
  }

  useEffect(() => {
    init();
  }, []);

  return (
    <div>
      <div>My username: <span>{userInfo.userName}</span></div>
      <div>My userId: <span>{userInfo.userId}</span>
      </div>
      <input
        type="text"
        is="userId"
        placeholder="callee's userID"
        onChange={(event) => {
          setCalleeId(event.target.value);
        }}
      />
      <button
        onClick={() => {
          handleSend(ZegoUIKitPrebuilt.InvitationTypeVideoCall);
        }}
      >
        Video call
      </button>
      <button
        onClick={() => {
          handleSend(ZegoUIKitPrebuilt.InvitationTypeVoiceCall);
        }}
      >
        Voice call
      </button>
    </div>
  );
}

Позвольте мне объяснить это:

  • функция randomID(len) используется для генерации случайного идентификатора пользователя, поскольку пользователь добавляет в комнату уникальный идентификатор пользователя.
const [userInfo, setUserInfo] = useState({
    userName: "",
    userId: "",
  });
const [calleeId, setCalleeId] = useState("");
const zeroCloudInstance = useRef(null);
  • userInfo используется для хранения имени пользователя и идентификатора пользователя
  • calleeId хранит calleeId, которому он будет отправлять приглашения.
  • zeroCloudInstance, используемый для хранения переменной ZeroCloud, используемой для доступа к API из ZegoUIKitPrebuilt
  async function init() {
    const userId = randomID(5);
    const userName = "user_" + userId;
    setUserInfo({
      userName,
      userId,
    });
    const appID = 62xxxx016;
    const serverSecret = "bead82a3061xxxxxxx70404736";

    const KitToken = ZegoUIKitPrebuilt.generateKitTokenForTest(
      appID,
      serverSecret,
      null,
      userId,
      userName
    );

    zeroCloudInstance.current = ZegoUIKitPrebuilt.create(KitToken);
    // add plugin
    zeroCloudInstance.current.addPlugins({ ZIM });
  }

  useEffect(() => {
    init();
  }, []);
  • Функция init, используемая для инициализации переменной, вызывается из хука useEffect. Он инициализирует идентификатор пользователя, имя пользователя. Он использует функцию generateKitTokenForTest из ZegoUIKitPrebuilt для создания токена для доступа к серверу из Zegocloud. Он передает следующие параметры — имя показывает себя
(appID, serverSecret, null, userId, userName)

За исключением нулевого значения, это значение roomId. Поскольку это называется приглашением, мы оставляем null.

  • ZIM — это плагин приглашения на звонок, поэтому нам нужно добавить его, чтобы мы могли использовать функцию приглашения на звонок.
zeroCloudInstance.current.addPlugins({ ZIM });
  • Функция handleSend используется для отправки приглашений на вызов вызываемым пользователям. Он получает callType. Здесь мы используем два типа вызова: ZegoUIKitPrebuilt.InvitationTypeVideoCall (для видео) и ZegoUIKitPrebuilt.InvitationTypeVoiceCall (для голоса).
function handleSend(callType) {
    const callee = calleeId;
    if (!callee) {
      alert("userID cannot be empty!!");
      return;
    }

    // send call invitation
    zeroCloudInstance.current
      .sendCallInvitation({
        callees: [{ userID: callee, userName: "user_" + callee }],
        callType: callType,
        timeout: 60,
      })
      .then((res) => {
        console.warn(res);
        if (res.errorInvitees.length) {
          alert("The user dose not exist or is offline.");
        }
      })
      .catch((err) => {
        console.error(err);
      });
  }
  • Не забудьте удалить режим React.Strict в файле index.js. Потому что если вы этого не сделаете, useEffect вызовет 2 раза, что приведет к ошибке.

Вот результат:

Репозитории Github: https://github.com/hqdung99/video-call-invitation

И это все.

Я думаю, что эта платформа очень полезна. Это помогает мне создать приложение для видеозвонков с очень небольшим количеством кода. Документация проста для понимания, доступны примеры и живое кодирование.

ZegoCloud имеет много других функций и поддерживает различные платформы, языки, библиотеки и фреймворки (Android, IOS, флаттер, ReactJS, Angular…)

Я думаю, что стартапы могут попробовать UI KIT для быстрого создания продуктов MVP, а с помощью SDK вы сможете глубоко погрузиться в его настройку.

Вы можете узнать больше на веб-сайте и в документации ZegoCloud: https://www.zegocloud.com/

ZEGOCLOUD позволяет легко создавать приложения для живого видеочата за считанные минуты.

См.: https://docs.zegocloud.com/article/15385