Я разработал приложение с помощью React Native и распространял его с помощью Expo. Я опубликовал окончательную версию в Google Play и Apple Store.
Некоторое время спустя я обнаружил в Документы Expo по издательскому делу, что expo publish позволяет создавать обновления OTA («по воздуху»), которые встроены в Expo и автоматически обновляют приложение, согласно этот ответ:
The standalone app knows to look for updates at your app's published url.
Это я проверил и работал очень хорошо.
Однако теперь я вижу, что люди, загружающие приложение из магазинов (то есть Google Play или Apple Store), по-видимому, получают начальную версию приложения, а не обновленную.
Каков точный рабочий процесс для обновлений OTA? Идут ли они и «заменяют» существующую версию в Google Play и Apple Store при первом открытии? Или им нужно открыть его снова, чтобы получить обновление?
И что именно вызывает обновление приложения?





У нас были похожие проблемы. Я вижу две вещи, которые могут быть причиной этого в вашем случае:
app.json, если updates.fallbackToCacheTimeout установлен. Если он установлен, это время, в течение которого expo будет пытаться загрузить последнее обновление, прежде чем отобразить последнюю загруженную версию (которая будет начальной версией после начальной загрузки).Проверьте здесь для получения дополнительной информации: https://docs.expo.io/versions/latest/guides/configuring-ota-updates/
Обновления OTA не заменяют версию, загруженную из магазина приложений, они сначала сохраняются в кеше устройства, а затем запускаются при запуске приложения после загрузки. Источник https://docs.expo.io/versions/latest/sdk/updates/
Загрузка обновлений автоматически запускается при запуске приложения, затем, в зависимости от настроек, оно либо будет ждать (насколько позволяет updates.fallbackToCacheTimeout) перед отображением приложения, либо покажет его немедленно.
Вы можете заставить приложение запустить последнее обновление (если оно у вас есть), просто принудительно выйдя из приложения, а затем перезапустив его.
Надеюсь это поможет!
Итак, чтобы прояснить мне (я новичок в этом мире Expo): новый пользователь, который только что загрузил приложение из магазина приложений или Google Play, получит обновленную версию после, они запустят ее один раз и принудительно закроют один раз? Будет ли какая-либо настройка позволять обновленной версии появляться при первом открытии приложения?
Это была и наша проблема :) Точно! Если вы хотите, чтобы у людей была последняя версия (после загрузки из магазина приложений или Google Play), удалите updates.fallbackToCacheTimeout или установите что-то разумное (30 секунд — это долгое время для запуска приложения).
Итак, с моим текущим значением 0 обновление запускается в фоновом режиме и будьте готовы в следующий раз... По вашему опыту, какое значение находит лучший баланс между двумя вещами (убедитесь, что обновление загружено, но не раздражайте пользователя). слишком долго бегать)?
На самом деле я особо не экспериментировал. Мы просто удалили его, чтобы убедиться, что люди в максимально возможной степени используют последнюю версию. Если это не так важно для вас, я бы, вероятно, установил его примерно на 15 секунд, чтобы убедиться, что он делает «честную попытку» получить последнюю версию, независимо от того, насколько плохим может быть соединение.
Я не видел этого в списке ограничений OTA в документации Expo, но, на всякий случай, исходя из вашего опыта, вы смогли отправить update.fallbackToCacheTimeout изменения OTA? (без отправки нового бинарника, очевидно)
@Jared Вы должны иметь возможность изменить все, что не указано в ограничениях (docs.expo.io/versions/v34.0.0/workflow/publishing/#limitations). Конечно, обновление до updates.fallbackToCacheTimeout не будет применяться до тех пор, пока пользователь не выполнит обновление OTA (со старыми настройками).
@Jared Да, вы можете отправить fallbackToCacheTimeout через OTA. поток будет 1- изменить fallbackToCacheTimeout. 2-опубликовать. 3- перезапустите приложение как обычно. 4- Теперь опубликованы все новые изменения 5- Просто откройте приложение, чтобы увидеть изменения
Это очень плохая формулировка. Я думал, что приложение должно запускаться во время загрузки обновлений, а затем перезапускаться.
О, круто! Я установил
updates.fallbackToCacheTimeoutна 0, что в вашей ссылке я прочитал как Это позволит вашему приложению немедленно запускаться с кешированным пакетом при загрузке более нового пакета в фоновом режиме для будущего использования..