В процессе разработки нашего Enterprise-ready продукта HyperHive — http://eigenmethod.com/products/hh/ (бренд EigenMethod создан для продвижения продукта на Запад, не удивляйтесь другому домену) мы столкнулись с необходимостью реализации ряда задач на нескольких платформах: iOS, Android, Cordova (Android и iOS), а в перспективе и под Windows для мобильных устройств.
Был вариант реализации под каждую платформу на родных языках, но мы выбрали путь создания кроссплатформенного фреймворка на C++ с последующим его портированием под все целевые платформы.
Функционал фреймворка:
1. Параллельные потоки загрузки данных с сервера и записи в базу (sqlite) и передачи на сервер в рабочих потоках (без блокирования UI).
2. Поддержка Дельта-обновлений при передаче данных (пересылается только разность между двумя версиями данных).
3. Шифрование трафика и базы данных алгоритмами ГОСТ и RSA.
4. Сжатие трафика.
5. Аутентификация и авторизация на сервере, поддержка сессий.
6. Обработка push-уведомлений (MQTT).
7. API для мобильных приложений для предоставления данных, в том числе в оффлайн-режиме.
8. Логирование действий мобильного клиента на сервере.
С задачей успешно справились, но, так как задача нетривиальна и мало освещена в сети, были сложности — как технические, так и в подходе к разработке.
7. Базовые требования к фреймворку
Возможность разработки
как нативных, так и
кроссплатформенных
приложений
Шифрование
ГОСТ для канала
и локальной БД
Производи-
тельность
8. Какие задачи должен решать фреймворк
Аутентификация,
сетевое
взаимодействие
поверх HTTP —
GET/POST
Сохранение
локальной копии
БД в SQLite.
Данных много!
Загрузка только
дельт обновлений
Параллельные
потоки загрузки
данных,
обновлений
Прием push
уведомлений
Шифрование
локальной БД и
канала
24. Сложности
Нет отлаженных процессов и хороших
средств разработки для написания и
отладки кода на стыке технологий (C++
Java/ObjC JS)
Кастомные билдовые скрипты под
мобильные таргеты для 3d-party
библиотек: mqtt, libcurl, boost…