Wraz ze wzrostem popularności aplikacji może ona przyciągać niepożądaną uwagę złośliwych użytkowników, którzy mogą chcieć ją wykorzystać. W tym artykule znajdziesz zalecenia, które pomogą Ci zapobiegać takim atakom na integrację rozliczeń i zmniejszać wpływ nadużyć w aplikacji.
Przenoszenie wrażliwej logiki na backend
W miarę możliwości przenieś dane wrażliwe i logikę do kontrolowanego przez siebie serwera backendu. Im więcej danych i logiki znajduje się na urządzeniu klienckim, tym bardziej jest ono podatne na modyfikacje lub manipulacje.
Na przykład internetowa gra w szachy powinna weryfikować wszystkie ruchy na backendzie, zamiast ufać, że frontend zawsze wysyła prawidłowe ruchy.
Jeśli wykryjesz luki w zabezpieczeniach lub problemy z bezpieczeństwem, w zależności od projektu systemu łatwiej będzie debugować, naprawiać i wdrażać aktualizacje na backendzie niż na frontendzie.
Weryfikowanie zakupów przed przyznaniem uprawnień
Szczególnym przypadkiem danych wrażliwych i logiki, które powinny być obsługiwane na backendzie, jest weryfikacja zakupu i potwierdzenie. Gdy użytkownik dokona zakupu, wykonaj te czynności:
- Wyślij odpowiedni
purchaseToken
do backendu. Oznacza to, że musisz prowadzić rejestr wszystkich wartościpurchaseToken
dla wszystkich zakupów. - Sprawdź, czy wartość
purchaseToken
bieżącego zakupu nie jest zgodna z żadną z poprzednich wartościpurchaseToken
.purchaseToken
jest unikalny na całym świecie, więc możesz bezpiecznie używać tej wartości jako klucza podstawowego w bazie danych. - Użyj punktów końcowych
Purchases.products:get
lubPurchases.subscriptionsv2:get
w interfejsie Google Play Developer API, aby potwierdzić w Google, że zakup jest legalny. - Jeśli zakup jest zgodny z prawem i nie był wcześniej używany, możesz bezpiecznie przyznać uprawnienia do produktu w aplikacji lub subskrypcji.
- W przypadku subskrypcji, gdy w
Purchases.subscriptionsv2:get
ustawiona jest wartośćlinkedPurchaseToken
, należy również usunąć wartośćlinkedPurchaseToken
z bazy danych i cofnąć uprawnienie przyznanelinkedPurchaseToken
, aby mieć pewność, że wielu użytkowników nie ma uprawnień do tego samego zakupu. - Uprawnienia należy przyznawać tylko wtedy, gdy stan zakupu to
PURCHASED
. Pamiętaj, aby prawidłowo obsługiwać zakupy w staniePENDING
. Jeśli nastąpi nagły wzrost liczbyCANCELED
zakupów, możesz przyznawać uprawnienia, gdy zakup jest jeszcze w staniePENDING
. Więcej informacji znajdziesz w artykule Obsługa transakcji oczekujących. Po przyznaniu uprawnień, jeśli chcesz wykorzystać i potwierdzić produkt jednorazowy, użyj
Purchases.products:consume
interfejsu Play Developer API na bezpiecznym serwerze backendu. Aby potwierdzić zakup produktu jednorazowego lub subskrypcji, wywołaj odpowiedni punkt końcowy interfejsu Play Developer API:Purchases.products:acknowledge
lubPurchases.subscriptions:acknowledge
na bezpiecznym serwerze backendu. Potwierdzenie jest wymagane, ponieważ informuje Google Play, że użytkownik ma uprawnienia do zakupionych treści. Po przyznaniu uprawnień musisz od razu potwierdzić zakup.Pamiętaj, że chociaż możesz potwierdzić lub wykorzystać zakup po stronie klienta za pomocą aplikacji, interfejsy API po stronie serwera zapewniają dodatkową ochronę przed problemami, takimi jak słabe połączenie sieciowe i złośliwa aktywność. Rozważmy na przykład sytuację, w której użytkownik kupił produkt w Twojej aplikacji, ale podczas weryfikacji zakupu utracił połączenie z siecią. Bez potwierdzenia serwera może być konieczne ponowne zalogowanie się w aplikacji, aby dokończyć proces potwierdzania. Jeśli jednak użytkownik nie zaloguje się ponownie w ciągu 3 dni, zakup zostanie automatycznie zwrócony z powodu braku potwierdzenia zakupu. Potwierdzenie serwera zapobiega tej sytuacji, ponieważ jest wysyłane, gdy tylko Google Play powiadomi serwer, że zakup jest ważny.
Więcej informacji o potwierdzaniu zakupu i wykorzystaniu znajdziesz w artykule Przetwarzanie zakupów.
Ochrona odblokowanych treści
Aby uniemożliwić złośliwym użytkownikom rozpowszechnianie odblokowanych treści, nie umieszczaj ich w pliku APK. Zamiast tego wykonaj jedną z tych czynności:
- Używaj usługi w czasie rzeczywistym do przesyłania treści, np. kanału treści. Dostarczanie treści za pomocą usługi w czasie rzeczywistym pozwala też dbać o ich aktualność.
- Używaj serwera zdalnego do dostarczania treści.
Gdy dostarczasz treści z serwera zdalnego lub usługi w czasie rzeczywistym, możesz przechowywać odblokowane treści w pamięci urządzenia lub na karcie SD. Jeśli przechowujesz treści na karcie SD, pamiętaj, aby je zaszyfrować i użyć klucza szyfrowania specyficznego dla urządzenia.
Wykrywanie i obsługa unieważnionych zakupów
Anulowane zakupy to zakupy, które zostały anulowane, cofnięte lub obciążone zwrotem środków. Jeśli anulowany zakup wcześniej przyznał użytkownikowi elementy w aplikacji lub inne treści, możesz użyć interfejsu Voided Purchases API, aby uzyskać informację o powodzie anulowania zakupu oraz powiązane z nim treści, które możesz odzyskać.
Zakupy produktów w aplikacji i subskrypcji mogą zostać anulowane z różnych powodów, m.in.:
- zakup zostanie anulowany przez użytkownika, dewelopera lub Google (w tym niepotwierdzone automatycznie anulowane zakupy); W przypadku subskrypcji pamiętaj, że chodzi o anulowanie zakupu subskrypcji, a nie o anulowanie samej subskrypcji.
- Zakup zostanie obciążony zwrotem środków.
- Deweloper aplikacji anuluje zamówienie użytkownika lub zwraca mu środki i zaznacza w konsoli opcję „cofnij”.
Na podstawie przyczyny anulowania zakupu i z uwzględnieniem wcześniejszych danych o zachowaniu użytkownika możesz podjąć odpowiednie działania. Zalecamy wdrożenie co najmniej jednego z tych rozwiązań:
- Wycofywanie środków: gdy zakup zostanie anulowany, możesz wycofać niewykorzystane produkty, tak jakby nigdy nie zostały kupione. Jeśli na przykład zakup waluty w grze został anulowany, możesz odzyskać walutę, która została już przyznana użytkownikowi. Jeśli użytkownik wydał już walutę, rozważ ustawienie ujemnego salda waluty i ograniczenie aktywności w aplikacji oraz przyszłych zakupów do momentu, w którym saldo waluty będzie dodatnie.
- Wdrożenie wielokrotnych ostrzeżeń: w przypadku pierwszego naruszenia zasad rozważ podjęcie mniej drastycznych działań, np. wyświetlanie ostrzeżeń w aplikacji. W przypadku osób, które wielokrotnie naruszają zasady, rozważ zastosowanie surowszych środków.
- Tymczasowe wyłączenie zakupów: podobnie jak w przypadku wdrożenia wielu ostrzeżeń rozważ wyłączenie zakupów dla użytkowników, których zakupy zostały anulowane, dopóki nie uda Ci się dokładniej zbadać przyczyn anulowania.
- Tymczasowe lub trwałe zablokowanie dostępu do aplikacji: w przypadku skrajnych sytuacji związanych z powtarzającą się złośliwą aktywnością rozważ zablokowanie dostępu do aplikacji tymczasowo lub na stałe.
- Często wywołuj interfejs Voided Purchases API: gdy wykryjesz co najmniej 1 anulowany zakup, rozważ częstsze wywoływanie interfejsu Voided Purchases API, aby odzyskać środki przed wykorzystaniem ich przez użytkownika. Więcej informacji o limitach interfejsu Voided Purchases API znajdziesz w dokumentacji tego interfejsu.
Pomóż Google wykrywać oszustwa, zanim do nich dojdzie
Niektóre rodzaje oszustw są związane ze złośliwymi użytkownikami, którzy tworzą wiele kont Google i kont w aplikacjach, aby ukryć swoją aktywność.
W narzędziu do tworzenia użyj metod
setObfuscatedAccountId
i
setObfuscatedProfileId
dla
BillingFlowParams
, aby pomóc Google w mapowaniu kont Google na konta w aplikacji.
Google używa tych danych do wykrywania podejrzanych zachowań i blokowania niektórych rodzajów oszukańczych transakcji, zanim zostaną one sfinalizowane.
Podejmowanie działań przeciwko naruszeniom znaków towarowych i praw autorskich
Jeśli do dostarczania treści lub zarządzania nimi używasz serwera zdalnego, aplikacja powinna weryfikować stan zakupu odblokowanych treści za każdym razem, gdy użytkownik uzyskuje do nich dostęp. Umożliwia to cofnięcie uprawnień do korzystania z usługi w razie potrzeby i ograniczenie piractwa. Jeśli zauważysz, że Twoje treści są rozpowszechniane w Google Play, podejmij szybkie i zdecydowane działania. Więcej informacji znajdziesz na stronie Najczęstsze pytania dotyczące praw autorskich w Centrum pomocy z zakresu praw autorskich.