Omówienie procesu licencjonowania

Licencjonowanie w Google Play to usługa oparta na sieci, która umożliwia aplikacji wysłanie zapytania do zaufanej strony na serwerze licencjonowania Google Play, aby ustalić, czy aplikacja jest licencjonowana dla bieżącego użytkownika urządzenia. Usługa licencjonowania korzysta z możliwości serwera licencjonowania Google Play, aby określić, czy dany użytkownik ma licencję na korzystanie z określonej aplikacji. Google Play uznaje, że użytkownik ma licencję, jeśli jest zarejestrowanym nabywcą aplikacji.

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

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 jej pobrania i zainstalowania, są uważani za użytkowników z licencją na tę aplikację. Więcej informacji znajdziesz w artykule Używanie ścieżek testów do uzyskiwania cennych opinii użytkowników na wczesnym etapie.

Rysunek 1. Aplikacja inicjuje sprawdzanie 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ę „w postaci roboczej”. 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 Aplikacje w wersji roboczej nie są już obsługiwane.

Aby prawidłowo zidentyfikować użytkownika i określić stan licencji, serwer licencji 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ć dodawanie licencji do aplikacji, pakiet Android SDK udostępnia do pobrania zestaw źródeł bibliotek, które można uwzględnić w projekcie aplikacji: pakiet Google Market Licensing. Biblioteka weryfikacji licencji (LVL) to biblioteka, którą możesz dodać do aplikacji. Zajmuje się ona całą komunikacją z usługą licencjonowania Google Play związaną z licencjami. Po dodaniu do aplikacji interfejsu LVL aplikacja może określić stan licencji bieżącego użytkownika, po prostu wywołując metodę i wdrażając funkcję wywołania zwrotnego, która odbiera odpowiedź dotyczącą stanu.

Aplikacja nie wysyła zapytania bezpośrednio do serwera licencjonowania, ale wywołuje klienta Google Play za pomocą interfejsu IPC na odległość, aby zainicjować żądanie licencji. W prośbie o licencję:

  • Aplikacja udostępnia: nazwę pakietu, losowy ciąg znaków, który jest później używany do weryfikowania odpowiedzi od serwera, oraz funkcję wywołania zwrotnego, za pomocą której odpowiedź może być zwracana asynchronicznie.
  • 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 w imieniu aplikacji wysyła żądanie sprawdzenia licencji do serwera.
  • Serwer Google Play analizuje żądanie, korzystając ze wszystkich dostępnych informacji, aby z wystarczającym poziomem pewności zidentyfikować tożsamość użytkownika. Następnie serwer porównuje tożsamość użytkownika z rekordami zakupów w aplikacji i zwraca odpowiedź dotyczącą licencji, którą klient Google Play przekazuje Twojej aplikacji za pomocą wywołania zwrotnego IPC.

Możesz wybrać, kiedy i jak często aplikacja ma sprawdzać licencję. Masz też pełną kontrolę nad tym, jak aplikacja ma obsługiwać odpowiedź, weryfikować podpisane dane odpowiedzi i egzekwować kontrolę dostępu.

Pamiętaj, że podczas sprawdzania licencji Twoja aplikacja nie zarządza żadnymi połączeniami sieciowymi ani nie używa interfejsów API związanych z licencjami 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 użytkownikowi.

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

Gdy aplikacja otrzyma podpisaną odpowiedź, użyje wbudowanego klucza publicznego do zweryfikowania danych. Korzystanie z kryptografii klucza publicznego w usłudze licencjonowania 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 solidniejsze wdrożenie aplikacji. LVL udostępnia klasy wewnętrzne, które obsługują większość standardowych operacji zapytania o licencję, takich jak kontakt z klientem Google Play w celu zainicjowania żądania licencji oraz weryfikacja i sprawdzanie odpowiedzi. Udostępnia też interfejsy, które umożliwiają łatwe łączenie kodu niestandardowego do definiowania zasad licencjonowania i zarządzania dostępem zgodnie z potrzebami aplikacji. Najważniejsze interfejsy LVL:

Policy
Twoja implementacja określa, czy zezwolić na dostęp do aplikacji na podstawie odpowiedzi z serwera i innych dostępnych danych (np. z serwera backendowego powiązanego z aplikacją). Implementacja może oceniać różne pola odpowiedzi z licencji i w razie potrzeby stosować inne ograniczenia. Dzięki temu możesz też zarządzać obsługą kontroli licencji, które powodują błędy, takie jak błędy sieciowe.
LicenseCheckerCallback
Twoja implementacja zarządza dostępem do aplikacji na podstawie wyniku obsługi odpowiedzi dotyczącej licencji przez obiekt Policy. Twoja implementacja 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 ona obecnie licencji).

Aby ułatwić Ci rozpoczęcie pracy z Policy, LVL udostępnia 2 pełne implementacje Policy, których możesz używać bez wprowadzania zmian lub dostosowywać je do swoich potrzeb:

ServerManagedPolicy
elastyczny Policy, który korzysta z ustawień dostarczonych przez serwer licencjonowania do zarządzania buforowaniem odpowiedzi i dostępem do aplikacji, gdy urządzenie jest offline (np. gdy użytkownik jest w samolocie). W przypadku większości aplikacji zdecydowanie zalecamy używanie funkcji ServerManagedPolicy.
StrictPolicy
Ograniczający Policy, który nie przechowuje żadnych danych odpowiedzi i pozwala aplikacji na dostęp tylko, gdy serwer zwraca odpowiedź z licencją.

LVL jest dostępny jako pakiet do pobrania w pakiecie Android SDK. Pakiet zawiera zarówno bibliotekę LVL, jak i przykładową aplikację, która pokazuje, jak biblioteka powinna być zintegrowana z aplikacją oraz jak aplikacja powinna zarządzać danymi odpowiedzi, interakcją z UI i warunkami błędu.

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

Wymagania i ograniczenia

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

Podczas implementowania licencjonowania w aplikacji należy pamiętać o tych kwestiach:

  • Aplikacja może korzystać z usługi tylko wtedy, gdy na urządzeniu hosta jest zainstalowany klient Google Play, a urządzenie to ma zainstalowany Android 1.5 (poziom interfejsu API 3) lub nowszy.
  • Aby przeprowadzić sprawdzanie licencji, serwer licencji musi być dostępny w sieci. Aby zarządzać dostępem do aplikacji w przypadku braku połączenia z internetem, możesz wdrożyć zachowanie dotyczące buforowania licencji.
  • Bezpieczeństwo mechanizmów kontroli licencjonowania aplikacji zależy w większości od projektu samej implementacji. Usługa udostępnia elementy, które umożliwiają bezpieczne sprawdzanie licencji, ale to od Ciebie zależy, jak będziesz egzekwować i obsługiwać licencję. Stosując się do sprawdzonych metod opisanych w tych dokumentach, możesz zapewnić bezpieczeństwo swojej implementacji.
  • Dodanie licencji do aplikacji nie wpływa na sposób jej działania na urządzeniu, na którym nie ma Google Play.
  • Możesz wdrożyć kontrolę licencjonowania w przypadku bezpłatnej aplikacji, ale tylko wtedy, gdy korzystasz z usługi, aby udostępniać pliki rozszerzające APK.

Zastępowanie ochrony przed kopiowaniem

Licencjonowanie w Google Play to elastyczny i bezpieczny mechanizm umożliwiający kontrolowanie dostępu do aplikacji. Zastępuje on skutecznie mechanizm ochrony przed kopiowaniem (nie jest już obsługiwany), który był wcześniej dostępny w Google Play, i daje większe możliwości dystrybucji aplikacji.

Licencjonowanie umożliwia przejście na model oparty na licencji, który można egzekwować 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 (poprzez jej klucz publiczny) i z określonymi przez Ciebie zasadami licencjonowania. Aplikację można zainstalować i zarządzać nią na dowolnym urządzeniu i dowolnym urządzeniu pamięci masowej, w tym na karcie SD.

Chociaż żaden mechanizm licencjonowania nie może całkowicie zapobiec nieautoryzowanemu użyciu, usługa licencjonowania umożliwia kontrolowanie dostępu do większości typów normalnego użytkowania na wszystkich zgodnych urządzeniach, zablokowanych lub odblokowanych.

Aby dodać do aplikacji licencjonowanie aplikacji, przejdź do sekcji Konfigurowanie licencjonowania.