Еще 16 марта мы сидели в уютном оупенспейсе, а уже на следующий день весь офис переехал на удаленку, домой. На хабре достаточно подобных историй. Но специфика нашей ситуации заключается не в переводе сотрудников, а переводе клиентов. Это более трех тысяч студентов, которые пришли учиться на дневном, но в одначасье оказались на заочном.
Что было сделано
Учебным отделом для преподавателей были разработаны методические рекомендации по ведению лекций online. Например, такие как:
Длительность занятий
Если у вас в расписании запланировано было офлайн-занятие длительностью 4 ак.часа, то вы можете сохранить эту длительность для онлайн, однако ввести более длинный перерыв (30-40 минут), чтобы студенты успели отдохнуть.
Если у вас в расписании запланировано было офлайн-занятие длительностью 8 ак.часов (полный день в выходные), то мы рекомендуем разделить занятие на две части (и вести занятия не три, например, раза в неделю, а четыре).
Если у вас большая группа, то мы рекомендуем ее разделить и провести более короткие занятия, но с большой интенсивностью и плотностью взаимодействия внутри группы.
Если у вас в расписании запланировано было офлайн-занятие длительностью 8 ак.часов (полный день в выходные), то мы рекомендуем разделить занятие на две части (и вести занятия не три, например, раза в неделю, а четыре).
Если у вас большая группа, то мы рекомендуем ее разделить и провести более короткие занятия, но с большой интенсивностью и плотностью взаимодействия внутри группы.
Фокусировка внимания
Теоретические занятия в онлайне максимально похожи на офлайн, но– однако стоит учесть, что фокус внимания в онлайне еще короче, чем в офлайне. Поэтому мы рекомендуем проводить лекции с интерактивным форматом: например, 15-20 минут теоретического материала, после которого следует дискуссия, вовлекающая в обсуждение всех студентов.
Интерактивные занятия лучше всего проводить в малых группах (10-12 человек). Если у вас большая группа (30+ человек), то лучше «разбить» группу на две части и провести, например, первые 2 ак.часа с первой половиной и вторые 2 ак.часа – с другой.
Интерактивные занятия лучше всего проводить в малых группах (10-12 человек). Если у вас большая группа (30+ человек), то лучше «разбить» группу на две части и провести, например, первые 2 ак.часа с первой половиной и вторые 2 ак.часа – с другой.
Огромная работа легла на сотрудников первой и второй линии поддержки. В одночасье на поддержке оказались тысячи личных устройств пользователей, на которых надо помочь установить необходимый софт, выдать лицензии на специфическое ПО и еще, внезапно, Zoom не работает в Крыму (кто успел туда уехать), Опера c встроенным VPN`ом помогают.
В качестве основной платформы был выбран Zoom.
Изначально остро встал вопрос с планированием занятий, созданием конференций и информированием всех студентов и проеподавателей.
Вот так выглядело расписание Zoom лекций первые несколько дней. В котором все конференции создавались вручную
А так, когда оно снова стало вестись в 1с
Спасибо моему коллеге, что он оперативно раскурил API Zoom`а и прикрутил автоматическое создание конференции в соответствии с расписанием. А так же автоинформирование об этом.
А тут ссылка на труды Сергея, как с помощью Zoom API можно создавать конференции.
Я в свою очередь хочу поделиться опытом по интергации платформы в Android приложение.
В нашем юзер-кейсе это оказалось очень удобно, т.к. конференции создаются на сервере и их идентификаторы передаются в расписание на телефоне.
Интерфейс расписания интегрированного с Zoom
Теперь посмотрим как это работает.
Исходный код
1. Импортируем две библиотеки из SDK: commonlib и mobilertc. Это, наверно, самый печальный этап, т.к. ваше приложение становится тяжелее на 80 мегабайт.
2. Имплементируем InitAuthSDKCallback, MeetingServiceListener в нашу активити или фрагмент. Для работы зума нужен минимальный API 21 (В документации на сайте указан minSdkVersion 16, но ее не очень оперативно обновляют, лучше ориентироваться на примеры в семплах идущих с SDK).
При создании фрагмента инициализируем SDK
Инициализация Zoom SDK
private View view;
private ZoomSDK mZoomSDK;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_first, container, false);
mZoomSDK = ZoomSDK.getInstance();
if (mZoomSDK.isLoggedIn()) {
getActivity().onBackPressed();
return null;
}
InitAuthSDKHelper.getInstance().initSDK(getContext(), this);
if (mZoomSDK.isInitialized()) {
ZoomSDK.getInstance().getMeetingService().addListener(this);
ZoomSDK.getInstance().getMeetingSettingsHelper().enable720p(true);
}
return view;
}
Для этого созаем класс InitAuthSDKHelper и вызываем функцию:
initSDK
public void initSDK(Context context, InitAuthSDKCallback callback) {
if (!mZoomSDK.isInitialized()) {
mInitAuthSDKCallback = callback;
ZoomSDKInitParams initParams = new ZoomSDKInitParams();
// initParams.jwtToken = SDK_JWTTOKEN;
initParams.appKey = SDK_KEY;
initParams.appSecret = SDK_SECRET;
initParams.enableLog = true;
initParams.logSize = 50;
initParams.domain = WEB_DOMAIN;
initParams.videoRawDataMemoryMode = ZoomSDKRawDataMemoryMode.ZoomSDKRawDataMemoryModeStack;
mZoomSDK.initialize(context, this, initParams);
}
}
Тут обратим внимание на следующие параметры:
appKey и appSecret — это идентификатор и секретный ключ вашего приложения, которое вы создаете на сайте зума (занимает примерно 1 минуту), зарегитрировавшись как разработчик.
На практике настоятельно не рекомендуется использовать их для идентификации.
Вместо них следует использовать параметр jwtToken, как это сделать написано тут.
Подключение к конференции
private AutoCompleteTextView idMeeting;
private AutoCompleteTextView idDisplayName;
private void onClickJoin() {
if(!mZoomSDK.isInitialized())
{
Toast.makeText(getContext(),"ZoomSDK has not been initialized
successfully",Toast.LENGTH_SHORT).show();
InitAuthSDKHelper.getInstance().initSDK(getContext(), this);
return;
}
if (ZoomSDK.getInstance().getMeetingSettingsHelper().isCustomizedMeetingUIEnabled()) {
ZoomSDK.getInstance().getSmsService().enableZoomAuthRealNameMeetingUIShown(false);
} else {
ZoomSDK.getInstance().getSmsService().enableZoomAuthRealNameMeetingUIShown(true);
}
String number = idMeeting.getText().toString();
String name = idDisplayName.getText().toString();
JoinMeetingParams params = new JoinMeetingParams();
params.meetingNo = number;
params.displayName = name;
ZoomSDK.getInstance().getMeetingService().joinMeetingWithParams(getContext(), params);
}
В данной реализации используется родной интерфейс. Но поддерживается возможность его кастомизации.
Выводы
- Процесс обучения (за исключением тех случаев, когда требуются мастерские и спец. оборудование) можно перевести в online.
- Важен целенаправленный и систематический подход, чтобы исключить зоопарк инструментов коммуникации, которые каждый тьютор будет использовать.
- Если у вас на бэкенде учебный процесс был до этого налажен, то внедрение конференций в мобильное приложение не займет много времени.