Для включения и загрузки экспорта каталога приложений вы можете использовать Play Console для магазинов приложений. Предварительным условием для этого является участие в программе Play Catalog Access. Этот экспорт предоставляет ежедневный снимок приложений в Google Play, которые соответствуют требованиям и согласились быть включенными в ваш каталог сторонних магазинов приложений.
Включить экспорт каталога приложений
Чтобы начать получать экспорт из каталога приложений, необходимо зарегистрироваться в Play Console для магазинов приложений:
- Открытая игровая консоль для магазинов приложений
- Перейдите на страницу «Расширенные настройки» .
- Найдите раздел «Доступ к каталогу».
- Следуйте инструкциям на экране, чтобы оформить доступ к каталогу.
После регистрации Google Play начнет создавать экспорт в вашем хранилище Google Cloud.
Доступ к экспорту в Google Cloud Storage
Экспорт каталога приложений становится доступен в вашем личном хранилище Google Cloud Storage, связанном с вашей учетной записью App Store. Новый экспорт предоставляется как минимум ежедневно.
Вы можете получить доступ к экспортированным данным из Google Cloud Storage через браузер или программно с помощью gsutil . Также вы можете использовать другие инструменты для программного доступа к вашему хранилищу Cloud Storage.
Найдите URI вашего хранилища Google Cloud Storage.
Вы можете скопировать URI вашего хранилища Google Cloud Storage, нажав кнопку «Скопировать URI Google Cloud» на странице «Доступ к каталогу» в расширенных настройках. Эта кнопка станет доступна после регистрации учетной записи в системе «Доступ к каталогу».
URI вашего облачного хранилища обычно начинается с pubsite_prod_ .
Загрузка экспортированных файлов с помощью инструмента командной строки.
- Установите инструмент gsutil.
- Убедитесь, что вы авторизуете свою учетную запись, используя учетную запись, имеющую доступ к Play Console.
- В процессе настройки, если вы используете gsutil впервые и у вас нет других проектов, настроенных в Google Cloud Storage, вы можете ввести название своего магазина приложений, когда вам будет предложено указать идентификатор проекта.
- Найдите идентификатор вашего сегмента Google Cloud Storage.
- Используйте команду
gsutil cpдля загрузки экспортированных файлов.- Дополнительные команды для доступа к экспортируемым данным см. в документации gsutil .
Формат и структура файла
Файлы экспорта каталога приложений хранятся в следующей структуре:
gs://[your_bucket_id]/app_catalog_export_us/[your_app_store_package_name]/YYYY-MM-DD/[version_id]/data-[shard_number]-of-[total_shards]
-
YYYY-MM-DD: Дата экспорта каталога приложений. -
[version_id]: Уникальный идентификатор для ежедневного экспорта. Если для данного дня доступно несколько экспортов, то версия с наибольшим значениемversion_idбудет содержать самые последние данные. -
data-[shard_number]-of-[total_shards]: Экспорт является общим. Для получения полного каталога за этот день необходимо загрузить все сегменты для конкретногоversion_id.
Файлы содержат сериализованные сообщения протокола Protocol Buffer . Каждый сегмент содержит сообщение CatalogAppViews , которое, в свою очередь, содержит несколько записей CatalogAppView . Определение схемы данных описано в следующем разделе.
Схема данных
Каждая запись CatalogAppView содержит информацию о приложении:
edition = "2024";
// From https://github.com/googleapis/googleapis
import "google/protobuf/timestamp.proto";
import "google/type/date.proto";
import "google/type/money.proto";
option features.enforce_naming_style = STYLE_LEGACY;
// A view of a Google Play app within the Catalog Export for app stores.
message CatalogAppView {
// The package name of the app.
string package_name = 1;
// The developer details of the app.
DeveloperDetails developer_details = 10;
// Contact information for the app.
AppContactInformation app_contact_information = 13;
// The category of the app.
enum AppCategory {
// Unspecified category.
APP_CATEGORY_UNSPECIFIED = 0;
// Game app.
GAME = 1;
// General app.
APP = 2;
}
// The category of the app.
AppCategory app_category = 3;
// The subcategory of the app e.g. "GAME_ACTION".
string app_subcategory = 14;
// Whether the app has in-app purchases through Google Play.
bool has_in_app_purchases = 4;
// The localized store listings of the app which are shown on Google Play.
LocalizedStoreListings localized_store_listings = 5;
// The app may specify multiple sets of device compatibility requirements, and
// a device is considered compatible with the app if it satisfies at least one
// of `DeviceCompatibilityRequirements`.
repeated DeviceCompatibilityRequirements device_compatibility_requirements =
7;
// Required permissions declared by the app which apply for all Android SDK
// versions.
repeated Permission permissions = 15;
// Required permissions declared by the app which apply for Android SDK
// versions SDK 23 and above.
repeated Permission permissions_sdk_23 = 16;
// List of devices excluded from the app's distribution even if they are
// otherwise compatible with the requirements from
// device_compatibility_requirements. These are OR-ed, i.e. a device is
// excluded if it matches any of the identifiers.
repeated DeviceIdentifier excluded_devices_by_identifier = 9;
// List of devices excluded from the app's distribution even if they are
// otherwise compatible with the requirements from
// device_compatibility_requirements. A device is excluded if it matches any
// of given the selectors.
repeated DeviceSelector excluded_devices_by_selector = 20;
// Active versions of the app mapped from `android:versionName` manifest
// attributes.
repeated string active_version_names = 22;
// The URL of the app's privacy policy.
string privacy_policy_url = 11;
// Whether the app has ads.
bool has_in_app_ads = 12;
// Whether the app is targeted to an adult-only (18+) audience.
bool is_adult_only_audience = 17;
// The IARC certificate ID for the app.
string iarc_certificate_id = 18;
// The date when the app was first released.
google.type.Date first_release_date = 19;
// The price of the app in the United States.
// Empty if the app is free.
google.type.Money price_in_the_united_states = 23;
// The sale price of the app in the United States. Only populated for paid
// apps with an active US sale.
google.type.Money sale_price_in_the_united_states = 24;
// The token used for delivery of the app with the Google Play Inline Install
// API.
string delivery_token = 8;
// The timestamp when the app was last published.
google.protobuf.Timestamp last_publish_time = 21;
}
// Defines a set of device compatibility requirements for the app. A device
// must satisfy all of the requirements in a set to be considered compatible
// with the app.
message DeviceCompatibilityRequirements {
// Defines a range of SDK versions. A device is considered compatible if its
// SDK version falls within the min_sdk_version and max_sdk_version range.
message SdkVersion {
// The minimum SDK version required for the app (inclusive).
int64 min_sdk_version = 1;
// The maximum SDK version required for the app (inclusive).
int64 max_sdk_version = 2;
// The target SDK version for the app.
int64 target_sdk_version = 3;
}
// Defines a range of SDK versions that the app is compatible with.
SdkVersion sdk_version = 1;
// The system features that the app requires. A device must have all of the
// system features to be considered compatible with the app.
repeated string required_system_features = 2;
// List of required libraries as declared in the `uses-library` manifest tag.
repeated string required_software_libraries = 3;
// Specifies if the app requires a screen.
bool is_screen_required = 4;
// Required version of OpenGL ES.
int32 gl_es_version = 5;
// Represents all configurations marked as required by use of the
// uses-configuration manifest tag.
message UsesConfiguration {
// Whether or not the application requires a five-way navigation control.
bool requires_five_way_navigation = 1;
// Whether or not the application requires a hardware keyboard.
bool requires_hardware_keyboard = 2;
// The type of keyboard.
enum KeyboardType {
// Unspecified keyboard type.
KEYBOARD_TYPE_UNSPECIFIED = 0;
// Undefined keyboard type.
KEYBOARD_TYPE_UNDEFINED = 1;
// No keys keyboard.
KEYBOARD_TYPE_NO_KEYS = 2;
// Qwerty keyboard.
KEYBOARD_TYPE_QWERTY = 3;
// Twelve key keyboard.
KEYBOARD_TYPE_TWELVE_KEY = 4;
}
// The type of keyboard required.
KeyboardType required_keyboard_type = 3;
// The type of navigation.
enum NavigationType {
// Unspecified navigation type.
NAVIGATION_TYPE_UNSPECIFIED = 0;
// Undefined navigation type.
NAVIGATION_TYPE_UNDEFINED = 1;
// No navigation.
NAVIGATION_TYPE_NO_NAVIGATION = 2;
// Dpad navigation.
NAVIGATION_TYPE_DPAD = 3;
// Trackball navigation.
NAVIGATION_TYPE_TRACKBALL = 4;
// Wheel navigation.
NAVIGATION_TYPE_WHEEL = 5;
}
// The navigation device required.
NavigationType required_navigation_type = 4;
// The type of touchscreen.
enum TouchScreenType {
// Unspecified touchscreen type.
TOUCHSCREEN_TYPE_UNSPECIFIED = 0;
// Undefined touchscreen type.
TOUCHSCREEN_TYPE_UNDEFINED = 1;
// No touchscreen.
TOUCHSCREEN_TYPE_NO_TOUCHSCREEN = 2;
// Stylus touchscreen.
TOUCHSCREEN_TYPE_STYLUS = 3;
// Finger touchscreen.
TOUCHSCREEN_TYPE_FINGER = 4;
}
// The type of touchscreen required.
TouchScreenType required_touchscreen_type = 5;
}
// Lists all configurations marked as required by use of the
// `uses-configuration` manifest tag. Each instance of this proto represents a
// single `uses-configuration` entry. See
// http://developer.android.com/guide/topics/manifest/uses-configuration-element.html
repeated UsesConfiguration uses_configurations = 6;
// The screen size.
enum ScreenSize {
// Unspecified screen size.
SCREEN_SIZE_UNSPECIFIED = 0;
// Small screen size.
SCREEN_SIZE_SMALL = 1;
// Normal screen size.
SCREEN_SIZE_NORMAL = 2;
// Large screen size.
SCREEN_SIZE_LARGE = 3;
// Extra large screen size.
SCREEN_SIZE_EXTRA_LARGE = 4;
}
// Compatible screens as listed in the `compatible-screens` Manifest tag.
message CompatibleScreen {
// The screen size.
ScreenSize screen_size = 1;
// Screen density.
enum Density {
// Unspecified density.
DENSITY_UNSPECIFIED = 0;
// No density.
DENSITY_NODPI = 1;
// Low density.
DENSITY_LDPI = 2;
// Medium density.
DENSITY_MDPI = 3;
// TV density.
DENSITY_TVDPI = 4;
// High density.
DENSITY_HDPI = 5;
// 280 dpi.
DENSITY_280 = 6;
// Extra high density.
DENSITY_XHDPI = 7;
// 360 dpi.
DENSITY_360 = 8;
// 400 dpi.
DENSITY_400 = 9;
// 420 dpi.
DENSITY_420 = 10;
// Extra extra high density.
DENSITY_XXHDPI = 11;
// 560 dpi.
DENSITY_560 = 12;
// Extra extra extra high density.
DENSITY_XXXHDPI = 13;
}
// Screen density.
Density density = 2;
}
// Compatible screens as listed in the `compatible-screens` Manifest tag.
repeated CompatibleScreen compatible_screens = 7;
// Compatible screens as listed in the `supports-screens` Manifest tag.
repeated ScreenSize supported_screens = 8;
// Specifies the minimum smallest width required of the screen.
int64 requires_smallest_width_dp = 9;
// Supported gl textures as specified by the `supported-gl-texture` Manifest
// tag.
repeated string supported_gl_textures = 10;
// List of required ABIs (Application Binary Interface), e.g. `armeabi` or
// `x86`.
repeated string native_platforms = 11;
// Value of `android:use32BitAbi` flag retrieved from the Manifest.
// https://developer.android.com/reference/android/R.attr#use32bitAbi.
enum Use32BitAbi {
// Unspecified 32-bit ABI usage.
USE_32_BIT_ABI_UNSPECIFIED = 0;
// Value of use32BitAbi is set to "true".
USE_32_BIT_ABI_TRUE = 1;
// Value of use32BitAbi is not set or set to something other than "true".
USE_32_BIT_ABI_OTHER = 2;
}
// Value of `android:use32BitAbi` flag retrieved from the Manifest.
Use32BitAbi use_32_bit_abi = 12;
}
// A permission declared by an app.
message Permission {
// The `name` attribute indicating the permission name.
string name = 1;
// The `maxSdkVersion` attribute indicating up to which Android SDK version
// the permission is requested.
int32 max_sdk_version = 2;
}
// The developer details of a Google Play app.
message DeveloperDetails {
// The developer name of the app.
string developer_name = 1;
// The contact email of the developer.
string contact_email = 2;
// The physical address of the developer.
string address = 3;
// The phone number of the developer.
string phone_number = 4;
// The website of the developer.
string website = 5;
}
// Defines a device identifier for a device.
message DeviceIdentifier {
// The brand of the device.
string device_brand = 1;
// The model of the device.
string device_model = 2;
}
// Defines a device selector for a device.
// A device is considered matched if it matches any of given the selectors.
message DeviceSelector {
// Defines a RAM selector for a device.
message RamSelector {
// This will match any device that has less than or equal
// ram_mb_less_than_or_equal mb of RAM.
int64 ram_mb_less_than_or_equal = 1;
}
// Defines a RAM selector for a device.
RamSelector ram_selector = 1;
// Defines a SOC selector for a device. This will match any device whose SoC
// (System on Chip) matches all fields in the selector.
message SocSelector {
// The manufacturer of the SoC.
string soc_make = 1;
// The model of the SoC.
string soc_model = 2;
}
// The SOC selectors. A device matches the device selector if it matches
// any of the SOC selectors.
repeated SocSelector soc_selectors = 2;
// Selector for matching devices of a specific type.
enum DeviceTypeSelector {
// Unspecified device type selector.
DEVICE_TYPE_SELECTOR_UNSPECIFIED = 0;
// Android Go device type.
ANDROID_GO = 1;
}
// The device type selector.
DeviceTypeSelector device_type_selector = 3;
}
// Contact information for the app.
message AppContactInformation {
// The contact email for this app.
string contact_email = 1;
// The contact phone for this app.
string phone_number = 2;
// The contact website url for this app.
string website_url = 3;
}
// The localized store listings of an app.
message LocalizedStoreListings {
// A localized store listings of the app.
message LocalizedStoreListing {
// The BCP-47 language code for this localization.
string language_code = 1;
// The name of the app in this localization.
string app_name = 2;
// A short description of the app in this localization.
string short_description = 3;
// A longer description of the app in this localization.
string full_description = 4;
// The icon of the app.
ImageAsset icon = 5;
// The feature graphic of the app.
ImageAsset feature_graphic = 6;
// The video of the app.
VideoAsset video = 7;
// The phone screenshots of the app.
ScreenshotSet phone_screenshots = 8;
// The small tablet screenshots of the app.
ScreenshotSet tablet_small_screenshots = 9;
// The regular tablet screenshots of the app.
ScreenshotSet tablet_regular_screenshots = 10;
}
repeated LocalizedStoreListing localized_store_listings = 1;
// The default language code of the app. If a localized store listing is not
// available for a given language, assets from the default language are used
// instead.
string default_language_code = 2;
// An image asset.
message ImageAsset {
// The URL of the image asset.
string image_url = 1;
}
// A video asset.
message VideoAsset {
// The URL of the video asset.
string video_url = 1;
}
// A set of screenshots.
message ScreenshotSet {
// The image assets of the screenshots.
repeated ImageAsset screenshots = 1;
}
}
// A collection of CatalogAppViews.
message CatalogAppViews {
// The list of catalog app views.
repeated CatalogAppView catalog_app_views = 1;
}
Использование токена доставки
Этот токен необходимо использовать при интеграции с функцией встроенной установки приложений из Google Play . Токен уникален для каждого приложения Play и для каждой комбинации стороннего магазина приложений и имеет ограниченный срок действия в 7 дней.