Скачать каталог приложений Экспорт

Для включения и загрузки экспорта каталога приложений вы можете использовать Play Console для магазинов приложений. Предварительным условием для этого является участие в программе Play Catalog Access. Этот экспорт предоставляет ежедневный снимок приложений в Google Play, которые соответствуют требованиям и согласились быть включенными в ваш каталог сторонних магазинов приложений.

Включить экспорт каталога приложений

Чтобы начать получать экспорт из каталога приложений, необходимо зарегистрироваться в Play Console для магазинов приложений:

  1. Открытая игровая консоль для магазинов приложений
  2. Перейдите на страницу «Расширенные настройки» .
  3. Найдите раздел «Доступ к каталогу».
  4. Следуйте инструкциям на экране, чтобы оформить доступ к каталогу.

После регистрации 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_ .

Загрузка экспортированных файлов с помощью инструмента командной строки.

  1. Установите инструмент gsutil.
    • Убедитесь, что вы авторизуете свою учетную запись, используя учетную запись, имеющую доступ к Play Console.
    • В процессе настройки, если вы используете gsutil впервые и у вас нет других проектов, настроенных в Google Cloud Storage, вы можете ввести название своего магазина приложений, когда вам будет предложено указать идентификатор проекта.
  2. Найдите идентификатор вашего сегмента Google Cloud Storage.
  3. Используйте команду 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 дней.