Приложение - гиридное (Rails + Turbolinks iOS/Andoroid). В целом уже готова iOS версия, staging-сервер задеплоин, сегодня и завтра будут заполнены разделы и дизайн.
Основа приложения Turbolinks (https://github.com/turbolinks/turbolinks-android) + нативный Navigation Bar и боковое меню.
Срок - вторник 18 июня. Первый запуск 20, само мероприятие 27.
Android API 19+ (обсуждаемо)
В целом об архитектуре - https://m.signalvnoise.com/basecamp-3-for-ios-hybrid-architecture/
ВАЖНО Должен быть - DreamCityFest/Android
иначе приложение ведет себя как веб.
При запуске приложения ВСЕГДА должны запрашивать '/' c параметром device_uuid равным uuid устройства - /device_uuid=RANDOM
. Сервер в свою очередь при получении данного uuid запишет его в куку. Если не куку и нет параметра device_uuid будет возвращен 400 статус.
Если необходима аутентификация сервер вернет 400-ю ошибку и необходимо открыть контроллер авторизации с онбоардингом (выбор аватарки, запуск пожелания). По умолчания приложение должно всегда открывать /
.
С каждой страницей мы с помощью JavaScript (в iOS с помощью postMessage) передаем дополнительное информацию для отрисовке бокового меню и правой кнопки navigation bar'а. Пример объекта:
{
type: 'INIT',
payload: {
navigationBarMenu: [{"type":"link","text":"Лента","path":"/posts"}],
rightNavigationBarButton: {"icon":"photo","path":"/photos/new"},
signedIn: true,
},
};
Если нет меню или кнопки то приходит null
{
type: 'INIT',
payload: {
navigationBarMenu: null,
rightNavigationBarButton: null,
signedIn: true,
},
};
В приложение иногда нужно автоматически открывать диалог выбора фотографий. Так как WebView запрещает это делать то мы посылаем событию нативной обертке, которое уже открывает его (эмулирует клик):
{
type: 'SELECT_FILE',
payload: {
inputId: 'unique',
},
};
С помощью One Signal. Обычный пуш со ссылкой на раздел, который нужно открыть.