Заметки · октябрь 2026
После выгрузки из Base44 на телефон приложение никого не впускало.
Одна пустая настройка, что возвращает её исправление, что всё ещё ломается и что делает выгрузка, хотя никто не просил.
Base44 собирает рабочее веб-приложение по описанию. Рано или поздно основатель хочет видеть его в App Store и Google Play, и обычный путь туда — выгрузить код и обернуть его в приложение для телефона. В этой заметке по этому пути проходит одно приложение.
Это небольшое приложение для записи в студию йоги, собранное для этой заметки в редакторе Base44 по одному сообщению обычными словами и ответам на три вопроса, которые задал редактор. Клиенты входят, записываются на занятия и видят только свои записи. Студия вымышленная, два клиента — тестовые аккаунты, а работало всё на бесплатном аккаунте Base44. Код выгрузили собственным инструментом командной строки Base44, обернули в Capacitor — обычную обёртку для веб-приложений — и запустили на эмуляторе Android.
1. До Base44 ничего не доходит
В выгруженном виде приложение открывается на странице входа, и дальше никто не проходит. Вводишь правильные почту и пароль, нажимаешь «Log in», и приложение молча возвращается на ту же страницу. Сообщения об ошибке нет.
Причина — одна настройка. Выгруженный код оставляет адрес сервера Base44 пустым, поэтому каждый запрос уходит на «адрес, откуда пришла эта страница». В веб-версии это собственный сайт приложения, и всё работает. Внутри приложения для телефона страница приходит с самого телефона, поэтому вход и всё, что после него, уходит на телефон, а там ничего не отвечает.
Исправление — одна строка: вписать в эту настройку адрес Base44. В собственном шаблоне Base44, созданном из командной строки, адрес так же пустой, так что это не случайная ошибка одного приложения.
2. Войти можно, выйти — нет
Когда адрес вписан, страницы самого приложения работают как надо и внутри приложения для телефона. Новый клиент регистрируется, получает код на почту, вводит его, входит и записывается на занятие. Вход остаётся в приложении, и никакой браузер не открывается.
Две кнопки всё равно не работают. И «Continue with Google», и «Sign out» заканчиваются экраном «404 Page Not Found» внутри приложения. Обеим нужен второй адрес — сайт приложения, а выгрузка его не вписывает. Но и если его вписать, это ещё не всё: Google не разрешает показывать свой вход во встроенном окне приложения, поэтому вход ушёл бы в Chrome, и потом ничто не вернёт человека обратно в приложение. В приложении для телефона входу через Google нужен свой путь обратно, и его надо отдельно сделать и проверить.
3. Правила доступа устояли, с одной брешью
Я ждал, что именно здесь будет плохо, но нет. Редактор сам написал правила доступа: запись может прочитать, изменить или удалить только её клиент или администратор студии, а создавать записи может только функция записи на занятие. И они устояли. Клиент B не видел запись клиента A ни в списке, ни по номеру, ни через фильтр, не мог её изменить или удалить, а список пользователей был для него закрыт. Без входа нельзя было ничего ни прочитать, ни создать.
Брешь — в том, что клиент может делать со своей записью. Правило разрешает клиенту менять её напрямую, а не только кнопками приложения. Клиент A отменил запись кнопкой, а потом прямым запросом вернул ей статус «booked», и Base44 это принял. Проверка свободных мест срабатывает только при создании записи, поэтому счётчик так и не сдвинулся. Приложение показывало «1 of 1 places left», а следующий клиент получил ответ, что мест на занятие нет. Если бы кто-то другой за это время занял это место, одно место было бы у двух клиентов. Случайно такого не сделаешь, нужно намерение, но всё необходимое для этого есть у каждого клиента.
Чтобы закрыть брешь, нужно разрешить клиенту менять запись только через функцию, которая проверяет места, — как это уже делает создание записи.
Стоит знать одно различие. В проекте, созданном из шаблона командной строки Base44, правил доступа не было вообще: любой, у кого есть приложение, мог читать, добавлять, менять и удалять каждую запись в базе. Приложения из редактора получают правила, а код, который начинается с шаблона, — нет.
4. Выгрузка публикует копию
Выгрузка кода сделала больше, чем просто выгрузила его. Не спрашивая, она создала в аккаунте вторую копию приложения, отправила в неё таблицы данных и функции и сразу опубликовала сайт этой копии. Для основателя «дай мне код» незаметно превращается в «выложи в сеть вторую публичную копию». Здесь сайт копии за несколько минут заменили пустой страницей, а настоящих данных в копии не было. С настоящим приложением после выгрузки проверьте, не появилась ли в аккаунте новая копия, и решите, что она должна показывать.
Прежде чем отправлять в магазины
- Впишите в выгруженный код оба адреса, сервера и сайта, и попробуйте вход, выход и вход через Google в приложении на телефоне, а не в браузере.
- Прочитайте правило доступа каждой таблицы данных. Для каждой спросите: может ли человек изменить эту запись напрямую и не обходит ли он так проверку, которую делают кнопки?
- После выгрузки найдите новую копию в своём аккаунте Base44.
- Дальше — собственные правила магазинов, как для любого приложения для телефона: оплата через покупки самого магазина, удаление аккаунта изнутри приложения, ссылки на политику конфиденциальности и условия.
Что не пробовали
Сборку для iPhone: не было Mac. Вход через Google с настоящим аккаунтом Google. Собственную вкладку Mobile в редакторе, которая делает файлы для магазинов только на платном тарифе Builder в Base44. Что происходит со входом через Google на обратном пути, прочитано из кода библиотеки Base44, а не проверено запуском.