Omówienie procesu licencjonowania

Licencjonowanie w Google Play to usługa sieciowa, która umożliwia aplikacji wysyłanie zapytań do zaufanego serwera licencjonowania Google Play, aby sprawdzić, czy aplikacja jest licencjonowana dla bieżącego użytkownika urządzenia. Usługa licencjonowania opiera się na możliwości serwera licencjonowania Google Play, który określa, czy dany użytkownik ma licencję na korzystanie z danej aplikacji. Google Play uznaje użytkownika za licencjonowanego, jeśli jest on zarejestrowanym nabywcą aplikacji.

Żądanie rozpoczyna się, gdy aplikacja wysyła żądanie do usługi hostowanej przez aplikację klienta Google Play. Aplikacja Google Play wysyła następnie żądanie do serwera licencjonowania i otrzymuje wynik. Aplikacja Google Play wysyła wynik do Twojej aplikacji, która może zezwolić na dalsze korzystanie z niej lub je uniemożliwić.

Uwaga: jeśli wersja aplikacji jest dostępna na ścieżkach testów zamkniętych lub otwartych, wszyscy użytkownicy, którzy mają uprawnienia do pobrania i zainstalowania tej aplikacji, są uznawani za licencjonowanych użytkowników aplikacji. Więcej informacji znajdziesz w artykule Korzystanie ze ścieżek testów, aby uzyskać cenne opinie użytkowników.

Rysunek 1. Aplikacja inicjuje sprawdzenie licencji za pomocą biblioteki 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 niej musisz opublikować aplikację na ścieżkach testów zamkniętych lub otwartych. 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. Twoja aplikacja i klient Google Play współpracują ze sobą, aby zebrać te informacje, a klient Google Play przekazuje je na serwer.

Aby ułatwić Ci dodanie licencji do aplikacji, pakiet Android SDK udostępnia zestaw źródeł bibliotek do pobrania, które możesz uwzględnić w projekcie aplikacji: pakiet licencjonowania Google Play. Biblioteka weryfikacji licencji (LVL) to biblioteka, którą możesz dodać do aplikacji. Obsługuje ona całą komunikację związaną z licencjonowaniem z usługą licencjonowania Google Play. Po dodaniu LVL do aplikacji może ona określić stan licencji bieżącego użytkownika, wywołując metodę i implementując wywołanie zwrotne, które odbiera odpowiedź ze stanem.

Aplikacja nie wysyła zapytań bezpośrednio do serwera licencji, ale zamiast tego wywołuje klienta Google Play za pomocą zdalnego IPC, aby zainicjować żądanie licencji. W prośbie o licencję:

  • Aplikacja podaje nazwę pakietu, wartość nonce, która jest później używana do weryfikacji odpowiedzi z serwera, oraz wywołanie zwrotne, za pomocą którego można asynchronicznie zwrócić odpowiedź.
  • Klient Google Play zbiera niezbędne informacje o użytkowniku i urządzeniu, takie jak nazwa użytkownika głównego konta Google na urządzeniu, IMSI i inne informacje. Następnie wysyła do serwera żądanie sprawdzenia licencji w imieniu Twojej aplikacji.
  • Serwer Google Play ocenia żądanie na podstawie wszystkich dostępnych informacji, próbując ustalić tożsamość użytkownika z wystarczającą pewnością. Serwer sprawdza tożsamość użytkownika na podstawie rekordów zakupu aplikacji i zwraca odpowiedź dotyczącą licencji, którą klient Google Play przekazuje do aplikacji za pomocą wywołania zwrotnego IPC.

Możesz wybrać, kiedy i jak często aplikacja ma sprawdzać licencję, oraz masz pełną kontrolę nad tym, jak obsługuje odpowiedź, weryfikuje podpisane dane odpowiedzi i wymusza kontrolę dostępu.

Pamiętaj, że podczas sprawdzania licencji aplikacja nie zarządza żadnymi połączeniami sieciowymi ani nie korzysta z żadnych interfejsów API związanych z licencjonowaniem na platformie Android.

Odpowiedzi dotyczące licencji są bezpieczne

Aby zapewnić integralność każdego zapytania o licencję, serwer podpisuje dane odpowiedzi dotyczące licencji za pomocą pary kluczy RSA, która jest udostępniana wyłącznie serwerowi Google Play i Tobie.

Usługa licencjonowania generuje pojedynczą parę kluczy licencyjnych dla każdej aplikacji i udostępnia klucz publiczny na stronie Usługi i interfejsy API w Konsoli Play. Musisz skopiować klucz publiczny z Konsoli Play i osadzić go w kodzie źródłowym aplikacji. Serwer przechowuje klucz prywatny wewnętrznie i używa go do podpisywania odpowiedzi dotyczących licencji w przypadku aplikacji publikowanych na tym koncie.

Gdy aplikacja otrzyma podpisaną odpowiedź, używa osadzonego klucza publicznego do weryfikacji danych. Wykorzystanie w usłudze licencjonowania kryptografii klucza publicznego umożliwia aplikacji wykrywanie odpowiedzi, które zostały zmodyfikowane lub sfałszowane.

Biblioteka weryfikacji licencji

Pakiet Android SDK udostępnia pakiet do pobrania o nazwie Google Market Licensing, który zawiera bibliotekę weryfikacji licencji (LVL). LVL znacznie upraszcza proces dodawania licencji do aplikacji i pomaga zapewnić bezpieczniejsze i bardziej niezawodne wdrożenie aplikacji. LVL udostępnia wewnętrzne klasy, które obsługują większość standardowych operacji związanych z zapytaniem o licencję, takich jak kontaktowanie się z klientem Google Play w celu zainicjowania żądania licencji oraz weryfikowanie i sprawdzanie poprawności odpowiedzi. Udostępnia też interfejsy, które umożliwiają łatwe wstawianie niestandardowego kodu do definiowania zasad licencjonowania i zarządzania dostępem zgodnie z potrzebami aplikacji. Kluczowe interfejsy LVL to:

Policy
Implementacja określa, czy zezwolić na dostęp do aplikacji, na podstawie odpowiedzi licencyjnej otrzymanej z serwera i 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 umożliwia też zarządzanie obsługą weryfikacji licencji, które powodują błędy, np. błędy sieci.
LicenseCheckerCallback
Implementacja zarządza dostępem do aplikacji na podstawie wyniku obsługi odpowiedzi licencji przez obiekt Policy. Wdrożenie może zarządzać dostępem w dowolny sposób, w tym wyświetlać wynik licencji w interfejsie lub kierować użytkownika do zakupu aplikacji (jeśli nie ma on obecnie licencji).

Aby ułatwić Ci rozpoczęcie pracy z Policy, LVL udostępnia 2 w pełni gotowe implementacje Policy, których możesz używać bez modyfikacji lub dostosować do swoich potrzeb:

ServerManagedPolicy
Elastyczny Policy moduł, który używa ustawień dostarczonych przez serwer licencji do zarządzania buforowaniem odpowiedzi i dostępem do aplikacji, gdy urządzenie jest w trybie offline (np. gdy użytkownik jest w samolocie). W przypadku większości aplikacji zdecydowanie zalecamy używanie właściwości ServerManagedPolicy.
StrictPolicy
Ograniczający Policy, który nie zapisuje w pamięci podręcznej żadnych danych odpowiedzi i umożliwia aplikacji dostęp tylko, gdy serwer zwraca licencjonowaną odpowiedź.

LVL jest dostępna jako pakiet do pobrania w ramach pakietu Android SDK. Pakiet zawiera zarówno samą bibliotekę LVL, jak i przykładową aplikację, która pokazuje, jak zintegrować bibliotekę z aplikacją oraz jak aplikacja powinna zarządzać danymi odpowiedzi, interakcją z interfejsem i sytuacjami błędów.

Źródła LVL są udostępniane jako projekt biblioteki Androida, co oznacza, że możesz utrzymywać jeden zestaw źródeł biblioteki i udostępniać go w wielu aplikacjach. Pełne środowisko testowe jest też dostępne w pakiecie SDK, dzięki czemu możesz opracowywać i testować implementację licencjonowania w aplikacjach przed ich opublikowaniem, nawet jeśli nie masz dostępu do urządzenia fizycznego.

Wymagania i ograniczenia

Usługa licencjonowania Google Play umożliwia stosowanie kontroli licencji w przypadku aplikacji publikowanych w Google Play. Usługa nie jest przeznaczona do kontrolowania dostępu do aplikacji, które nie są publikowane w Google Play lub są uruchamiane na urządzeniach, które nie mają klienta Google Play.

Oto kilka kwestii, o których należy pamiętać podczas wdrażania licencjonowania w aplikacji:

  • Aplikacja może korzystać z usługi tylko wtedy, gdy na urządzeniu hosta jest zainstalowany klient Google Play, a urządzenie działa pod kontrolą Androida 1.5 (poziom interfejsu API 3) lub nowszego.
  • Aby przeprowadzić weryfikację licencji, serwer licencji musi być dostępny w sieci. Możesz wdrożyć zachowania buforowania licencji, aby zarządzać dostępem do aplikacji, gdy nie ma połączenia z siecią.
  • Bezpieczeństwo mechanizmów kontroli licencjonowania aplikacji zależy ostatecznie od projektu wdrożenia. Usługa udostępnia elementy, które umożliwiają bezpieczne sprawdzanie licencji, ale egzekwowanie i obsługa licencji zależą od Ciebie. Stosując się do sprawdzonych metod opisanych w tych dokumentach, możesz zadbać o bezpieczeństwo wdrożenia.
  • Dodanie licencji do aplikacji nie wpływa na sposób jej działania na urządzeniu, które nie obsługuje Google Play.
  • Możesz wdrożyć kontrolę licencji w przypadku bezpłatnej aplikacji, ale tylko wtedy, gdy używasz usługi do udostępniania plików rozszerzających APK.

Zastąpienie ochrony przed kopiowaniem

Licencjonowanie w Google Play to elastyczny i bezpieczny mechanizm kontrolowania dostępu do aplikacji. Zastępuje ona mechanizm ochrony przed kopiowaniem (nie jest już obsługiwany), który był wcześniej oferowany w Google Play, i zapewnia większy potencjał dystrybucji aplikacji.

Licencjonowanie umożliwia przejście na model oparty na licencjach, który można egzekwować na wszystkich urządzeniach mających dostęp do Google Play. Dostęp nie jest powiązany z charakterystyką urządzenia hosta, ale z Twoją aplikacją w Google Play (za pomocą klucza publicznego aplikacji) i zdefiniowaną przez Ciebie polityką licencjonowania. Aplikację można zainstalować i zarządzać nią na dowolnym urządzeniu w dowolnej pamięci, w tym na karcie SD.

Żaden mechanizm licencjonowania nie może całkowicie zapobiec nieautoryzowanemu użyciu, ale usługa licencjonowania umożliwia kontrolowanie dostępu w przypadku większości rodzajów normalnego użytkowania na wszystkich zgodnych urządzeniach, zarówno zablokowanych, jak i odblokowanych.

Aby rozpocząć dodawanie licencjonowania aplikacji, przejdź do sekcji Konfigurowanie licencjonowania.