Zwalczanie oszustw i nadużyć

Google Play dokłada wszelkich starań, aby zapewnić bezpieczeństwo zarówno użytkownikom, jak i deweloperom. Rozumiemy, że budowanie dobrze prosperującej firmy zajmującej się aplikacjami wymaga zaufanej platformy, która chroni zwrot z inwestycji dzięki proaktywnej obronie przed nieuczciwymi podmiotami.

W tym dokumencie znajdziesz zalecenia dotyczące zapobiegania atakom na integrację rozliczeń i ograniczania skutków nadużyć w aplikacji.

Zwiększanie ochrony

Następujące interfejsy API i narzędzia mogą pomóc w ograniczeniu ryzyka w aplikacji:

  • Voided Purchases API: unieważnia dostęp do anulowanych zamówień.
  • Zaciemniony identyfikator konta: pomaga wykrywać, kiedy wiele urządzeń dokonuje zakupów na tym samym koncie w krótkim czasie.
  • Backend consumption: narzędzia takie jak Purchases.products:consume przenoszą logikę biznesową do bezpiecznych backendów, co zapobiega manipulacjom po stronie klienta. Oprócz korzystania z tych interfejsów API platformy stosuj te sprawdzone metody, aby dodatkowo zabezpieczyć integracje przed nieautoryzowanym dostępem.

Zapobieganie fałszowaniu lokalizacji

Google Play ma wbudowane zabezpieczenia, które uniemożliwiają złośliwym podmiotom wykorzystywanie fałszywych lokalizacji do wykorzystywania różnic w walutach regionalnych (tzw. fałszowanie lokalizacji), nadużywania promocji i zachęt związanych z subskrypcjami oraz prób oszustw związanych z kartami podarunkowymi.

Przenoszenie logiki związanej z danymi wrażliwymi do backendu

W miarę możliwości projektowych aplikacji przenieś dane wrażliwe i logikę do kontrolowanego przez siebie serwera backendowego. Im więcej danych i logiki znajduje się na urządzeniu frontendowym, tym bardziej jest ono podatne na modyfikacje lub manipulacje.

Na przykład w internetowej grze w szachy wszystkie ruchy powinny być weryfikowane w backendzie, a nie na podstawie założenia, że frontend zawsze wysyła prawidłowe ruchy.

Ponadto, jeśli znajdziesz luki w zabezpieczeniach lub problemy z bezpieczeństwem, w zależności od projektu systemu łatwiej może być debugować, naprawiać i wdrażać aktualizacje w backendzie niż w frontendzie.

Weryfikowanie zakupów przed przyznaniem uprawnień

Szczególnym przypadkiem danych wrażliwych i logiki, które powinny być obsługiwane w backendzie, jest weryfikacja zakupów 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ści purchaseToken dla wszystkich zakupów.
  • Sprawdź, czy wartość purchaseToken dla bieżącego zakupu nie jest zgodna z żadną poprzednią wartością purchaseToken. purchaseToken jest globalnie unikalny, więc możesz bezpiecznie używać tej wartości jako klucza podstawowego w bazie danych.
  • Aby potwierdzić w Google, że zakup jest legalny, użyj punktów końcowych Purchases.products:get lub Purchases.subscriptionsv2:get w interfejsie Google Play Developer API.
  • Jeśli uważasz, że zakup jest legalny, nie został użyty ani przetworzony w przeszłości, a użytkownik spełnia wszystkie kryteria kwalifikacji i przechodzi kontrole pod kątem oszustw, możesz bezpiecznie przyznać mu uprawnienia do produktu w aplikacji lub subskrypcji.
    • Sprawdzanie kwalifikacji i nadużyć: sprawdź, czy użytkownik nadal kwalifikuje się do otrzymania produktu. Jeśli skonfigurowano proces płatności za pomocą obfuscatedAccountId lub obfuscatedProfileId, sprawdź, czy mapowanie zakupu jest zgodne z oczekiwanym kontem użytkownika w systemie. Wykonaj dodatkowe kontrole pod kątem nadużyć, ryzyka lub bezpieczeństwa wymagane przez backend.
    • Wyraźne zwroty środków za nielegalne zakupy: jeśli zakup nie przejdzie weryfikacji lub kontroli pod kątem nadużyć, nie przyznawaj uprawnień i nie potwierdzaj ani nie przyjmuj zakupu. Zamiast czekać, aż zakup zostanie automatycznie zwrócony z powodu braku potwierdzenia (co jest niejednoznaczne, ponieważ może też wynikać z przekroczenia limitu czasu przetwarzania), wyraźnie cofnij i zwróć środki za zakup za pomocą punktu końcowego purchases.subscriptionsv2:revoke (z parametrem "fullRefund": {}) w przypadku subskrypcji lub punktu końcowego Orders:refund z parametrem revoke ustawionym na true w przypadku produktów jednorazowych. Cofnięcie zakupu gwarantuje, że użytkownik nie będzie już miał uprawnień do zakupu, i wysyła do Google Play wyraźny sygnał, że zakup został odrzucony przez dewelopera.
  • W przypadku subskrypcji, gdy w Purchases.subscriptionsv2:get ustawiony jest linkedPurchaseToken, należy też usunąć linkedPurchaseToken z bazy danych i cofnąć uprawnienia przyznane linkedPurchaseToken, aby mieć pewność, że wielu użytkowników nie będzie miało uprawnień do tego samego zakupu.
  • Uprawnienia należy przyznawać tylko wtedy, gdy stan zakupu to PURCHASED, i należy prawidłowo obsługiwać oczekujące zakupy. Jeśli nastąpi gwałtowny wzrost liczby zakupów w stanie CANCELED, może to oznaczać, że przyznajesz uprawnienia, gdy zakup jest jeszcze w stanie PENDING. Więcej informacji znajdziesz w artykule Obsługa transakcji oczekujących.
  • Jeśli po przyznaniu uprawnień chcesz przyjąć i potwierdzić produkt jednorazowy, użyj interfejsu Play Developer API Purchases.products:consume na bezpiecznym serwerze backendowym. Aby potwierdzić produkt niejednorazowy lub subskrypcję, wywołaj odpowiedni punkt końcowy API Play Developer, czyli Purchases.products:acknowledge lub Purchases.subscriptions:acknowledge na bezpiecznym serwerze backendu. Potwierdzenie jest wymagane, ponieważ informuje Google Play, że użytkownik otrzymał uprawnienia do zakupu. Zakup należy potwierdzić natychmiast po przyznaniu uprawnień.

    Pamiętaj, że chociaż możesz potwierdzić lub skonsumować 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 szkodliwa aktywność. Rozważ na przykład sytuację, w której użytkownik kupił produkt w Twojej aplikacji, ale utracił połączenie sieciowe podczas weryfikacji zakupu. Bez potwierdzenia po stronie serwera może być konieczne ponowne zalogowanie się w aplikacji, aby dokończyć proces potwierdzenia. W przeciwnym razie, jeśli użytkownik nie zaloguje się ponownie w ciągu 3 dni, zakup zostanie automatycznie zwrócony z powodu braku potwierdzenia. Potwierdzenie po stronie serwera zapobiega takiej sytuacji, ponieważ wysyła potwierdzenie, gdy tylko Google Play powiadomi serwer, że zakup jest prawidłowy.

Więcej informacji o potwierdzaniu i przyjmowaniu zakupów znajdziesz w artykule Przetwarzanie zakupów.

Ochrona odblokowanych treści

Aby uniemożliwić złośliwym użytkownikom redystrybucję odblokowanych treści, nie dołączaj ich do pliku APK. Zamiast tego wykonaj jedną z tych czynności:

  • Użyj usługi w czasie rzeczywistym do dostarczania treści, np. źródła treści. Dostarczanie treści za pomocą usługi w czasie rzeczywistym pozwala też zachować ich aktualność.
  • Użyj 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, zaszyfruj je i użyj klucza szyfrowania specyficznego dla urządzenia.

Wykrywanie i obsługa unieważnionych zakupów

Unieważnione zakupy to zakupy, które zostały anulowane, cofnięte lub obciążone zwrotnie. Jeśli unieważniony zakup przyznał wcześniej użytkownikowi zakupy w aplikacji lub inne treści , możesz użyć Voided Purchases API, aby uzyskać informację o przyczynie unieważnienia zakupu oraz powiązane z nim treści, które możesz odzyskać.

Zakupy produktów w aplikacji i subskrypcji mogą zostać unieważnione z różnych powodów, m.in.:

  • Zakup został anulowany przez użytkownika, dewelopera lub Google (w tym niepotwierdzone zakupy anulowane automatycznie). W przypadku subskrypcji pamiętaj że chodzi o anulowanie zakupu subskrypcji, a nie samej subskrypcji.
  • Zakup został obciążony zwrotnie.
  • Deweloper aplikacji anuluje zamówienie użytkownika lub zwraca za nie środki i zaznacza w Konsoli Play opcję „Cofnij”. Na podstawie przyczyny unieważnienia 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ń:

  • Odzyskiwanie środków: gdy zakup zostanie unieważniony, możesz odzyskać niewykorzystane produkty tak, jakby nigdy nie zostały kupione. Jeśli na przykład zakup waluty w grze został unieważniony, 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 czasu, aż saldo waluty będzie dodatnie.

  • Wdrożenie systemu ostrzeżeń: w przypadku osób, które po raz pierwszy naruszyły zasady, rozważ podjęcie mniej drastycznych działań, np. wyświetlanie ostrzeżeń w aplikacji. W przypadku osób, które powtarzają naruszenia, rozważ zastosowanie surowszych środków.

  • Tymczasowe wyłączenie zakupów: podobnie jak w przypadku systemu ostrzeżeń rozważ wyłączenie zakupów dla użytkowników, którzy dokonali unieważnionych zakupów, do czasu dokładnego zbadania przyczyn unieważnienia.

  • Tymczasowe lub trwałe zablokowanie dostępu do aplikacji: w skrajnych przypadkach powtarzającej się złośliwej aktywności rozważ zablokowanie dostępu do aplikacji, tymczasowo lub na stałe.

  • Częste wywoływanie Voided Purchases API: gdy wykryjesz co najmniej 1 unieważniony zakup, rozważ częstsze wywoływanie Voided Purchases API, aby odzyskać zakupy, zanim użytkownik będzie mógł je wykorzystać. Więcej informacji o limitach Voided Purchases API znajdziesz w dokumentacji Voided Purchases API.

Pomaganie Google w wykrywaniu oszustw, 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 aplikacji, aby ukryć swoją aktywność.

Aby pomóc Google w mapowaniu kont Google na konta w aplikacji, użyj metod setObfuscatedAccountId i setObfuscatedProfileId w konstruktorze BillingFlowParams.

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ń w przypadku naruszenia praw autorskich lub znaków towarowych

Jeśli używasz serwera zdalnego do dostarczania treści lub zarządzania nimi, skonfiguruj aplikację tak, aby sprawdzała stan zakupu odblokowanych treści za każdym razem, gdy użytkownik uzyskuje do nich dostęp. Pozwala to w razie potrzeby cofnąć uprawnienia i zminimalizować piractwo. Jeśli zauważysz, że Twoje treści są redystrybuowane 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.