Как мы создавали ассистента.
Первая попытка создать персонального ассистента была еще на платформе Windows Phone 10.
Это был NeoBot, потом Sofia.
Естественно, писали его на C# и UWP.
Проблем было немало):
- платформа не поддерживала распознавание текста на русском языке. Приходилось использовать онлайн распознавание от Yandex или Google. Но они платные, что еще приводило к большим проблемам, поскольку нужно платить ежемесячно за сервис, а брать с пользователей подписку, тем более незнакомого приложения, нереально.
- для NeoBot использовали свой сервис обработки запросов от пользователей, потом перешли на DialogFlow, который тоже стал платный после определенного количества запросов.
Но тем не менее удалось добиться около 3000 скачивании и приложение (София) вошла в топ.
Принцип работы был такой, отправляли двоичный файл речевого фрагмента пользователя на сервер DialogFlow, получали в ответ json с вариантами ответов.
Затем использовали уже другие сервисы, например погода, википедия и т.д. для формирования ответов пользователю.
Все было бы еще неплохо, но Microsoft заявила об окончании эпохи мобильной платформы, а у нас закончилась подписка (bizspark) и проект потихоньку развалился.
Далее мы решили попробовать себя на Android. Приложение решили делать для автолюбителей – голосовой ассистент водителя.
Чтобы можно было делать вызовы голосом, набирать сообщения. Еще решили добавить ряд оригинальных функции – парковки (сохранение места и поиск затем к нему маршрута), поиск решения при ДТП с помощью мастера действии и голосовой поиск штрафов за нарушения ПДД.
Google имеет встроенную поддержку голосового распознавания, и в отличии от UWP сервис может работать оффлайн, что тоже плюс, т.к. не требуется интернет.
Долго выбирали на чем писать приложение, на Xamarin или Android Studio. Мы до этого программировали на c#, поэтому решили выбрать Xamarin Android.
Не знаем сколько коммерческих приложении на нем написано, но программировать на нем сущий ад. Долгая загрузка layout, требуется постоянная очистка проекта, плохая работа intellisense в axml…
Сделали прототип приложения, по размеру, примерно (с библиотеками mono) он занимал около 17MB. На хороших смартфонах работал еще сносно, попробовали установить на bloobo с 12Mb озу и андроидом 6. Тут при загрузке контактов возникло исключение, связанное с нехваткой памяти. Хотя в тестовом смартфоне контактов было всего два или три.
Решили параллельно попробовать перевести проект на Kotlin, язык, который немного похож на C#.
Скажу сразу, работа в Android Studio просто сказка. Все летает, layout отображаются моментально, подсказки работают идеально, в общем продуктивность возросла на несколько порядков!
Язык Kotlin отличный компромисс между java и c#.
Проект успешно перевели на Kotlin, размер приложения на Kotlin - 3.7Mb вместо 17Mb на Xamarin. Работает быстрее, отклик лучше.
Уже опубликовали в магазине google play.
В заключении отметим, что проекты, конечно, лучше делать на нативных средствах платформы. Тем более для android есть отличный Kotlin, а для ios – swift и сейчас swiftui.