Фильтрация приложений в Google Play Market


  Манифест       Фильтр       Функции     Разрешения     XML  

Фильтрация приложений в Google Play

Google Play фильтрует приложения, видимые пользователям, чтобы пользователи могли видеть и загружать только те приложения, которые совместимы с их устройствами. Один из способов фильтрации приложений - совместимость функций.

Чтобы определить совместимость функций приложения с устройством данного пользователя, Google Play сравнивает функции:

  1. Функции, необходимые приложению. Приложение объявляет функции в элементах <uses-feature> своего манифеста

  2. Функции, доступные на устройстве. Устройство сообщает о функциях, которые оно поддерживает, как свойства системы, доступные только для чтения.

Чтобы обеспечить точное сравнение функций, диспетчер пакетов Android предоставляет общий набор констант функций, которые используются в приложениях и устройствах для объявления требований к функциям и поддержки. Доступные константы функций перечислены в справочном разделе по функциям (см. Функции ) и в документации по классам для PackageManager (см. Android Package Manager ).

Когда пользователь запускает приложение Google Play, оно запрашивает у диспетчера пакетов список функций, доступных на устройстве, вызывая getSystemAvailableFeatures(). Затем приложение Store передает список функций в Google Play при установлении сеанса для пользователя.

Каждый раз, когда приложение загружается в консоль Google Play, производится сканирование файла манифеста приложения, в котором ищутся элементы <uses-feature> и проводится их оценка в сочетании с другими элементами, в некоторых случаях, такими как <uses-sdk> и <uses-permission>. После определения набора необходимых функций приложения этот список сохраняется внутри как метаданные, связанные с приложением .apk и версией приложения.

Когда пользователь ищет или просматривает приложения с помощью приложения Google Play, служба сравнивает функции, необходимые каждому приложению, с функциями, доступными на устройстве пользователя.

  • Если на устройстве присутствуют все необходимые функции приложения, Google Play позволяет пользователю увидеть приложение и потенциально загрузить его.
  • Если какая-либо необходимая функция не поддерживается устройством, Google Play фильтрует приложение, чтобы оно не было видно пользователю и было недоступно для скачивания.

    Ниже более детально описан механизм того, как Google Play оценивает манифест приложения и устанавливает набор необходимых функций.

    1. Фильтрация на основе явно объявленных функций

    Явно объявленная функция - это функция, которую приложение объявляет в элементе <uses-feature>. Объявление функции может включать атрибут android:required=["true" | "false"], который позволяет указать два варианта:

  • "true" - приложению требуется эта функция и без неё оно не может нормально функционировать

  • "false" - приложение предпочитает использовать эту функцию, если она доступна, но оно предназначено для работы и без этой функции.

    Google Play обрабатывает явно объявленные функции следующим образом:

    1. Если функция явно объявлена обязательной, Google Play добавляет ее в список обязательных функций для приложения. Затем он отфильтровывает приложение от пользователей на устройствах, которые не предоставляют эту функцию. Например:

      <uses-feature android:name="android.hardware.camera.any" android:required="true" />

    2. Если функция явно объявлена необязательной, Google Play не добавляет ее в список обязательных функций. По этой причине явно объявленная необязательная функция никогда не учитывается при фильтрации приложения. Даже если устройство не обеспечивает заявленную функцию, Google Play все равно посчитает приложение совместимым с устройством и покажет его пользователю, если не применяются другие правила фильтрации. Например:

      <uses-feature android:name="android.hardware.camera" android:required="false" />

      Если функция объявлена явно, но без атрибута android:required, Google Play считает, что функция обязательна, и настраивает по ней фильтрацию.

    Примечание. Явное объявление функции и включение атрибута android:required="false" позволяет эффективно отключить всю фильтрацию в Google Play для указанной функции.

    2. Фильтрация на основе неявных функций

    Неявная функция - это функция, которая требуется приложению для правильной работы, но которая не объявлена в элементе <uses-feature> файла манифеста. Строго говоря, каждое приложение всегда должно объявлять все функции, которые оно использует или требует, поэтому отсутствие объявления функции, используемой приложением, следует считать ошибкой. Однако в качестве гарантии для пользователей и разработчиков Google Play ищет неявные функции в каждом приложении и настраивает фильтры для этих функций так же, как это делается для явно объявленной функции.

    Приложение может требовать функцию, но не объявлять ее, потому что:

    • Приложение было скомпилировано для более старой версии библиотеки Android (Android 1.5 или более ранней версии), и элемент <uses-feature> был недоступен.

    • Разработчик ошибочно предположил, что функция будет присутствовать на всех устройствах, и в декларации не было необходимости.

    • Разработчик случайно пропустил объявление функции.

    • Разработчик явно объявил эту функцию, но это объявление было недействительным. Например, орфографическая ошибка в имени элемента <uses-feature> или нераспознанное строковое значение атрибута android:name сделает объявление функции недействительным.

    Чтобы учесть описанные выше случаи, Google Play пытается обнаружить подразумеваемые требования к функциям приложения, исследуя другие элементы, объявленные в файле манифеста, в частности элементы <uses-permission> (разрешения).

    Если приложение запрашивает разрешения, связанные с аппаратным обеспечением, Google Play предполагает, что приложение использует базовые аппаратные функции и, следовательно, требует эти функции <uses-feature>, даже если соответствующие объявления могут отсутствовать. Для таких разрешений Google Play добавляет основные аппаратные функции к метаданным, которые он хранит для приложения, и настраивает для них фильтры.

    Например, если приложение запрашивает разрешение CAMERA, Google Play предполагает, что приложению требуется задняя (обращенная наружу) камера, даже если приложение не объявляет элемент <uses-feature> для android.hardware.camera. В результате Google Play фильтрует устройства, у которых нет задней камеры.

    Если нежелательно, чтобы Google Play выполнял фильтрацию на основе конкретной подразумеваемой функции, то нужно явно объявить эту функцию в элементе <uses-feature> и включить атрибут android:required="false". Например, чтобы отключить фильтрацию, подразумеваемую разрешением CAMERA, нужно объявить следующие функции:

    <uses-feature android:name="android.hardware.camera" android:required="false" />

    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

    Внимание. Разрешения, которые запрашиваются в элементах <uses-permission>, могут напрямую влиять на то, как Google Play фильтрует приложение.

    В справочном разделе Разрешения приведен полный набор разрешений, которые подразумевают требования к функциям и, следовательно, запускают фильтрацию.