Omówienie Play Feature Delivery

Model wyświetlania aplikacji w Google Play wykorzystuje pakiety aplikacji na Androida do generowania i udostępniania zoptymalizowanych plików APK dla konfiguracji urządzenia każdego użytkownika. Dzięki temu użytkownicy pobierają tylko kod i zasoby niezbędne do uruchomienia aplikacji.

Play Feature Delivery wykorzystuje zaawansowane możliwości pakietów aplikacji, co pozwala na dostarczanie niektórych funkcji aplikacji warunkowo lub na żądanie. W tym celu musisz najpierw rozdzielić te funkcje od aplikacji podstawowej na moduły funkcji.

Konfiguracja kompilacji modułu funkcji

Gdy tworzysz nowy moduł funkcji za pomocą Android Studio, IDE stosuje poniższą wtyczkę Gradle do pliku build.gradle modułu.

// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.

plugins {
  id 'com.android.dynamic-feature'
}

Wiele właściwości dostępnych w przypadku standardowej wtyczki aplikacji jest też dostępnych dla modułu funkcji. W poniższych sekcjach opisano właściwości, które należy uwzględnić w konfiguracji kompilacji modułu funkcji.

Czego nie należy uwzględnić w konfiguracji kompilacji modułu funkcji

Każdy moduł funkcji jest zależny od modułu podstawowego, więc dziedziczy też określone konfiguracje. Dlatego w pliku build.gradle modułu funkcji pomiń te fragmenty:

  • Konfiguracje podpisywania: pakiety aplikacji są podpisywane przy użyciu konfiguracji podpisywania określonych w module podstawowym.
  • Właściwość minifyEnabled: możesz włączyć zmniejszanie kodu dla całego projektu aplikacji tylko z poziomu konfiguracji kompilacji modułu podstawowego. Dlatego należy pominąć tę właściwość w modułach funkcji. Dla każdego modułu funkcji możesz jednak określić dodatkowe reguły ProGuard.
  • versionCode i versionName: podczas tworzenia pakietu aplikacji Gradle używa informacji o wersji aplikacji dostarczonych przez moduł podstawowy. Pomiń te właściwości w pliku build.gradle modułu funkcji.

Utwórz relację z modułem podstawowym

Gdy Android Studio tworzy moduł funkcji, staje się on widoczny dla modułu podstawowego, dodając właściwość android.dynamicFeatures do pliku build.gradle modułu podstawowego, jak pokazano poniżej:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

Dodatkowo Android Studio zawiera moduł podstawowy jako zależność modułu funkcji, jak widać poniżej:

// In the feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}

Określ dodatkowe reguły ProGuard

Chociaż tylko konfiguracja kompilacji modułu podstawowego może powodować zmniejszanie kodu w projekcie aplikacji, możesz udostępnić niestandardowe reguły ProGuard każdemu modułowi funkcji za pomocą właściwości proguardFiles, jak pokazano poniżej.

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}

Zwróć uwagę, że te reguły ProGuard są scalane z regułami z innych modułów (w tym z modułu podstawowego) w czasie kompilacji. Choć każdy moduł funkcji może określać nowy zestaw reguł, reguły te mają zastosowanie do wszystkich modułów w projekcie aplikacji.

Wdrażanie aplikacji

Podczas tworzenia aplikacji z obsługą modułów funkcji możesz wdrożyć ją na połączonym urządzeniu w normalny sposób, wybierając Uruchom > Uruchom na pasku menu (lub klikając Uruchom na pasku narzędzi).

Jeśli projekt aplikacji zawiera co najmniej 1 moduł funkcji, możesz wybrać funkcje do uwzględnienia przy wdrażaniu aplikacji, modyfikując istniejącą konfigurację uruchamiania/debugowania w ten sposób:

  1. Na pasku menu kliknij Uruchom > Edytuj konfiguracje.
  2. W panelu po lewej stronie okna Uruchamianie/debugowanie konfiguracji wybierz odpowiednią konfigurację aplikacji na Androida.
  3. W sekcji Dynamic features to deploy (Funkcje dynamiczne do wdrożenia) na karcie General (Ogólne) zaznacz pole obok każdego modułu funkcji, który chcesz uwzględnić podczas wdrażania aplikacji.
  4. Kliknij OK.

Domyślnie Android Studio nie wdraża Twojej aplikacji przy użyciu pakietów aplikacji. Zamiast tego IDE tworzy i instaluje na Twoim urządzeniu pliki APK zoptymalizowane pod kątem szybkości wdrażania, a nie rozmiaru pliku APK. Aby zamiast tego skonfigurować Android Studio do kompilowania i wdrażania plików APK i aplikacji błyskawicznych z pakietu aplikacji, zmień konfigurację uruchamiania/debugowania.

Używanie modułów funkcji do niestandardowego przesyłania

Wyjątkową zaletą modułów funkcji jest możliwość dostosowania sposobu i czasu pobierania różnych funkcji aplikacji na urządzenia z Androidem 5.0 (poziom interfejsu API 21) lub nowszym. Aby np. zmniejszyć początkowy rozmiar pobieranej aplikacji, możesz skonfigurować niektóre funkcje tak, aby pobierały ją w razie potrzeby na żądanie lub tylko na urządzeniach obsługujących określone funkcje, takie jak możliwość robienia zdjęć czy obsługi funkcji rzeczywistości rozszerzonej.

Choć podczas przesyłania aplikacji w pakiecie aplikacji domyślnie uzyskujesz bardzo zoptymalizowane pobieranie funkcji, bardziej zaawansowane i konfigurowalne opcje dostarczania funkcji wymagają dodatkowej konfiguracji i modularyzacji funkcji za pomocą modułów funkcji. Oznacza to, że moduły funkcji są elementami składowymi funkcji modułowych, które można skonfigurować do pobrania zależnie od potrzeb.

Rozważmy aplikację, która umożliwia użytkownikom kupowanie i sprzedawanie towarów na platformie handlowej online. Każdą z tych funkcji aplikacji możesz w rozsądny sposób podzielić na osobne moduły:

  • Logowanie się i tworzenie konta
  • Przeglądanie Marketplace
  • Umieszczanie produktu na sprzedaż
  • Przetwarzanie płatności

W tabeli poniżej opisujemy różne opcje dostarczania obsługiwane przez moduły oraz sposoby ich wykorzystania do optymalizacji początkowego rozmiaru pobierania przykładowej aplikacji z Marketplace.

Opcja dostawy Działanie Przykładowy przypadek użycia Wprowadzenie
Dostawa podczas instalacji Moduły funkcji, które nie korzystają z żadnej z opisanych powyżej opcji dostarczania, są domyślnie pobierane podczas instalowania aplikacji. Jest to ważne zachowanie, ponieważ oznacza, że możesz stopniowo wdrażać zaawansowane opcje wyświetlania. Na przykład modularyzacja funkcji aplikacji i włączenie dostawy na żądanie może być korzystne dopiero po pełnym wdrożeniu funkcji pobierania na żądanie za pomocą biblioteki Play Feature Delivery.

Aplikacja może też później poprosić o odinstalowanie funkcji. Jeśli więc podczas instalowania aplikacji potrzebujesz określonych funkcji, ale nie chcesz ich potem, możesz zmniejszyć rozmiar instalacji, wysyłając prośbę o ich usunięcie z urządzenia.

Jeśli aplikacja zawiera określone działania szkoleniowe, na przykład interaktywny przewodnik na temat kupowania i sprzedawania produktów na platformie handlowej, możesz domyślnie uwzględnić tę funkcję podczas instalowania aplikacji.

Jednak w celu zmniejszenia rozmiaru zainstalowanej aplikacji może ona poprosić o usunięcie tej funkcji po zakończeniu trenowania przez użytkownika.

Zmodyfikuj swoją aplikację za pomocą modułów funkcji, które nie konfigurować zaawansowanych opcji dostarczania.

Aby dowiedzieć się, jak zmniejszyć rozmiar zainstalowanej aplikacji przez usunięcie określonych modułów funkcji, których użytkownik może już nie potrzebować, przeczytaj artykuł Zarządzanie zainstalowanymi modułami.

Dostawa na żądanie Zezwala aplikacji na wysyłanie próśb o moduły funkcji i ich pobieranie w razie potrzeby. Jeśli tylko 20% użytkowników aplikacji z platformy handlowej publikuje produkty na sprzedaż, dobrą strategią zmniejszania początkowego rozmiaru pliku do pobrania w przypadku większości użytkowników jest udostępnienie funkcji robienia zdjęć (w tym opisu produktu i udostępnienia produktu do sprzedaży w wersji do pobrania na żądanie). Oznacza to, że możesz skonfigurować moduł funkcji tak, aby funkcje sprzedaży aplikacji były pobierane tylko wtedy, gdy użytkownik wykaże zainteresowanie sprzedażą produktów na platformie handlowej.

Jeśli po pewnym czasie użytkownik przestanie sprzedawać produkty, aplikacja może zmniejszyć rozmiar zainstalowanej aplikacji, prosząc o jej odinstalowanie.

Utwórz moduł funkcji i skonfiguruj wyświetlanie na żądanie. Aplikacja może następnie użyć biblioteki Play Feature Delivery, aby poprosić o pobranie modułu na żądanie.
Wyświetlanie warunkowe Umożliwia określenie wymagań dotyczących urządzenia użytkownika, takich jak funkcje sprzętowe, ustawienia regionalne i minimalny poziom interfejsu API. Pozwala to określić, czy funkcja modułowa ma być pobierana podczas instalowania aplikacji. Jeśli aplikacja z Marketplace ma zasięg globalny, może być konieczne obsługę form płatności, które są popularne tylko w niektórych regionach lub lokalnych. Aby zmniejszyć początkowy rozmiar pobieranej aplikacji, możesz utworzyć osobne moduły funkcji do przetwarzania określonych rodzajów form płatności i zainstalować je warunkowo na urządzeniu użytkownika w zależności od zarejestrowanego języka. Utwórz moduł funkcji i skonfiguruj dostarczanie warunkowe.
Natychmiastowe wyświetlanie Aplikacja błyskawiczna w Google Play umożliwia użytkownikom korzystanie z Twojej aplikacji bez konieczności jej instalowania na urządzeniu. Zamiast tego mogą ją sprawdzić, klikając przycisk „Wypróbuj” w Sklepie Google Play lub utworzony przez Ciebie adres URL. Ta forma dostarczania treści ułatwia zwiększanie zaangażowania użytkowników w aplikację.

W przypadku tej opcji możesz użyć aplikacji błyskawicznej w Google Play, aby umożliwić użytkownikom natychmiastowe korzystanie z określonych funkcji Twojej aplikacji bez jej instalacji.

Rozważmy grę, która ma kilka pierwszych poziomów w uproszczonym module funkcji. Możesz włączyć ten moduł błyskawiczny, aby użytkownicy mogli od razu rozpocząć grę po kliknięciu linku URL lub przycisku „Wypróbuj teraz” bez konieczności instalowania aplikacji. Utwórz moduł funkcji i skonfiguruj szybkie dostarczanie. Aplikacja może następnie użyć biblioteki Play Feature Delivery, aby poprosić o pobranie modułu na żądanie.

Pamiętaj, że modułowe traktowanie funkcji aplikacji za pomocą modułów funkcji to dopiero pierwszy krok. Aby można było obsługiwać aplikację błyskawiczną w Google Play, rozmiar pobieranego modułu podstawowego aplikacji i danej funkcji obsługującej aplikacje błyskawiczne musi spełniać rygorystyczne ograniczenia. Więcej informacji znajdziesz w artykule Włączanie aplikacji błyskawicznych przez zmniejszenie rozmiaru aplikacji lub gry.

Kompilowanie identyfikatora URI dla zasobu

Jeśli chcesz uzyskać dostęp do zasobu zapisanego w module funkcji przy użyciu identyfikatora URI, wykonaj poniższe czynności, aby wygenerować identyfikator URI zasobu modułu funkcji za pomocą metody Uri.Builder():

Kotlin

val uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build()

Java

String uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build().toString();

Każda część ścieżki do zasobu jest tworzona w czasie działania, dzięki czemu po wczytaniu podzielonych pakietów APK zostanie wygenerowana prawidłowa przestrzeń nazw.

Przykładem generowania identyfikatora URI jest założenie, że masz moduły aplikacji i funkcji o tych nazwach:

  • Nazwa pakietu aplikacji: com.example.my_app_package
  • Nazwa pakietu zasobów funkcji: com.example.my_app_package.my_dynamic_feature

Jeśli resId w powyższym fragmencie kodu odnosi się do zasobu nieprzetworzonego pliku o nazwie „my_video” w module funkcji, kod Uri.Builder() powyżej zwróci następujący kod:

android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video

Aplikacja może następnie używać tego identyfikatora URI, aby uzyskać dostęp do zasobu modułu funkcji.

Aby sprawdzić ścieżki w identyfikatorze URI, możesz użyć Analizatora plików APK do sprawdzenia pliku APK modułu funkcji i określenia jego nazwy:

Zrzut ekranu przedstawiający Analizator plików APK sprawdzający zawartość skompilowanego pliku zasobów.

Rysunek 2. Użyj Analizatora plików APK, aby sprawdzić nazwę pakietu w skompilowanym pliku zasobów.

Uwagi na temat modułów funkcji

Dzięki modułom funkcji możesz zwiększyć szybkość kompilacji i tempo pracy programistów, a także znacznie dostosować dostarczanie funkcji aplikacji tak, aby zmniejszyć jej rozmiar. Podczas korzystania z modułów funkcji musisz jednak pamiętać o pewnych ograniczeniach i przypadkach skrajnych:

  • Instalacja co najmniej 50 modułów funkcji na jednym urządzeniu w sposób warunkowy lub na żądanie może spowodować problemy z wydajnością. Moduły czasu instalacji, które nie są usuwane, są automatycznie umieszczane w module podstawowym i liczone jako jeden moduł funkcji na każdym urządzeniu.
  • Ogranicz do maksymalnie 10 modułów, które można usunąć na potrzeby dostarczania podczas instalacji. W przeciwnym razie czas pobierania i instalowania aplikacji może się wydłużyć.
  • Pobieranie i instalowanie funkcji na żądanie jest obsługiwane tylko na urządzeniach z Androidem 5.0 (poziom interfejsu API 21) lub nowszym. Aby udostępnić daną funkcję we wcześniejszych wersjach Androida, podczas tworzenia modułu funkcji włącz opcję Fusing.
  • Włącz SplitCompat, aby aplikacja miała dostęp do pobranych modułów funkcji, które są dostarczane na żądanie.
  • Moduły funkcji nie powinny określać działań w pliku manifestu z parametrem android:exported ustawionym na true. Dzieje się tak, ponieważ nie ma gwarancji, że urządzenie pobierze moduł funkcji, gdy inna aplikacja spróbuje uruchomić aktywność. Dodatkowo przed próbą uzyskania dostępu do kodu i zasobów aplikacji upewnij się, że funkcja została pobrana. Więcej informacji znajdziesz w artykule Zarządzanie zainstalowanymi modułami.
  • Play Feature Delivery wymaga opublikowania aplikacji za pomocą pakietu aplikacji, dlatego najpierw zapoznaj się ze znanymi problemami z takimi pakietami.

Odwołanie do pliku manifestu modułu funkcji

Gdy tworzysz nowy moduł funkcji w Android Studio, IDE zawiera większość atrybutów w pliku manifestu, które są niezbędne, aby moduł działał jak moduł funkcji. Dodatkowo niektóre atrybuty są wstrzykiwane przez system kompilacji podczas kompilowania, więc nie trzeba ich samodzielnie określać ani modyfikować. W tabeli poniżej opisujemy atrybuty pliku manifestu, które są ważne dla modułów funkcji.

Atrybut Opis
<manifest
...
To typowy blok <manifest>.
xmlns:dist="http://schemas.android.com/apk/distribution" Określa nową przestrzeń nazw XML w dist:, która została opisana poniżej.
split="split_name" Ten atrybut pojawia się za Ciebie, gdy Android Studio podczas tworzenia pakietu aplikacji uwzględnia ten atrybut. Dlatego nie należy samodzielnie dodawać ani modyfikować tego atrybutu.

Określa nazwę modułu, którą aplikacja określa, gdy wysyła żądanie modułu na żądanie za pomocą biblioteki Play Feature Delivery.

Jak Gradle określa wartość tego atrybutu:

Domyślnie, gdy tworzysz moduł funkcji w Android Studio, IDE używa podanej przez Ciebie nazwy modułu do identyfikowania modułu jako podprojektu Gradle w pliku ustawień Gradle.

Gdy tworzysz pakiet aplikacji, Gradle używa ostatniego elementu ścieżki podprojektu, aby wstrzyknąć ten atrybut pliku manifestu w pliku manifestu modułu. Jeśli na przykład utworzysz nowy moduł funkcji w katalogu MyAppProject/features/ i podasz „dynamic_feature1” jako nazwę modułu, IDE doda ':features:dynamic_feature1' jako podprojekt w pliku settings.gradle. Podczas tworzenia pakietu aplikacji Gradle wstawia <manifest split="dynamic_feature1"> w pliku manifestu modułu.

android:isFeatureSplit="true | false"> Ten atrybut pojawia się za Ciebie, gdy Android Studio podczas tworzenia pakietu aplikacji uwzględnia ten atrybut. Dlatego nie należy dodawać ani modyfikować tego atrybutu ręcznie.

Określa, że ten moduł jest modułem funkcji. Pliki manifestu w module podstawowym i plikach APK konfiguracji pomijają ten atrybut lub ustaw go na false.

<dist:module Ten nowy element XML definiuje atrybuty określające sposób pakietu i dystrybucji modułu jako pliki APK.
dist:instant="true | false" Określa, czy moduł ma być dostępny w ramach aplikacji błyskawicznej w Google Play.

Jeśli Twoja aplikacja zawiera co najmniej 1 moduł funkcji z obsługą wersji błyskawicznej, musisz też włączyć błyskawiczny moduł podstawowy. Jeśli korzystasz z Androida Studio w wersji 3.5 lub nowszej, IDE zrobi to za Ciebie, gdy utworzysz moduł funkcji obsługujący aplikacje błyskawiczne.

Nie możesz ustawić tego elementu XML jako true przy jednoczesnym ustawieniu <dist:on-demand/>. Nadal możesz jednak wysyłać na żądanie prośby o pobranie modułów funkcji z obsługą wersji błyskawicznej jako aplikacje błyskawiczne, korzystając z biblioteki Play Feature Delivery. Gdy użytkownik pobierze i zainstaluje Twoją aplikację, urządzenie domyślnie pobierze i zainstaluje moduły funkcji z obsługą wersji błyskawicznej oraz podstawowy plik APK.

dist:title="@string/feature_name" Określa tytuł modułu, który będzie widoczny dla użytkowników. Urządzenie może na przykład wyświetlić ten tytuł, gdy poprosi o potwierdzenie pobrania.

Zasób w postaci ciągu znaków dla tego tytułu musisz umieścić w pliku module_root/src/source_set/res/values/strings.xml modułu podstawowego.

<dist:fusing dist:include="true | false" />
</dist:module>
Określa, czy moduł ma być uwzględniany w wielu plikach APK przeznaczonych na urządzenia z Androidem 4.4 (poziom interfejsu API 20) lub starszym.

Poza tym, jeśli używasz bundletool do generowania plików APK z pakietu aplikacji, w uniwersalnym pliku APK będą uwzględnione tylko te moduły funkcji, które mają ustawioną właściwość true. Jest to monolityczny plik APK, który zawiera kod i zasoby przeznaczone dla wszystkich konfiguracji urządzeń obsługiwanych przez Twoją aplikację.

<dist:delivery> Zawiera opcje, które dostosowują przesyłanie modułu, jak pokazano poniżej. Pamiętaj, że w każdym module funkcji może być skonfigurowany tylko jeden typ niestandardowych opcji dostarczania.
<dist:install-time> Określa, że moduł powinien być dostępny w momencie instalacji. Jest to domyślne działanie w przypadku modułów cech, które nie określają innego typu niestandardowych opcji dostarczania.

Więcej informacji o pobieraniu w czasie instalacji znajdziesz w artykule Konfigurowanie dostarczania w czasie instalacji.

Ten węzeł może też określać warunki ograniczające moduł do urządzeń spełniających określone wymagania, takich jak funkcje urządzenia, kraj użytkownika czy minimalny poziom interfejsu API. Więcej informacji znajdziesz w artykule Konfigurowanie dostarczania warunkowego.

<dist:removable dist:value="true | false" />

Jeśli zasada jest nieskonfigurowana lub ma wartość false, narzędzie łączy moduły czasu instalacji z modułem podstawowym podczas generowania dzielonych plików APK z pakietu. Ze względu na łączenie plików APK liczba dzielonych pakietów APK będzie mniejsza w wyniku scalania, więc to ustawienie może poprawić wydajność aplikacji.

Jeśli zasada removable ma wartość true: moduły czasu instalacji nie są połączone z modułem podstawowym. Ustaw wartość true, jeśli chcesz w przyszłości odinstalowywać moduły. Jednak skonfigurowanie zbyt wielu modułów, które będzie można usunąć, może wydłużyć czas instalacji.

Domyślna wartość to false. Ustawienie tej wartości w pliku manifestu jest konieczne tylko wtedy, gdy chcesz wyłączyć fusing dla modułu funkcji.

Uwaga: ta funkcja jest dostępna tylko wtedy, gdy używasz wtyczki Androida do obsługi Gradle w wersji 4.2 lub narzędzia pakietu w wersji 1.0 z poziomu wiersza poleceń.

</dist:install-time>  
<dist:on-demand/> Określa, że moduł powinien być dostępny do pobrania na żądanie. Oznacza to, że moduł nie jest dostępny w momencie instalacji, ale aplikacja może poprosić o jego pobranie później.

Więcej informacji o pobieraniu na żądanie znajdziesz w artykule Konfigurowanie wyświetlania na żądanie.

</dist:delivery>
<application
android:hasCode="true | false">
...
</application>
Jeśli moduł funkcji nie generuje plików DEX, czyli nie zawiera kodu, który został później skompilowany do formatu pliku DEX, musisz wykonać te czynności (w przeciwnym razie podczas działania mogą wystąpić błędy):
  1. Ustaw android:hasCode na "false" w pliku manifestu modułu funkcji.
  2. Dodaj ten kod do pliku manifestu modułu base:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
    

Dodatkowe materiały

Więcej informacji o korzystaniu z modułów funkcji znajdziesz w tych materiałach.

Posty na blogu

Filmy

Warunki korzystania z usługi i bezpieczeństwo danych

Otwierając bibliotekę Play Feature Delivery lub korzystając z niej, akceptujesz Warunki korzystania z zestawu Play Core Software Development Kit. Przed uzyskaniem dostępu do biblioteki zapoznaj się ze wszystkimi warunkami i zasadami.

Bezpieczeństwo danych

Biblioteki podstawowe Play to interfejs środowiska wykonawczego aplikacji ze Sklepem Google Play. Dlatego gdy używasz w aplikacji środowiska Play Core, Sklep Play ma własne procesy, które obejmują przetwarzanie danych zgodnie z Warunkami korzystania z usługi Google Play. Poniżej opisujemy, jak biblioteki podstawowe Google Play przetwarzają dane w celu przetwarzania określonych żądań z Twojej aplikacji.

Interfejs API dodatkowych języków

Dane zbierane w związku z użytkowaniem Lista zainstalowanych języków
Cel zbierania danych Zebrane dane służą do dostarczania różnych wersji językowych aplikacji i zachowywania zainstalowanych języków po jej aktualizowaniu.
Szyfrowanie danych Dane są zaszyfrowane.
Udostępnianie danych Dane nie są przekazywane osobom trzecim.
Usuwanie danych Dane są usuwane po ustalonym okresie przechowywania.

Play Feature Delivery

Dane zbierane w związku z użytkowaniem Metadane urządzenia
Wersja aplikacji
Cel zbierania danych Zebrane dane służą do udostępniania na urządzeniu odpowiedniego modułu i zachowywania zainstalowanych modułów po aktualizacji, kopii zapasowej i przywróceniu.
Szyfrowanie danych Dane są zaszyfrowane.
Udostępnianie danych Dane nie są przekazywane osobom trzecim.
Usuwanie danych Dane są usuwane po ustalonym okresie przechowywania.

Staramy się, aby informacje były jak najbardziej przejrzyste, ale to Ty decydujesz, jak odpowiedzieć w formularzu sekcji Bezpieczeństwo danych w Google Play w sprawie zbierania, udostępniania i zabezpieczania danych użytkowników przez Twoją aplikację.