W Konsoli Play dla sklepów z aplikacjami możesz włączyć i pobrać eksport katalogu aplikacji. Wymaganiem wstępnym jest rejestracja w programie Dostęp do katalogu Google Play. Ten eksport zawiera codzienny zrzut aplikacji w Google Play, które kwalifikują się do uwzględnienia w katalogu sklepu z aplikacjami innej firmy i zostały w nim uwzględnione.
Włączanie eksportu katalogu aplikacji
Aby zacząć otrzymywać eksport katalogu aplikacji, musisz zarejestrować się w Konsoli Play dla sklepów z aplikacjami:
- Otwórz Konsolę Play dla sklepów z aplikacjami
- Otwórz stronę Ustawienia zaawansowane.
- Znajdź sekcję Dostęp do katalogu.
- Aby zarejestrować się w programie Dostęp do katalogu, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.
Po zarejestrowaniu się Google Play zacznie generować eksport w zasobniku Google Cloud Storage.
Dostęp do eksportu w Google Cloud Storage
Eksporty katalogu aplikacji są udostępniane w prywatnym zasobniku Google Cloud Storage powiązanym z Twoim kontem w App Store. Nowy eksport jest udostępniany co najmniej raz dziennie.
Możesz uzyskać dostęp do wyeksportowanych danych w Google Cloud Storage, używając przeglądarki lub automatycznie przy użyciu narzędzia gsutil. Możesz też użyć innych narzędzi, by uzyskać automatyczny dostęp do swojego zasobnika Cloud Storage.
Znajdowanie identyfikatora URI obiektu w Google Cloud Storage
Możesz skopiować identyfikator URI obiektu w Google Cloud Storage, klikając przycisk Skopiuj identyfikator URI obiektu w Google Cloud na stronie Dostęp do katalogu w sekcji Ustawienia zaawansowane. Przycisk jest dostępny po zarejestrowaniu konta w programie Dostęp do katalogu.
Identyfikator URI obiektu w Cloud Storage zwykle zaczyna się od pubsite_prod_.
Pobieranie wyeksportowanych plików za pomocą narzędzia wiersza poleceń
- Zainstaluj narzędzie gsutil.
- Pamiętaj, aby uwierzytelnić swoje konto przy użyciu konta, które ma dostęp do Konsoli Play.
- Jeśli używasz narzędzia gsutil po raz pierwszy i nie masz żadnych innych projektów skonfigurowanych w Google Cloud Storage, to gdy podczas konfiguracji pojawi się prośba o podanie identyfikatora projektu, możesz wpisać nazwę sklepu z aplikacjami.
- Znajdowanie identyfikatora zasobnika Google Cloud Storage
- Użyj polecenia
gsutil cp, aby pobrać eksporty.- Dodatkowe polecenia ułatwiające dostęp do eksportów znajdziesz w dokumentacji narzędzia gsutil.
Format i struktura pliku
Pliki eksportu katalogu aplikacji są przechowywane w tej strukturze:
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: data eksportu katalogu aplikacji.[version_id]: unikalny identyfikator eksportu dziennego. Jeśli w danym dniu dostępnych jest kilka eksportów, najwyższy numerversion_idbędzie zawierał najnowsze dane.data-[shard_number]-of-[total_shards]: eksport jest udostępniony. Aby uzyskać pełny katalog na dany dzień, musisz pobrać wszystkie fragmenty dla konkretnegoversion_id.
Pliki zawierają serializowane wiadomości bufora protokołu. Każdy fragment zawiera CatalogAppViews wiadomość, która z kolei zawiera wiele CatalogAppView rekordów. Definicja schematu danych jest opisana w sekcji poniżej.
Schemat danych
Każdy rekord CatalogAppView zawiera informacje o aplikacji:
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;
}
Używanie tokena dostawy
Ten token musi być używany podczas integracji z instalacją bezpośrednią w Google Play. Token jest niepowtarzalny dla każdej kombinacji aplikacji w Google Play i sklepu z aplikacjami innej firmy. Ma ograniczony okres ważności wynoszący 7 dni.