Licencje w Google Play to usługa sieciowa, która umożliwia aplikacji wysyłanie zapytań do zaufanego serwera licencji Google Play, aby określić, czy aplikacja jest licencjonowana dla bieżącego użytkownika urządzenia. Usługa licencjonowania opiera się na tym, czy serwer licencjonowania Google Play określa, czy dany użytkownik ma licencję na korzystanie z danej aplikacji. Google Play uznaje użytkownika za licencję, jeśli został on nabywcą aplikacji.
Żądanie rozpoczyna się, gdy aplikacja wysyła żądanie do usługi hostowanej przez aplikację kliencką Google Play. Następnie aplikacja Google Play wysyła żądanie do serwera licencji i otrzymuje wynik. Aplikacja Google Play wysyła wynik do Twojej aplikacji, co może zezwolić na dalsze jej używanie lub zablokować tę możliwość.
Uwaga:Jeśli dana wersja aplikacji znajduje się w ścieżce testów zamkniętych lub otwartych, wszyscy użytkownicy, którzy mają uprawnienia do jej pobrania i instalowania, są uznawani za użytkowników z licencją. Więcej informacji znajdziesz w artykule Korzystaj ze ścieżek testów, aby zbierać cenne opinie użytkowników na wczesnym etapie.
![](https://developer.android.com/static/images/google/play/licensing/licensing_arch.png?hl=pl)
Rysunek 1. Aplikacja inicjuje sprawdzanie licencji przez Bibliotekę weryfikacji licencji i klienta Google Play, który obsługuje komunikację z serwerem Google Play.
Uwaga: wcześniej można było testować aplikację, przesyłając nieopublikowaną wersję roboczą. Ta funkcja nie jest już obsługiwana. Zamiast tego musisz opublikować ją na ścieżce testu zamkniętego lub otwartego. Więcej informacji znajdziesz w artykule Wersje robocze aplikacji nie są już obsługiwane.
Aby prawidłowo zidentyfikować użytkownika i określić stan licencji, serwer licencjonowania wymaga informacji o aplikacji i użytkowniku. Aplikacja i klient Google Play wspólnie gromadzą te dane, a klient Google Play przekazuje je na serwer.
Aby ułatwić dodanie licencjonowania do aplikacji, pakiet Android SDK udostępnia do pobrania zestaw źródeł bibliotek, które można pobrać w projekcie aplikacji: pakiet licencji Google Market. Biblioteka weryfikacji licencji (LVL) to biblioteka, którą możesz dodać do swojej aplikacji, aby obsługiwać całą komunikację dotyczącą licencjonowania z usługą licencjonowania Google Play. Gdy do aplikacji zostanie dodany LVL, może ona określić stan licencji bieżącego użytkownika. W tym celu wystarczy wywołać metodę i zaimplementować wywołanie zwrotne, które otrzyma odpowiedź o stanie.
Aplikacja nie wysyła bezpośrednio zapytania do serwera licencjonowania, ale wywołuje klienta Google Play przez zdalny adres IPC, aby zainicjować żądanie licencji. W prośbie o licencję:
- Twoja aplikacja udostępnia: nazwę pakietu, liczbę jednorazową, która jest później używana do weryfikacji dowolnej odpowiedzi serwera oraz wywołanie zwrotne, za pomocą którego odpowiedź może zostać zwrócona asynchronicznie.
- Klient Google Play zbiera niezbędne informacje o użytkowniku i urządzeniu, takie jak nazwa jego podstawowego konta Google czy numer IMSI. Następnie w imieniu Twojej aplikacji wysyła do serwera żądanie sprawdzenia licencji.
- Serwer Google Play rozpatruje żądanie na podstawie wszystkich dostępnych informacji, próbując ustalić tożsamość użytkownika w wystarczającym stopniu. Serwer porównuje tożsamość użytkownika z rekordami zakupu aplikacji i zwraca odpowiedź licencji, którą klient Google Play zwraca do aplikacji przez wywołanie zwrotne IPC.
Możesz wybrać, kiedy i jak często aplikacja ma sprawdzać swoją licencję. Masz też pełną kontrolę nad sposobem obsługi odpowiedzi, weryfikowania danych podpisanych odpowiedzi oraz wymuszania kontroli dostępu.
Zwróć uwagę, że podczas sprawdzania licencji aplikacja nie zarządza żadnymi połączeniami sieciowymi ani nie korzysta z interfejsów API związanych z licencjonowaniem na platformie Androida.
Odpowiedzi dotyczące licencji są bezpieczne
Aby zapewnić integralność każdego zapytania dotyczącego licencji, serwer podpisuje dane odpowiedzi licencji za pomocą pary kluczy RSA, która jest udostępniana wyłącznie między serwerem Google Play a Tobą.
Usługa licencjonowania generuje jedną parę kluczy licencyjnych dla każdej aplikacji i udostępni klucz publiczny na stronie Usługi i interfejsy API w Konsoli Play. Musisz skopiować klucz publiczny z Konsoli Play i umieścić go w kodzie źródłowym aplikacji. Serwer przechowuje klucz prywatny wewnętrznie i używa go do podpisywania odpowiedzi na pytania dotyczące licencji na aplikacje publikowane przy użyciu danego konta.
Gdy aplikacja otrzyma podpisaną odpowiedź, do weryfikacji danych używa osadzonego klucza publicznego. Wykorzystanie kryptografii klucza publicznego w usłudze licencjonowania umożliwia aplikacji wykrywanie odpowiedzi, które zostały zmodyfikowane lub zostały sfałszowane.
Biblioteka weryfikacji licencjonowania
Pakiet Android SDK zawiera pakiet licencji Google Market, który można pobrać z Google Market. Zawiera on bibliotekę weryfikacji licencji (LVL). LVL znacznie upraszcza proces dodawania licencji do aplikacji oraz zapewnia bezpieczniejsze i bardziej niezawodne wdrożenie. LVL udostępnia klasy wewnętrzne, które obsługują większość standardowych operacji dotyczących zapytań dotyczących licencji, takich jak kontaktowanie się z klientem Google Play w celu zainicjowania wniosku o licencję oraz weryfikowanie i weryfikowanie odpowiedzi. Udostępnia też interfejsy umożliwiające łatwe podłączenie własnego kodu do definiowania zasad licencjonowania i zarządzania dostępem w zależności od potrzeb aplikacji. Najważniejsze interfejsy LVL:
Policy
- Twoja implementacja określa, czy zezwolić na dostęp do aplikacji na podstawie odpowiedzi uzyskanej w ramach licencji z serwera i wszelkich innych dostępnych danych (np. z serwera backendu powiązanego z aplikacją). Implementacja może ocenić różne pola odpowiedzi licencji i w razie potrzeby zastosować inne ograniczenia. Implementacja ta umożliwia też zarządzanie obsługą kontroli licencji, które prowadzą do błędów, takich jak błędy sieci.
LicenseCheckerCallback
- Twoja implementacja zarządza dostępem do aplikacji w zależności od wyniku obsługi odpowiedzi licencji przez obiekt
Policy
. Implementacja może zarządzać dostępem w dowolny sposób, w tym wyświetlać wynik licencji w interfejsie lub zachęcać użytkownika do zakupu aplikacji (jeśli nie masz obecnie licencji).
Aby ułatwić Ci rozpoczęcie pracy z Policy
, LVL udostępnia 2 pełne implementacje Policy
, których możesz użyć bez modyfikacji i dostosowywania do swoich potrzeb:
ServerManagedPolicy
- Elastyczna
Policy
wykorzystująca ustawienia udostępnione przez serwer licencji do zarządzania buforowaniem odpowiedzi i dostępem do aplikacji, gdy urządzenie jest offline (na przykład gdy użytkownik jest w samolocie). W przypadku większości aplikacji zdecydowanie zalecamy użycieServerManagedPolicy
. StrictPolicy
- Ograniczający
Policy
, który nie przechowuje w pamięci podręcznej żadnych danych odpowiedzi i umożliwia aplikacji dostęp tylko wtedy, gdy serwer zwróci licencjonowaną odpowiedź.
LVL jest dostępny jako pakiet SDK do Androida, który można pobrać. Pakiet zawiera zarówno LVL, jak i przykładową aplikację, która pokazuje, jak należy zintegrować bibliotekę z aplikacją oraz jak aplikacja powinna zarządzać danymi odpowiedzi, interakcją z interfejsem użytkownika i warunkami błędów.
Źródła LVL są udostępniane jako projekt biblioteki na Androida, co oznacza, że możesz utrzymywać jeden zestaw źródeł bibliotek i udostępniać je w wielu aplikacjach. Pakiet SDK udostępnia też pełne środowisko testowe, dzięki czemu możesz opracować i przetestować implementację licencjonowania w aplikacjach, zanim je opublikujesz, nawet jeśli nie masz dostępu do urządzenia fizycznego.
Wymagania i ograniczenia
Licencjonowanie w Google Play umożliwia stosowanie ustawień licencji do aplikacji publikowanych w Google Play. Ta usługa nie umożliwia kontroli dostępu do aplikacji, które nie są publikowane w Google Play lub które działają na urządzeniach bez klienta Google Play.
Wdrażając licencjonowanie w aplikacji, pamiętaj o tych kwestiach:
- Aplikacja może korzystać z usługi tylko wtedy, gdy na hoście jest zainstalowany klient Google Play i na urządzeniu działa Android w wersji 1.5 (poziom interfejsu API 3) lub nowszej.
- Aby można było sprawdzić licencję, serwer licencjonowania musi być dostępny przez sieć. Możesz wdrożyć sposoby buforowania licencji, aby zarządzać dostępem do aplikacji, gdy nie ma połączenia sieciowego.
- Bezpieczeństwo opcji licencjonowania aplikacji zależy od projektu samej implementacji. Usługa udostępnia elementy składowe, które pozwalają bezpiecznie sprawdzić licencje, ale to, czy licencje są rzeczywiście egzekwowane i regulujesz, zależą od Ciebie. Stosując sprawdzone metody opisane w poniższych dokumentach, możesz uzyskać pewność, że Twoja implementacja będzie bezpieczna.
- Dodanie licencji na aplikację nie ma wpływu na jej działanie na urządzeniach, które nie oferują Google Play.
- Możesz wdrożyć ustawienia licencjonowania w przypadku bezpłatnej aplikacji, ale tylko wtedy, gdy używasz tej usługi do dostarczania plików rozszerzeń APK.
Wymiana ochrony przed kopiowaniem
Licencje w Google Play to elastyczny i bezpieczny mechanizm kontrolowania dostępu do aplikacji. W praktyce zastępuje mechanizm ochrony przed kopiowaniem (który nie jest już obsługiwany), który był wcześniej dostępny w Google Play, i zyskuje szerszy potencjał rozpowszechniania Twoich aplikacji.
Licencjonowanie umożliwia przejście na model oparty na licencji, który jest egzekwowany na wszystkich urządzeniach z dostępem do Google Play. Dostęp nie jest powiązany z cechami urządzenia hosta, ale z Twoją aplikacją w Google Play (za pomocą jej klucza publicznego) i zdefiniowaną przez Ciebie zasadą licencjonowania. Aplikację można zainstalować i zarządzać nią na każdym urządzeniu i w dowolnej pamięci, w tym na karcie SD.
Żaden mechanizm licencji nie jest w stanie całkowicie zapobiec nieautoryzowanemu użyciu, ale usługa licencjonowania umożliwia kontrolowanie dostępu w przypadku większości typowych zastosowań – na wszystkich zgodnych urządzeniach – zarówno zablokowanych, jak i odblokowanych.
Aby rozpocząć dodawanie licencjonowania aplikacji do aplikacji, przejdź do sekcji Konfigurowanie licencjonowania.