Евросоюз продавливают Apple и Google для полноценного предоставления работы сторонним магазинам приложения на ОС, а на iOS и вовсе чтобы такая возможность появилась. По итогу компании сами начали делать что-то на опережение. В Android 14 Dev Preview 2 сделали опыт использования сторонних магазинов.
Установка приложения из App Bundle
Новое API в PackageManager, которое позволит улучшить пользовательский опыт магазинов приложений. Современный формат для загрузки приложения в Google Play - App Bundle. Из App Bundle создается несколько APK, которые надо установить на устройство. Сейчас сторонним магазинам при каждой установке нового APK или обновлении существующего приложения приходится получать разрешение пользователя на установку.
С помощью PackageInstaller.Session.requestUserPreapproval() можно запросить разрешение один раз в рамках сессии на установку нескольких APK
Прозрачные обновления для пользователей
Следующая новинка для сторонних магазинов в API - PackageInstaller.SessionParams.setRequestUpdateOwnership(). Метод позволяет задать приложение, которое устанавливает будет ответственно за его обновления в будущем. Запрос на установку обновления из такого приложения не будет показываться пользователю. Для работы этого метода надо будет запросить разрешение ENFORCE_UPDATE_OWNERSHIP (выдаётся при установке приложения)
Установка приложений без прерывания
Новый класс PackageInstaller.InstallConstraints позволит задавать условия, когда может быть выполнена установка приложения, а именно:
Приложение не видно пользователю
Пользователь не взаимодействует с приложением
Приложение не видно пользователю или нет запущенных Foreground Service
Устройство не используется пользователем
Нет активного звонка
Появилось 3 новых методы в PackageInstaller, которые позволяют задавать требования для установки:
checkInstallConstraints() - асинхронный метод, который проверяет удовлетворяет ли требованиям приложение для установки
commitSessionAfterInstallConstraintsAreMet() - запускает сессию установки приложения, только когда все требования будут удовлетворены
waitForInstallConstraints() - асинхронный метод. Аналог checkInstallConstraints(), но вызывается когда требования для установки будут удовлетворены
Данное изменение будет полезно всем магазинам приложений, даже Google Play, чтобы обеспечить лучший пользовательский опыт.