Фильтрация приложений в Google Play Google Play фильтрует приложения, видимые пользователям, чтобы пользователи могли видеть и загружать только те приложения, которые совместимы с их устройствами. Один из способов фильтрации приложений - совместимость функций. Чтобы определить совместимость функций приложения с устройством данного пользователя, Google Play сравнивает функции:
Чтобы обеспечить точное сравнение функций, диспетчер пакетов Android предоставляет общий набор констант функций, которые используются в приложениях и устройствах для объявления требований к функциям и поддержки. Доступные константы функций перечислены в справочном разделе по функциям (см. Функции ) и в документации по классам для PackageManager (см. Android Package Manager ). Когда пользователь запускает приложение Google Play, оно запрашивает у диспетчера пакетов список функций, доступных на устройстве, вызывая getSystemAvailableFeatures(). Затем приложение Store передает список функций в Google Play при установлении сеанса для пользователя. Каждый раз, когда приложение загружается в консоль Google Play, производится сканирование файла манифеста приложения, в котором ищутся элементы <uses-feature> и проводится их оценка в сочетании с другими элементами, в некоторых случаях, такими как <uses-sdk> и <uses-permission>. После определения набора необходимых функций приложения этот список сохраняется внутри как метаданные, связанные с приложением .apk и версией приложения. Когда пользователь ищет или просматривает приложения с помощью приложения Google Play, служба сравнивает функции, необходимые каждому приложению, с функциями, доступными на устройстве пользователя. Ниже более детально описан механизм того, как Google Play оценивает манифест приложения и устанавливает набор необходимых функций. 1. Фильтрация на основе явно объявленных функцийЯвно объявленная функция - это функция, которую приложение объявляет в элементе <uses-feature>. Объявление функции может включать атрибут android:required=["true" | "false"], который позволяет указать два варианта: Google Play обрабатывает явно объявленные функции следующим образом:
Примечание. Явное объявление функции и включение атрибута android:required="false" позволяет эффективно отключить всю фильтрацию в Google Play для указанной функции. 2. Фильтрация на основе неявных функцийНеявная функция - это функция, которая требуется приложению для правильной работы, но которая не объявлена в элементе <uses-feature> файла манифеста. Строго говоря, каждое приложение всегда должно объявлять все функции, которые оно использует или требует, поэтому отсутствие объявления функции, используемой приложением, следует считать ошибкой. Однако в качестве гарантии для пользователей и разработчиков Google Play ищет неявные функции в каждом приложении и настраивает фильтры для этих функций так же, как это делается для явно объявленной функции. Приложение может требовать функцию, но не объявлять ее, потому что:
Чтобы учесть описанные выше случаи, 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 фильтрует приложение. В справочном разделе Разрешения приведен полный набор разрешений, которые подразумевают требования к функциям и, следовательно, запускают фильтрацию. |