Wszystkie artykuły
Poradnik8 min czytania

Apple DeviceCheck pamięta telefon osoby nadużywającej zwrotów, nawet gdy założy ona nowe konto

Blokady kont i identyfikatory zakupów przestają działać w chwili, gdy osoba nadużywająca zwrotów zakłada nowe konto. Apple DeviceCheck i funkcja zapamiętywania urządzeń w Google Play (device recall) przechowują kilka bitów na urządzenie na serwerach sklepu. Wyjaśniamy, co zapisują, kiedy je ustawiać i ile dzięki nim oszczędzasz.

Używany smartfon leżący ekranem w dół na szklanej ladzie sklepowej, z przywiązaną mosiężną zawieszką. Obraz tego, jak DeviceCheck oznacza urządzenie, a nie konto

Najważniejsze wnioski

  • Apple DeviceCheck pozwala Twojemu serwerowi ustawiać i odczytywać dwa bity binarne na urządzenie, przechowywane na serwerach Apple. Apple wprost wymienia oznaczanie urządzenia uznanego za oszukańcze jako jedno z zamierzonych zastosowań.
  • Funkcja zapamiętywania urządzeń w Google Play (device recall), będąca w wersji beta częścią Play Integrity API, przechowuje trzy własne bity na urządzenie na serwerach Google. Przetrwają one ponowną instalację aplikacji i reset urządzenia.
  • Wartości zapamiętywania urządzeń są wspólne dla wszystkich aplikacji na tym samym koncie dewelopera Google Play i są przechowywane przez 3 lata od ostatniego odczytu lub zapisu.
  • Token Play Integrity może służyć do zapisu bitów zapamiętywania urządzeń przez maksymalnie 14 dni od jego weryfikacji. To obejmuje 48-godzinne okno samodzielnych zwrotów w Google Play.
  • Ani powiadomienia Apple o zwrotach, ani unieważnione zakupy Google nie zawierają identyfikatora urządzenia. Urządzenie może więc oznaczyć tylko serwer, który wcześniej powiązał zakupy z własnymi kontami.
  • Oznaczenia urządzeń nie mogą zatrzymać zwrotu. Decydują o tym, co Twoja aplikacja da urządzeniu następnym razem, np. darmowe kredyty, finansowany przez Ciebie okres próbny albo ofertę promocyjną podpisaną przez Twój serwer.
  • Tylko dwa procesy zwrotów pozwalają deweloperowi przedstawić dowody przed decyzją sklepu: CONSUMPTION_REQUEST od Apple, z odpowiedzią w ciągu 12 godzin, oraz przegląd obciążenia zwrotnego w Google Play przez orders.reviewrefund, z odpowiedzią w ciągu 24 godzin.

Zablokowanie konta nie powstrzyma osoby nadużywającej zwrotów, która zarejestruje się ponownie na tym samym telefonie. Apple DeviceCheck i zapamiętywanie urządzeń w Google Play (device recall) istnieją właśnie z powodu tej luki. Każde z nich pozwala Twojemu serwerowi przypisać fizycznemu urządzeniu kilka bitów o znaczeniu, które sam ustalasz, przechowywanych na serwerach sklepu. Oznaczenie wciąż tam jest, gdy osoba stojąca za urządzeniem wraca z nowym adresem e-mail. Żadne z tych narzędzi nie daje Ci identyfikatora urządzenia i żadne nie może zatrzymać zwrotu. Mówią Ci natomiast, przy rejestracji lub przy paywallu, że to urządzenie już raz naraziło Cię na stratę.

Poniżej wyjaśniamy, co każdy sklep faktycznie przechowuje, jaka pułapka czasowa decyduje o tym, czy w ogóle możesz ustawić oznaczenie, i ile kosztuje Cię recydywista, zanim go wychwycisz.

Dlaczego nowe konto pokonuje każdą obronę na poziomie konta

Większość zabezpieczeń przed zwrotami opiera się na koncie. Apple appAccountToken wiąże transakcję z użytkownikiem w Twojej bazie danych. Zamaskowany identyfikator konta w Google Play robi to samo na Androidzie. Oba warto ustawiać przy każdym zakupie i oba opisują konto osoby, a nie sprzęt, który trzyma w ręku. Wystarczy usunąć konto i zarejestrować się z nowym adresem e-mail, a Twoja historia tej osoby zaczyna się od zera.

Sklepy nie zamkną tej luki za Ciebie. Powiadomienie App Store o zwrocie informuje, która transakcja została zwrócona. Unieważniony zakup w Google Play podaje token zakupu, identyfikator zamówienia i voidedReason. Żadne z nich nie zawiera identyfikatora urządzenia. Deweloper aplikacji randkowej opisał skutki w wątku na Apple Developer Forums: fałszywe profile wciąż kupowały członkostwo premium, które potem było zwracane, a blokowanie ich urządzeń własną metodą dewelopera nie pomagało.

Czy nowe konto resetuje okres próbny samego sklepu?

Nie na tym samym Apple Account. Według dokumentacji Apple oferty wprowadzające, w tym bezpłatne okresy próbne, przysługują klientom, którzy nie otrzymali jeszcze takiej oferty dla danego produktu ani żadnego produktu z tej samej grupy subskrypcji. Nowe logowanie w Twojej aplikacji nie daje więc drugiego okresu próbnego Apple. Nowy Apple Account już tak, podobnie jak wszystko, co rozdajesz sam: kredyty powitalne, okres próbny finansowany przez serwer, bonus za polecenie. To właśnie te prezenty chroni oznaczenie urządzenia.

Co faktycznie przechowuje Apple DeviceCheck

DeviceCheck składa się z dwóch części. W aplikacji klasa DCDevice generuje tymczasowy token identyfikujący urządzenie. Twój serwer wysyła ten token do Apple razem z tokenem JSON Web Token podpisanym kluczem z Twojego konta dewelopera, a Apple pozwala odczytać lub zaktualizować dwa bity dla tego urządzenia. Odpowiedź na zapytanie zawiera bit0, bit1 i last_update_time, podane jako rok i miesiąc. Apple jako przykłady zastosowań podaje urządzenie, które skorzystało już z oferty promocyjnej, oraz urządzenie uznane przez Ciebie za oszukańcze.

Apple przechowuje bity, ale znaczenie należy do Ciebie. Dokumentacja mówi, że to Ty odpowiadasz za śledzenie znaczenia bitów i decyzję, kiedy je zresetować, a jako przykład podaje sprzedane urządzenie. Dwa bity dają cztery stany, więc prosty schemat to jeden bit dla zwrotu po intensywnym użyciu i jeden dla już otrzymanych darmowych kredytów.

  • Token jest jednorazowy. Według Apple pozostaje ważny wystarczająco długo, by ponowić żądanie, ale do każdego wywołania należy generować nowy.
  • Kompilacje deweloperskie komunikują się z api.development.devicecheck.apple.com. Produkcja musi używać api.devicecheck.apple.com, inaczej Twoje oznaczenia trafią w złe miejsce.
  • Apple opisuje DeviceCheck jako jeden z elementów ogólnej oceny ryzyka, a nie wyrok. Traktuj ustawiony bit jako powód, by przyjrzeć się bliżej.

Co dodaje zapamiętywanie urządzeń Google na Androidzie

Wersja Google jest częścią Play Integrity API i wciąż jest w fazie beta, dostępna przez formularz zgłoszeniowy. Po zatwierdzeniu i włączeniu jej w Play Console każdy werdykt integralności zawiera trzy własne bity dla urządzenia. Zapisujesz je wywołaniem serwerowym do punktu końcowego deviceRecall:write, używając tokenu integralności, który już zweryfikowałeś. Google podaje, że dane przetrwają ponowną instalację aplikacji i reset urządzenia, bo znajdują się na serwerach Google.

Dokumentacja Google wyjątkowo wprost opisuje zastosowanie. Wymienia urządzenia z dowodami poważnych nadużyć, urządzenia, które już wykorzystały wartościowy element, np. bezpłatny okres próbny, oraz urządzenia wielokrotnie używane do zakładania nowych kont w celach nadużyć. Równie wprost określa granicę: zapamiętywanie urządzeń wolno stosować wyłącznie do ochrony bezpieczeństwa aplikacji i zwalczania nadużyć, oszustw i nieuprawnionego dostępu. Nigdy do fingerprintingu ani śledzenia poszczególnych użytkowników i nigdy do przechowywania wrażliwych cech, takich jak wiek, płeć czy lokalizacja.

PytanieApple DeviceCheckZapamiętywanie urządzeń Google Play
StatusOgólnie dostępneBeta, zatwierdzenie przez formularz zgłoszeniowy
Bity na urządzenie23
Gdzie są przechowywaneSerwery AppleSerwery Google
Przetrwa reinstalację i resetPrzechowywane po stronie serwera, reset Apple pozostawia TobieTak, oba, według Google
Wspólne dla Twoich aplikacjiPowiązane z Twoim kontem deweloperaTak, każda aplikacja na koncie dewelopera
Znacznik czasuRok i miesiąc ostatniej aktualizacjiData zapisu dla każdego bitu
Okres przechowywaniaDo czasu resetu przez Ciebie3 lata od ostatniego odczytu lub zapisu
Token do zapisuŚwieży, jednorazowy token DCDeviceZweryfikowany token integralności, ważny 14 dni
Dodatkowe wymaganiaApp ID zarejestrowany na Twoim koncieAktualny Sklep Play i usługi Play, użytkownik z licencją Play, bez emulatorów

Problem czasu: zwroty przychodzą, gdy tokenu już nie ma

Oba narzędzia potrzebują czegoś od samego urządzenia, zanim będzie można je oznaczyć. Apple potrzebuje świeżego tokenu DCDevice. Google potrzebuje tokenu integralności z tego urządzenia, nie starszego niż 14 dni. Tymczasem zwrot dociera do Twojego serwera przez powiadomienie sklepu, które nic nie wie o urządzeniu. Pytanie nie brzmi więc, czy oznaczyć urządzenie. Brzmi, czy będziesz jeszcze w stanie do niego dotrzeć, gdy zwrot nadejdzie.

48-godzinne zwroty Google mieszczą się w 14-dniowym oknie

Samodzielne zwroty w Google Play są dostępne tylko w ciągu 48 godzin od zakupu, czyli z dużym zapasem w ramach 14 dni, przez które token integralności nadaje się do zapisu. Wykonaj sprawdzenie integralności w chwili zakupu, zachowaj zweryfikowany token obok identyfikatora zamówienia, a gdy dla tego zamówienia nadejdzie unieważniony zakup, możesz od razu zapisać bit. Trudniejsze są obciążenia zwrotne, bo reklamacja bankowa może nadejść długo po 14. dniu.

Przy zwrotach Apple urządzenie musi wrócić

Zwrot Apple może nadejść kilka tygodni po zakupie, a zapisany token DeviceCheck nie jest przeznaczony do ponownego użycia. W praktyce najpierw oznaczasz konto, a dopiero potem urządzenie. Gdy nadejdzie powiadomienie o zwrocie, oznacz konto w swojej bazie danych. Następnym razem, gdy to konto otworzy aplikację, poproś o token DeviceCheck i ustaw bit. Osoby, które po zwrocie zatrzymują treści, zwykle wracają, bo korzystanie z nich było celem.

  • Przy zakupie przypisz transakcję do własnego konta przez appAccountToken lub zamaskowany identyfikator konta.
  • Przy zwrocie lub unieważnieniu oznacz to konto na swoim serwerze.
  • W następnej sesji oznaczonego konta pobierz token urządzenia i ustaw swój bit.
  • Przy każdej rejestracji odczytaj bity, zanim przyznasz cokolwiek, co kosztuje Cię pieniądze.

Ile kosztuje Cię osoba wielokrotnie nadużywająca zwrotów

Zwrócona cena to część widoczna. Reszta to wszystko, co zakup już uruchomił. Jeśli Twoja aplikacja wydaje pieniądze, by dostarczyć to, co sprzedaje, każdy cykl zakupu, wykorzystania i zwrotu zostawia te pieniądze wydane: czas GPU na generowane obrazy, płatne wywołania modelu lub API danych, przestrzeń na eksporty, które klient zachowuje, oraz wypłaty dla twórców naliczone od sprzedaży. Nowe konto otwiera pętlę na nowo, a Twoja księgowość odnotowuje je jako zupełnie nowego klienta.

Darmowe upominki wyciekają w ten sam sposób, bez żadnego zwrotu. Urządzenie, które zbiera kredyty powitalne na dziesięciu kontach, zużywa dziesięć razy więcej mocy obliczeniowej, niż zaplanowałeś na jeden okres próbny. W Google Play obciążenia zwrotne dla zamówień po 3 sierpnia 2026 r. kosztują Cię ponadto cenę zakupu pomniejszoną o opłatę serwisową Google, plus opłaty bankowe. Osoba, która za każdym razem składa reklamację z nowego konta, kosztuje Cię więc za każdym razem pełną reklamację.

Pozycja kosztówBez oznaczenia urządzeniaZ oznaczeniem urządzenia
Kredyty powitalne lub finansowany przez Ciebie okres próbnyPrzyznawane ponownie przy każdym nowym koncieWstrzymane lub zmniejszone na oznaczonym urządzeniu
Moc obliczeniowa i płatne wywołania APIWydawane ponownie w każdym cykluWydane raz, potem zablokowane
Wypłaty dla twórców lub partnerówWypłacane od sprzedaży, które wracają jako zwrotyWstrzymane do weryfikacji na oznaczonych urządzeniach
Obciążenia zwrotne Google Play po 3 sierpnia 2026 r.Cena minus opłata serwisowa, plus opłaty bankowe, za każdym razemTyle samo za reklamację, ale mniej powtórnych reklamacji
Decyzje sklepu o zwrotachPodejmowane przez sklepNadal podejmowane przez sklep
Szuflada pełna identycznych smartfonów w warsztacie naprawczym, jeden z nich oznaczony paskiem pomarańczowej taśmy. Pokazuje, jak oznaczenie urządzenia wyróżnia jeden telefon spośród wielu

Co zrobić z oznaczonym urządzeniem

Oznaczenie odpowiada na jedno pytanie: czy to urządzenie powinno znowu dostać coś za darmo? Reaguj proporcjonalnie, bo ustawiony bit to poszlaka, a nie dowód. Telefony są odsprzedawane, rodziny dzielą się iPadami, a Google wprost zaleca z tego powodu rozważenie ignorowania lub resetowania starych danych.

  • Na oznaczonym urządzeniu pomiń kredyty powitalne, okres próbny finansowany przez serwer lub bonus za polecenie i zaproponuj zamiast tego płatny plan.
  • Nie podpisuj oferty promocyjnej dla oznaczonego urządzenia. W App Store to Twój serwer generuje podpis odblokowujący ofertę promocyjną, więc decyzja należy do Ciebie.
  • Na oznaczonym urządzeniu wymagaj zaksięgowania płatności przed dostarczeniem drogich produktów konsumpcyjnych.
  • Korzystaj ze znacznika czasu. Oznaczenie z zeszłego miesiąca waży więcej niż ustawione dwa lata temu.
  • Daj ludziom możliwość kontaktu z pomocą techniczną. Nabywca używanego telefonu oznaczony przez pomyłkę powinien dostać odpowiedź, a Ty możesz zresetować bity.

Czy można po prostu zablokować urządzenie?

Możesz odmówić własnych darmowych dodatków i właśnie tam oznaczenia urządzeń się opłacają. Twarda blokada jest bardziej ryzykowna. Osoba, która dziś trzyma telefon, może nie być tą, która go nadużyła, a własne zasady Google ograniczają zapamiętywanie urządzeń do zapobiegania nadużyciom, a nie do śledzenia ludzi. Blokuj to, co kosztuje Cię pieniądze, a płatną ścieżkę zostaw otwartą.

A co z Keychain (pękiem kluczy) lub identyfikatorem urządzenia?

Deweloperzy często pytają, czy znacznik w Keychain lub identyfikator sprzętowy nie zrobiłby tego samego. Znacznik zapisany przez aplikację na telefonie znika po resecie urządzenia, a Apple nie udostępnia aplikacjom w tym celu stałego identyfikatora sprzętowego. DeviceCheck i zapamiętywanie urządzeń to rozwiązania zatwierdzone przez sklepy właśnie dlatego, że bity znajdują się na serwerach Apple i Google, a nie na telefonie.

Gdzie nadal decyduje sklep

Oznaczenia urządzeń zmieniają to, co Twoja aplikacja rozda następnym razem. Nie dotyczą zwrotu, który właśnie rozpatrujesz. Tylko dwa procesy zwrotów pozwalają przedstawić dowody przed decyzją sklepu. Apple wysyła CONSUMPTION_REQUEST i prosi o dane o wykorzystaniu w ciągu 12 godzin. Google Play otwiera przegląd obciążenia zwrotnego, na który odpowiadasz w ciągu 24 godzin przez orders.reviewrefund. Wszystko inne, od 48-godzinnych zwrotów w Google Play po zwroty przez pomoc techniczną i automatyczne zwroty niepotwierdzonych zakupów, rozstrzyga się bez Ciebie. Obciążenia zwrotne są ostateczne, gdy bank wyda decyzję.

RefundHalt odpowiada na każdy CONSUMPTION_REQUEST i każdy przegląd obciążenia zwrotnego w Google Play w wymaganym terminie, korzystając z Twoich prawdziwych danych o wykorzystaniu, i wiąże każdy zwrot z kontem, które go zażądało. Dzięki temu Twój serwer wie, które urządzenie oznaczyć, gdy następnym razem się zgłosi.

Często zadawane pytania

Do czego służy Apple DeviceCheck?
DeviceCheck pozwala Twojemu serwerowi zapisywać i odczytywać dwa bity na urządzenie na serwerach Apple. Apple jako przykłady podaje oznaczenie urządzenia, które skorzystało już z oferty promocyjnej, oraz oznaczenie urządzenia uznanego przez Ciebie za oszukańcze. To Ty decydujesz, co znaczą bity i kiedy je zresetować.
Czy DeviceCheck działa po usunięciu aplikacji przez użytkownika lub założeniu nowego konta?
Tak. Bity należą do urządzenia i są przechowywane na serwerach Apple, a nie w Twojej aplikacji ani na koncie użytkownika, więc nowa rejestracja na tym samym urządzeniu odczyta te same bity po ponownej instalacji aplikacji. Resetowanie Apple pozostawia Tobie, np. gdy urządzenie zostanie sprzedane.
Czy na Androidzie istnieje odpowiednik DeviceCheck?
Tak, zapamiętywanie urządzeń (device recall) w Play Integrity API. Przechowuje trzy własne bity na urządzenie na serwerach Google, przetrwa reinstalacje i resety urządzenia, jest wspólne dla wszystkich aplikacji na Twoim koncie dewelopera i przechowuje dane przez 3 lata od ostatniego dostępu. Jest w wersji beta i wymaga zatwierdzenia.
Czy oznaczenie urządzenia może uniemożliwić klientowi otrzymanie zwrotu?
Nie. O zwrotach decydują same Apple i Google. Oznaczenie urządzenia kontroluje tylko to, co Twoja aplikacja zaoferuje następnym razem, np. darmowe kredyty lub ofertę promocyjną. Twoje dowody liczą się tylko w CONSUMPTION_REQUEST od Apple, z odpowiedzią w ciągu 12 godzin, oraz w przeglądzie obciążenia zwrotnego w Google Play, z odpowiedzią w ciągu 24 godzin.
Czy wolno zablokować urządzenie za nadużywanie zwrotów?
Google dopuszcza zapamiętywanie urządzeń wyłącznie w celu bezpieczeństwa aplikacji oraz zapobiegania nadużyciom, oszustwom i nieuprawnionemu dostępowi, a zakazuje używania go do fingerprintingu lub śledzenia użytkowników. Ponieważ urządzenia są odsprzedawane i współdzielone, bezpieczniej jest wstrzymać darmowe dodatki na oznaczonym urządzeniu, niż odciąć je od płatnych funkcji.

Źródła i materiały dodatkowe

RefundHalt

Autopilot zwrotów dla App Store i Google Play

Czytaj dalej

Kolejny wniosek o zwrot jest już w drodze.

Skonfiguruj RefundHalt w czasie potrzebnym na przeczytanie kolejnej wiadomości od pomocy technicznej o zwrocie, którego nie udało Ci się zakwestionować.