-ѕоиск по дневнику

ѕоиск сообщений в predefglas

 -ѕодписка по e-mail

 

 -—татистика

—татистика LiveInternet.ru: показано количество хитов и посетителей
—оздан: 10.12.2014
«аписей:
 омментариев:
Ќаписано: 94

[»з песочницы] Lync SDK 2013. ќпыт разработки собственного мессенджера на основе Lync (Skype for Business)

ƒневник

—уббота, 23 »юл€ 2016 г. 16:44 + в цитатник
ќ чем? ¬ этой статье € расскажу о том, что предлагает нам компани€ Microsoft в своем Lync SDK дл€ создани€ Ђкрасивыхї интерфейсов и новых возможностей дл€ Lync-клиента. “ак же подробно остановлюсь на взаимодействии с Lync клиентом в UI Suppression mode, с которым нам очень плотно пришлось иметь дело в процессе разработки собственного корпоративного мессенджера на базе Skype for Business. », самое главное, постараюсь подробно описать, с какими ограничени€ми нам пришлось столкнутьс€. — чего всЄ началось? ¬есной 2014-го года в нашей компании родилась иде€ создать корпоративный мессенджер на основе Lync (теперь уже Skype for Business). ¬ернее, сначала речь о мессенджере не шла, мы просто дорабатывали Lync под себ€ дл€ более эффективной работы. ѕо сути, мы использовали Lync-клиент в Ђштатном режимеї, а наше приложение было просто дополнением дл€ него, которое управл€ло контактами. ќно позвол€ло удобно разместить свои избранные контакты по всей ширине экрана, что было удобно дл€ работы на десктопах, предполагало быстрый доступ к контактам и упор€дочивало их по группам. ѕриложение назвали EasyLy (от ЂEasy Lyncї) и распространили среди Ђсвоихї. –исунок 1. ѕерва€ верси€ программы ѕостепенно в приложение добавл€лись новые функции. Ќапример, переписыватьс€ можно было как из Lync, так и из EasyLy, причем в последнем сохран€лась истори€ переписки. » в один эпохальный день было прин€то решение отказатьс€ от интерфейса Lync и реализовать весь его функционал самим, чтобы след Lync осталс€ только в диспетчере задач. “о есть мы решили сделать свой собственный, более удобный мессенджер дл€ десктопов на базе Lync. » вроде бы всЄ начиналось хорошо. „то мы хотели получить в итоге? ¬ начале одно из основных неудобств Lync дл€ нас состо€ло в отсутствии более или менее адекватного механизма сохранени€ и просмотра истории бесед. Lync, конечно, сохран€ет (по истечении определЄнного времени) свою историю в Outlook, но этим крайне неудобно пользоватьс€. ѕомимо этого, истори€ может вообще не сохранитьс€, если, например, закрыть окно с беседой до того, как произойдЄт сохранение. „то касаетс€ usability, мы проповедовали концепцию ЂOne clickї дл€ экономии времени пользовател€ и повышени€ эффективности его работы и пытались создать приложение максимально простое, пон€тное и удобное дл€ офисного работника. ÷елева€ группа, которую мы выделили дл€ себ€, Ц это не модные Ђмобильные сотрудникиї, бегающие со смартфоном по Ђпол€мї, а насто€щие офисные труд€ги, работающие по 8 часов за большим монитором, где всЄ должно быть эргономично.  роме по€вившейс€ ранее вкладки Ђ»збранноеї, по€вились идеи создать вкладки Ђ√руппыї, Ђƒиалогиї, а также журнал звонков с комментари€ми, окно проведени€ онлайн-собраний, возможность отправить сообщение офлайн-абоненту, интеграци€ с календар€ми, OneDrive и много других интересных функций. ћы планировали, не отбрасыва€ имеющийс€ функционал Lync (а затем и Skype for Business), создать дополнительную ценность дл€ пользовател€ за счет UI под десктопы, быстрого доступа к имеющимс€ функци€м и создани€ нового корпоративного функционала. –исунок 2. “ак выгл€дит EasyLy сейчас –азработка ѕервое, что было сделано Ц вкладка УFavoritesФ, где пользователь мог расположить все свои контакты, да еще и отсортировать их по группам. ћы приступили к работе и реализовали данную идею без особых проблем с помощью Lync SDK 2013. ¬се контакты мы сделали в виде карточек, на которых можно посмотреть список собраний и встреч данного пользовател€, а также позвонить ему (аудио- и видеозвонки) или написать сообщение. ѕри клике на эти кнопки вызывалось стандартное окно беседы Lync. –исунок 3. »конка контакта при наведении Ёто было достаточно просто. ¬оодушевленные успехом мы начали двигатьс€ дальше и полностью отказались от Lync UI (перевели Lync-клиент в UI Suppression mode). Ёто дало нам возможность отказатьс€ от стандартных окон бесед, звонков (да и вообще всех окон) и реализовать весь базовый функционал приложени€ самим. Ќе буду рассказывать про авторизацию пользовател€, описание можно найти здесь. –асскажу про нашу вторую и самую главную вкладку ЂDialogsї, которую мы реализовывали почти год. –исунок 4. ¬кладка диалогов с включенным режимом мультичата Ќачали мы, как полагаетс€, с текстовых бесед. ¬се шло хорошо, но не очень быстро, потому что, помимо простой отправки и приЄма сообщений, нужно было реализовать typing, смайлы, поддержку rtf-форматировани€ и т.д. –еализацию Lync IM Conversation можно вз€ть отсюда. —охранение сообщений и записей о звонках мы реализовали на базе SQLite, которой пользователь может гибко управл€ть. “акже мы внедрили поддержку одновременно нескольких открытых чатов (до 3-х) в одном окне, дл€ еще более скоростного общени€ с сотрудниками. ѕотом мы добавили поддержку аудио-, видеозвонков, шаринга экрана и приложений. ƒобавление в беседу поддержки Application Sharing пришлось реализовывать достаточно долго. ¬ обычном режиме Lync показ экрана происходит в самой беседе, а в UI Suppression mode нужно все возможности шаринга реализовывать самому с помощью Ђлинковскогої контрола ApplicationSharingView, служащего дл€ отображени€ расшариваемого ресурса, которому дл€ работы нужен handle родительского окна. ¬от краткий список того, что мы сделали дл€ поддержки шаринга: Х —оздали окно дл€ просмотра шаринга, реализовали перерисовывание картинки при изменении размеров родительского окна. Х —делали вывод списка ресурсов (экран, приложени€), которые можно шарить. Х —делали обводку рамками расшариваемых ресурсов. Х –еализовали дополнительные возможности: например, передачу управлени€ участнику конференции (чтобы он мог водить мышкой и кликать по экрану Ђшар€щегої пользовател€). Ўаринг в Lync (в UI Suppression mode) Ц капризна€ вещь: любит часто отваливатьс€ по неизвестным причинам, а при переходе на Skype for Business 2016 начал делать это почти посто€нно. ѕри просмотре шаринга часто по€вл€етс€ черный экран, и с этим ничего не сделать, так как воспроизведением занимаетс€ контрол ApplicationSharingView, про который написано выше. “акже на удачный запуск шаринга сильно вли€ет скорость соединени€. ƒалее мы перешли к созданию последней вкладки Ц ЂGroupsї, котора€ бы грузила списки групп из Lync и предоставл€ла пользователю возможность их полностью редактировать и сортировать в нужном пор€дке. ƒанна€ вкладка должна была перерасти в корпоративную вкладку, в которой бы размещались уже предварительно созданные в Active Directory группы дл€ сотрудников (в Lync они именуютс€ Distribution Groups): например, Ђ«аказать пропускї, ЂЌаписать за€влениеї и т.д. ”частниками данных групп €вл€ютс€ сотрудники, занимающиес€ определЄнными вопросами в компании. ѕри нажатии на данную группу открываетс€ чат или аудио звонок с первым участником группы со статусом Ђонлайнї. –едактированием этих групп должен заниматьс€ администратор Lync-сервера.  онечно, в процессе реализации всех задуманных планов у нас возникали проблемы, которые мы периодически решали. Ќо была особа€ группа проблем, св€занна€ с некорректной работой библиотеки Lync SDK в Lync Suppression mode. ћы отправл€ли их описание в Microsoft и думали, что сможем получить поддержку и найти способ решени€. ѕроблемы  ак неожиданно вы€снилось, в UI Suppression mode пропадает интеграци€ с Outlook: Х пропадают статусы контактов; Х отсутствует возможность создать беседу из карточки контакта; Х Ђотвалиласьї кнопка Ђ—оздать собрание Skypeї. ѕолностью работающие карточки контактов в Outlook нам удалось вернуть, опира€сь на вот эту статью (https://msdn.microsoft.com/ru-ru/library/office/jj...off15_IMIntegration_HowConnect). “акже заработали статусы контактов. “еперь Outlook их получает не от Lync, а от нашего приложени€, но обновл€ет он их каким-то магическим образом, и они посто€нно Ђотваливаютс€ї и перестают синхронизироватьс€. “о есть реально человек уже по€вилс€ онлайн и ЂзелЄныйї, а в Outlook Ц всЄ ещЄ в жЄлтом статусе ЂќтошЄлї. ћы писали в поддержку Microsoft, на что они нам прислали ссылку на эту же статью. ѕисали также в Yammer Microsoft, на форумах MSDN, Reddit и других площадкахЕ   сожалению, эта проблема так и не решена. ѕроблема отвалившейс€ в Outlook кнопки Ђ—оздать собрание Skypeї заключаетс€ в затирании в режиме UI Suppression mode ключей реестра по пути HCU/Software/Microsoft/Office/15.0/Lync/ConfAddin/мой sip/. “ам представлены три ключа: Capabilities, InbandInfo, PublicMeeting.  огда Lync запущен в штатном режиме, при нажатии на кнопку Ђ—оздать собрание Skypeї Outlook запрашивает у Lync информацию о конференци€х, и уже Lync создаЄт ключи реестра. ¬ UI Suppresseion mode Lync этого делать не хочет. —редствами Lync SDK 2013 получить нужную информацию от Lync-сервера нельз€. Ѕыл найден выход: использовать другую SDK (https://msdn.microsoft.com/en-us/library/office/dn465943.aspx ) дл€ работы непосредственно с сервером. „ерез UCMA мы смогли получить от сервера информацию о конференци€х авторизированного пользовател€. Ќаполнили ключи реестра Ц и вуал€: в Outlook вернулась возможность создавать собрани€. Ќо в этом способе есть несколько ограничений: Х библиотека UCMA работает только на 64-разр€дных ќ—, на 32-битных Ц решени€ нет; Х компьютер пользовател€ и сервер должны находитьс€ в одном домене, в противном случае нужно создавать сертификаты на сервере дл€ доверенных приложений.  ак это делать, описано тут, но нам данное решение не подходит, так как мы должны реализовывать функционал только на стороне клиента. Ќашлись баги и в самом Lync SDK. —амый критичный: в видеобеседе p2p при добавлении 3-го участника падает сам Lync-клиент, стабильно. ћайкрософт сам этот баг подтверждает, но сроков устранени€ не называет. Ѕыли попытки убивать беседу p2p и создавать сразу видеоконференцию на троих, но если 3-го участника добавл€ет клиент SFB, мы не можем этому помешать. ќстановка и возобновление видеоканала тоже ни к чему не привели. “акже про€вилась проблема невозможности расшарить экран некоторым пользовател€м (тем, у кого установлена друга€ верси€ Lync-клиента). ѕро€вл€етс€ данна€ проблема следующим образом. ѕервый клиент работает в нашем приложении (верси€ Lync Ц 2013), второй Ц в SFB 2016, и у него при открытии беседы с первым кнопка расшаривани€ экрана недоступна. ≈сли первый клиент заходит в обычный Lync 2013 (не Suppression mode), то у второго кнопка шаринга становитс€ активной. ≈сли у второго установлен также Lync 2013 или наше приложение, шаринг доступен с обеих сторон. ¬ Lync SDK отсутствует callback о доставке сообщени€ пользователю. ≈сть только callback, что сообщение ушло. Ќо иногда может сложитьс€ ситуаци€, что мы отправл€ем сообщение человеку в онлайн, оно уходит без exception, но к моменту прихода собеседник уже офлайн. —ледовательно, отправл€ющий думает, что сообщение пришло, а это не так. „асто возникает УItemNotFoundExceptionФ при получении фото контактов, следовательно, приходитс€ отображать наше стандартное изображение контакта. Ёмпирическим путем мы нашли сколько раз (примерно 3) надо вызвать код получени€ фото, чтобы Lync его всЄ-таки вернул. ќднако у некоторых контактов этот способ всЄ равно не срабатывает. ƒополнительно мы ввели кэширование фото, чтобы при старте не сыпалась куча эксепшенов, если у пользовател€ добавлено много контактов. ≈сть проблема и с группами пользовател€, в частности с ЂFavorites groupї. ѕроблема заключаетс€ в том, что у некоторых пользователей при вызове CanInvoke(DeleteGroup) Lync возвращает true, хот€ эта стандартна€ группа Lync, и еЄ нельз€ удалить. “ип у этой группы такой же, как и у группы, созданной пользователем (CustomGroup), поэтому скрывание пункта Ђ”далить группуї из меню приходитс€ делать еще и по дополнительной проверке на им€ группы, что €вл€етс€ жЄстким костылЄм. ќбнаружились ограничени€ Lync SDK 2013 Х Ќедоступна одна из важных фич: возможность настройки переадресации вызовов, когда пользователь находитс€ в офлайн. ћы реализовали переадресацию по истечении определЄнного времени, но только если пользователь не в офлайн. Х ѕри групповом видеозвонке (3 и более участников) поток, который транслирует видео участников, остаЄтс€ один (аналог мобильных конференций), то есть Lync сам мен€ет видеопотоки от разных участников в зависимости от того, кто сейчас говорит в микрофон. Х ѕередача файлов недоступна в UI Suppression mode. ћы решили эту проблему 2 способами: -добавили передачу файлов через Outlook в виде аттача к письму; -внедрили сервис OneDrive дл€ загрузки файлов в облако и автоматической отправки сообщени€ с URL файла. Х Ќельз€ использовать контекстные данные беседы (как это делать, описано здесь https://msdn.microsoft.com/en-us/library/office/jj...=255&MSPPError=-2147217396 ), когда беседа конвертировалась в конференцию и стала существовать на сервере, а не локально. ћы хотели использовать эту возможность дл€ синхронизации различной информации между клиентами. Х ќтключена возможность записи в поле ЂSubjectї в конференции (причЄм и в обычном Lync), зачем-то в Lync 2013 они закрыли эту возможность. „еловек на MSDN жаловалс€, что у него в Lync 2010 около 30 сохраненных конференций, кажда€ со своим заголовком. — переходом на Lync 2013 у него остались только списки участников в каждой конференции. “еперь отличить одну беседу от другой практически невозможно. Х ≈ще одна особенность Lync SDK 2013 Ц поддержка клиентов, начина€ с Lync 2013 и новее. Lync 2010 не поддерживаетс€. ќднако Lync SDK 2010 работает и с Lync 2010, и с Lync 2013, и выше.  акой логикой руководствуетс€ Microsoft, неизвестно. «аключение ¬ процессе разработки мы пон€ли, что полностью реализовать полноценный аналог Lync, основыва€сь на Lync SDK + UCMA, не получитс€. ƒаже если не брать в расчЄт ограничени€ данных технологий, обидно, что мы не смогли получить поддержку от Microsoft по исправлению ошибок Lync SDK. Ќа сегодн€ мы вынуждены отказатьс€ от UI Suppression mode, т.к. в нЄм невозможно реализовать весь нужный функционал, и ищем варианты обхода про€вившихс€ проблем. Ќадеюсь, данна€ стать€ поможет начинающим разработчикам приложений на основе Lync/Skype for Business. », возможно, кто-то из дочитавших до этого места захочет поделитьс€ своими иде€ми. ѕишите!

ћетки:  

ќпыт использовани€ Liferay Portal в e—ommerce

ƒневник

ѕонедельник, 06 »юн€ 2016 г. 19:17 + в цитатник
ћногие из нас уже не раз писали разного рода магазины. Ќо большие e-commerce проекты в быстро растущей и развивающейс€ компании разрабатывать приходитс€ нечасто.   таким решени€м предъ€вл€ютс€ дополнительные требовани€, такие как конфигурируемость, адаптивность к изменени€м, возможности встраивани€ в другие системы и прочее. ƒл€ написани€ такого решени€ компани€ Netcracker использовала Liferay Portal фреймворк. ¬ итоге получили достаточно преимуществ, но и без проблем не обошлось.
ѕодробнее под катом

ћетки:  

 —траницы: [1]