Skip to content

Instantly share code, notes, and snippets.

@danturu
Last active June 14, 2019 20:26
Show Gist options
  • Save danturu/c8e99e03e7a7035456a53a626b1a71a1 to your computer and use it in GitHub Desktop.
Save danturu/c8e99e03e7a7035456a53a626b1a71a1 to your computer and use it in GitHub Desktop.

Приложение - гиридное (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/

User Agent

ВАЖНО Должен быть - DreamCityFest/Android иначе приложение ведет себя как веб.

Запуск приложения

При запуске приложения ВСЕГДА должны запрашивать '/' c параметром device_uuid равным uuid устройства - /device_uuid=RANDOM. Сервер в свою очередь при получении данного uuid запишет его в куку. Если не куку и нет параметра device_uuid будет возвращен 400 статус.

Аутентификация

Если необходима аутентификация сервер вернет 400-ю ошибку и необходимо открыть контроллер авторизации с онбоардингом (выбор аватарки, запуск пожелания). По умолчания приложение должно всегда открывать /.

Нативное боковое меню и navigation bar

С каждой страницей мы с помощью 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. Обычный пуш со ссылкой на раздел, который нужно открыть.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment