В этом руководстве объясняется, как платформа Android и Google Play обрабатывают обновления приложений, а также обсуждаются различные варианты для разработчиков, публикующих свои приложения в нескольких магазинах приложений.
Как Android обрабатывает обновления приложений
Каждое приложение Android имеет уникальный идентификатор , который выглядит как имя пакета Java или Kotlin, например, com.example.myapp
. Этот идентификатор однозначно идентифицирует каждое приложение на устройстве. На устройствах Android одновременно может быть установлено только одно приложение с заданным идентификатором.
Для того чтобы обновление было принято платформой Android, должны быть выполнены следующие условия:
- Идентификатор приложения обновления должен совпадать с идентификатором установленного приложения.
- Сертификат подписи обновления должен совпадать с сертификатом подписи установленного приложения или содержать действительное подтверждение ротации .
- Код версии обновления должен быть выше или равен коду версии установленного приложения.
- В некоторых случаях пользователю может потребоваться принять обновление .
Обратите внимание, что встроенной защиты от обновления приложения разными установщиками нет, если обновления имеют одинаковый сертификат подписи и одинаковый или более высокий код версии.
Чтобы установить приложение, не соответствующее указанным выше условиям, пользователю необходимо сначала удалить текущую установленную версию, что приведет к удалению всех данных приложения с устройства.
Как Google Play обновляет приложения
Подход Google Play к обновлению приложений основан на следующих принципах:
- Поддерживайте актуальность приложений. Рекомендуется поддерживать приложения в актуальном состоянии, чтобы защитить пользователей от проблем безопасности и воспользоваться последними улучшениями функций.
- Уважайте выбор пользователя. Google Play обновляет приложения, связанные с учётными записями пользователей, на основе выбранных ими настроек обновления, таких как разрешение или запрет использования платных данных.
- Уважайте выбор разработчиков. Google Play использует настройки конфигурации разработчиков при определении обновлений приложений.
- Избегайте ненужного расхода ресурсов. Экономьте заряд батареи, оптимизируя загрузку обновлений и минимизируя использование данных, используя такие методы, как сжатие данных и исправление ошибок.
Для определенного приложения, установленного на устройстве, Google Play обновляет приложение, если оно соответствует следующим условиям:
- Приложение опубликовано в Google Play под тем же идентификатором приложения.
- Сертификат подписи опубликованного приложения совпадает с сертификатом подписи текущей установленной версии или содержит действительное подтверждение ротации .
- Приложение является частью библиотеки пользователя или было предварительно загружено производителем оригинального оборудования.
- Приложение доступно для этого пользователя и этого устройства в соответствии с параметрами таргетинга, определенными разработчиком.
- Установленное приложение устарело по сравнению с версией, доступной в Google Play.
При соблюдении этих условий Google Play сможет обновлять приложение. В подразделах ниже подробно описаны некоторые из перечисленных условий.
Обратите внимание, что бывают и другие случаи, когда Google Play загружает содержимое приложения или выполняет обслуживание исполняемых файлов приложения от имени разработчиков, не изменяя код версии Android, например, при завершении частичных загрузок или загрузке разделов по запросу.
Опубликовано в Google Play
Google Play использует идентификатор приложения для уникальной идентификации приложений, опубликованных в Google Play. Это условие выполняется, если идентификатор установленного приложения совпадает с идентификатором приложения, опубликованного в Google Play.
Часть библиотеки пользователя
Это условие выполняется, если выполняется одно из следующих условий:
- Любой активный аккаунт Google на устройстве ранее приобрел приложение, нажав кнопку установки или покупки в Google Play.
- Производитель оригинального оборудования предварительно загрузил приложение как часть образа системы.
Пользователи также имеют возможность вручную удалять приложения из своих библиотек .
Устаревший
Google Play определяет, устарело ли приложение, установленное на устройстве, по коду версии. Если версия, доступная для загрузки в Google Play, имеет более высокий код версии, чем установленная версия, то Google Play считает установленное приложение устаревшим.
Приложения в нескольких магазинах приложений
Существует несколько способов управления обновлениями между магазинами при публикации приложения в нескольких магазинах. В следующих разделах рассматриваются эти варианты, а также их потенциальные преимущества и недостатки.
Запретить обновления между магазинами
Возможно, вы захотите запретить каждому магазину приложений выполнять какие-либо обновления вашего приложения между магазинами. Это может быть полезно, если содержимое вашего приложения различается в каждом магазине. Этого можно добиться, опубликовав приложение с двумя разными идентификаторами или опубликовав приложение с одним и тем же идентификатором и двумя разными ключами подписи.
Чтобы снизить риск компрометации ключа, рекомендуется минимизировать повторное использование одного и того же ключа подписи. Для этого используйте разные ключи подписи приложений для каждого магазина приложений. Это может помешать обновлению между магазинами.
Независимо от выбранного вами подхода, Android считает приложения без соответствующего идентификатора приложения и ключа подписи несовместимыми. Пользователю, желающему перейти из одного магазина приложений в другой, потребуется удалить установленное приложение (что приведет к удалению всех связанных с ним данных) и переустановить его из другого магазина приложений.
Разрешить обновления между магазинами
Возможно, вам захочется разрешить каждому магазину приложений обновлять ваше приложение между магазинами. Это может быть полезно, если вы распространяете приложение с одинаковым контентом во всех магазинах приложений и хотите, чтобы пользователи получали актуальную версию в первую очередь. Если вы используете один и тот же идентификатор приложения и ключи подписи во всех магазинах приложений, где публикуется ваше приложение, каждый магазин приложений сможет обновлять установки вашего приложения независимо от того, где пользователь изначально его скачал.
Однако это может привести к непредсказуемому поведению пользователей в зависимости от того, как каждый магазин приложений реализует кросс-магазинные обновления. Например, пользователь может отключить обновления из одного магазина, не осознавая, что другой магазин может продолжать предоставлять обновления.
Если вы ранее разрешили кросс-магазинные обновления, но хотите начать отдавать предпочтение определённому источнику обновлений, когда он присутствует на устройстве, вы можете выпустить приложение с более высоким номером версии в предпочитаемом магазине приложений и продолжить выпускать приложения с более низкими номерами версий в других магазинах приложений. После установки обновления с более высоким номером версии из предпочитаемого источника другие магазины приложений не смогут выполнять кросс-обновления на этом устройстве.